studiokit-scaffolding-js 7.0.12-next.1.3 → 7.0.12-next.2.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/lib/components/ActionList.js +164 -37
- package/lib/components/AlertDialog.js +128 -12
- package/lib/components/AlertWithIcon.js +88 -29
- package/lib/components/ConnectedModal.js +35 -12
- package/lib/components/Dropdowns/GroupsDropdown.js +63 -45
- package/lib/components/Dropdowns/ManagedNavDropdown.js +92 -67
- package/lib/components/Dropdowns/UserDropdown.js +105 -24
- package/lib/components/Dropdowns/index.js +4 -10
- package/lib/components/EntityOwnerList.js +47 -21
- package/lib/components/Error.js +101 -12
- package/lib/components/ErrorBoundary.js +127 -38
- package/lib/components/ErrorMessage.js +39 -12
- package/lib/components/Forms/DateField.js +56 -45
- package/lib/components/Forms/TimeField.js +76 -45
- package/lib/components/Forms/index.js +3 -5
- package/lib/components/Groups/CreateEditCopySaveButtons.js +109 -14
- package/lib/components/Groups/ExternalGroups/Attach.js +206 -151
- package/lib/components/Groups/ExternalGroups/Table.js +176 -48
- package/lib/components/Groups/GroupCreateOrEditCommonProps.js +2 -2
- package/lib/components/Groups/RosterSyncInfo.js +142 -23
- package/lib/components/HOC/AccessibleAppComponent.js +88 -72
- package/lib/components/HOC/ActivityRequiredComponent.js +68 -33
- package/lib/components/HOC/AsyncComponent.js +49 -41
- package/lib/components/HOC/AuthenticatedComponent.js +55 -44
- package/lib/components/HOC/CollectionComponent.js +154 -104
- package/lib/components/HOC/CollectionFirstItemComponent.js +45 -40
- package/lib/components/HOC/CollectionItemComponent.js +152 -100
- package/lib/components/HOC/ConnectedModalComponent.js +87 -69
- package/lib/components/HOC/DataDependentComponent.js +26 -27
- package/lib/components/HOC/EntityComponent.js +57 -53
- package/lib/components/HOC/FullscreenModalComponent.js +139 -108
- package/lib/components/HOC/GroupActivityRequiredComponent.js +27 -20
- package/lib/components/HOC/GuidComponent.js +20 -20
- package/lib/components/HOC/ModelContextDependencyVerifyComponent.js +32 -29
- package/lib/components/HOC/ModelErrorRedirectComponent.js +37 -39
- package/lib/components/HOC/SearchPersistorComponent.js +237 -173
- package/lib/components/HOC/UnauthenticatedComponent.js +32 -30
- package/lib/components/HOC/UserComponent.js +6 -8
- package/lib/components/Icons/IconAlphaList.js +28 -8
- package/lib/components/Icons/IconExternalUser.js +28 -8
- package/lib/components/Icons/IconImpersonation.js +28 -8
- package/lib/components/Icons/IconStopImpersonating.js +28 -8
- package/lib/components/Icons/IconTable.js +29 -9
- package/lib/components/Icons/IconTableDeleteCol.js +28 -8
- package/lib/components/Icons/IconTableDeleteRow.js +28 -8
- package/lib/components/Icons/IconTableInsertCol.js +28 -8
- package/lib/components/Icons/IconTableInsertRow.js +28 -8
- package/lib/components/Impersonation/Button.js +71 -16
- package/lib/components/Impersonation/Link.js +72 -16
- package/lib/components/Impersonation/UserDetail.js +60 -11
- package/lib/components/Loading.js +23 -8
- package/lib/components/LockDownBrowser/Check.js +188 -51
- package/lib/components/LockDownBrowser/ExitButton.js +22 -13
- package/lib/components/LockDownBrowser/Launch.js +64 -64
- package/lib/components/Lti/Confirm.js +147 -14
- package/lib/components/Lti/CreateNonLtiGroupAlertDialog.js +165 -36
- package/lib/components/Lti/Launch.js +99 -25
- package/lib/components/Lti/LaunchGroup.js +81 -16
- package/lib/components/ManageTable.js +304 -90
- package/lib/components/ManageTableNoDataComponent.js +38 -7
- package/lib/components/NewVersionAlert.js +76 -49
- package/lib/components/NotFound.js +81 -11
- package/lib/components/Notifications.js +179 -129
- package/lib/components/PaginationNextButton.js +28 -9
- package/lib/components/PaginationPreviousButton.js +28 -9
- package/lib/components/Quill/CustomToolbar.js +427 -222
- package/lib/components/Quill/Formats/Image.js +67 -67
- package/lib/components/Quill/Formats/List.js +38 -47
- package/lib/components/Quill/Formats/Video.js +23 -26
- package/lib/components/Quill/ImageDropModule.js +136 -114
- package/lib/components/Quill/ImageWarning.js +41 -12
- package/lib/components/Quill/ImageWithAltTextModal.js +420 -89
- package/lib/components/Quill/Specs/CustomImageSpec.js +32 -31
- package/lib/components/Quill/Specs/CustomVideoSpec.js +22 -23
- package/lib/components/Quill/TableModule/Blots/BaseTableBlot.js +89 -97
- package/lib/components/Quill/TableModule/Blots/TableBlot.js +47 -50
- package/lib/components/Quill/TableModule/Blots/TableBodyBlot.js +48 -51
- package/lib/components/Quill/TableModule/Blots/TableCellBlot.js +219 -224
- package/lib/components/Quill/TableModule/Blots/TableContainer.js +75 -86
- package/lib/components/Quill/TableModule/Blots/TableRowBlot.js +70 -73
- package/lib/components/Quill/TableModule/constants.js +40 -42
- package/lib/components/Quill/TableModule/index.js +357 -305
- package/lib/components/Quill/TableModule/utils.js +39 -48
- package/lib/components/Quill/accessibilityFix.js +219 -223
- package/lib/components/Quill/index.js +30 -33
- package/lib/components/RefreshIndicator/Bordered.js +44 -10
- package/lib/components/RefreshIndicator/Inline.js +43 -12
- package/lib/components/RefreshIndicator/index.js +257 -62
- package/lib/components/SearchControls.js +211 -14
- package/lib/components/SentryRoute.js +5 -7
- package/lib/components/Tables/RoleFilter.js +66 -38
- package/lib/components/Tables/TextFilter.js +58 -18
- package/lib/components/UserRoles/Add.js +193 -99
- package/lib/components/UserRoles/Context.js +3 -6
- package/lib/components/UserRoles/RoleCell.js +176 -75
- package/lib/components/UserRoles/Select.js +151 -20
- package/lib/components/UserRoles/Table.js +215 -82
- package/lib/components/UserRoles/index.js +526 -386
- package/lib/config/eslint/index.js +26 -29
- package/lib/config/eslint/lib/order.js +21 -28
- package/lib/config/eslint/lib/prettier.js +15 -19
- package/lib/config/eslint/lib/typescript.js +87 -113
- package/lib/config/eslint/react.js +18 -15
- package/lib/constants/baseActivity.js +26 -28
- package/lib/constants/baseRole.js +10 -12
- package/lib/constants/configuration.js +43 -55
- package/lib/constants/externalProviderType.js +6 -8
- package/lib/constants/fetchErrorData.js +10 -12
- package/lib/constants/index.js +13 -15
- package/lib/constants/lockDownBrowser.js +23 -25
- package/lib/constants/mockData.js +370 -300
- package/lib/constants/modelStatus.js +11 -13
- package/lib/constants/notificationType.js +8 -10
- package/lib/constants/operatingSystem.js +8 -10
- package/lib/constants/shard.js +7 -9
- package/lib/constants/table.js +18 -22
- package/lib/constants/tier.js +8 -10
- package/lib/constants/userRole.js +11 -8
- package/lib/endpointMappings.js +191 -182
- package/lib/hooks/useCollection.js +79 -65
- package/lib/hooks/useCollectionConfiguration.js +220 -80
- package/lib/hooks/useCollectionItem.js +151 -57
- package/lib/hooks/useGuid.js +16 -9
- package/lib/hooks/usePrevious.js +14 -13
- package/lib/index.js +11 -26
- package/lib/redux/actionCreator.js +44 -35
- package/lib/redux/actions/AuthAction.js +45 -32
- package/lib/redux/actions/ModalAction.js +6 -8
- package/lib/redux/actions/ModelAction.js +95 -43
- package/lib/redux/actions/NotificationAction.js +6 -8
- package/lib/redux/actions/SearchAction.js +5 -7
- package/lib/redux/actions/index.js +6 -8
- package/lib/redux/configureReducers.js +48 -46
- package/lib/redux/configureStore.js +77 -91
- package/lib/redux/helpers.js +2 -5
- package/lib/redux/reducers/authReducer.js +44 -43
- package/lib/redux/reducers/index.js +7 -14
- package/lib/redux/reducers/modalsReducer.js +43 -31
- package/lib/redux/reducers/modelsReducer.js +131 -137
- package/lib/redux/reducers/notificationsReducer.js +20 -20
- package/lib/redux/reducers/searchReducer.js +13 -13
- package/lib/redux/sagas/appInsightsSaga.js +19 -21
- package/lib/redux/sagas/authSaga.js +248 -234
- package/lib/redux/sagas/caliperSaga.js +142 -131
- package/lib/redux/sagas/clockOffsetSaga.js +29 -32
- package/lib/redux/sagas/configurationSaga.js +8 -10
- package/lib/redux/sagas/downtimeApiErrorSaga.js +16 -19
- package/lib/redux/sagas/errorSaga.js +23 -24
- package/lib/redux/sagas/googleAnalyticsSaga.js +24 -27
- package/lib/redux/sagas/identityProviderSaga.js +19 -21
- package/lib/redux/sagas/initialDataLoadSaga.js +34 -31
- package/lib/redux/sagas/lockDownBrowserErrorSaga.js +25 -22
- package/lib/redux/sagas/modelFetchSaga.js +302 -286
- package/lib/redux/sagas/noStoreSaga.js +60 -61
- package/lib/redux/sagas/postLoginDataSaga.js +37 -32
- package/lib/redux/sagas/postLoginRedirectSaga.js +22 -27
- package/lib/redux/sagas/rootSaga.js +77 -60
- package/lib/redux/sagas/sentrySaga.js +25 -28
- package/lib/redux/sagas/userIdSaga.js +13 -15
- package/lib/services/codeProviderService.js +21 -21
- package/lib/services/dateService.js +6 -8
- package/lib/services/documentService.js +10 -11
- package/lib/services/fetchService.js +103 -95
- package/lib/services/persistenceService.js +27 -30
- package/lib/services/ticketProviderService.js +25 -25
- package/lib/services/tokenPersistenceService.js +8 -10
- package/lib/services/windowService.js +14 -16
- package/lib/startup.js +110 -101
- package/lib/types/AppConfiguration.js +2 -2
- package/lib/types/Artifact.js +7 -9
- package/lib/types/BaseReduxState.js +2 -2
- package/lib/types/Client.js +2 -2
- package/lib/types/Collection.js +2 -2
- package/lib/types/Configuration.js +2 -2
- package/lib/types/DeepLinkingResponseRequest.js +2 -2
- package/lib/types/DeletableModel.js +2 -2
- package/lib/types/Event.js +2 -2
- package/lib/types/ExternalGroup.js +2 -2
- package/lib/types/ExternalProvider.js +2 -2
- package/lib/types/ExternalTerm.js +2 -2
- package/lib/types/Group.js +2 -2
- package/lib/types/IdentityProvider.js +2 -2
- package/lib/types/LtiLaunch.js +2 -2
- package/lib/types/NameOnlyEntity.js +2 -2
- package/lib/types/Notification.js +2 -2
- package/lib/types/OptionalRecord.js +2 -2
- package/lib/types/OwnerSchedule.js +2 -2
- package/lib/types/PropertyOfType.js +2 -2
- package/lib/types/Quill.js +2 -2
- package/lib/types/RoleDescription.js +2 -2
- package/lib/types/Search.js +2 -2
- package/lib/types/SimpleLocation.js +2 -2
- package/lib/types/UniTime.js +2 -2
- package/lib/types/User.js +2 -2
- package/lib/types/UserRole.js +2 -2
- package/lib/types/auth/AuthState.js +2 -2
- package/lib/types/auth/CasV1LoginRequestBody.js +2 -2
- package/lib/types/auth/ClientCredentials.js +2 -2
- package/lib/types/auth/CodeProviderService.js +2 -2
- package/lib/types/auth/LocalLoginRequestBody.js +2 -2
- package/lib/types/auth/TicketProviderService.js +2 -2
- package/lib/types/auth/TokenPersistenceService.js +2 -2
- package/lib/types/auth/index.js +8 -10
- package/lib/types/externals.d.js +2 -0
- package/lib/types/index.js +29 -31
- package/lib/types/net/EndpointConfig.js +2 -2
- package/lib/types/net/EndpointMapping.js +2 -2
- package/lib/types/net/EndpointMappings.js +2 -2
- package/lib/types/net/ErrorHandler.js +2 -2
- package/lib/types/net/FetchConfig.js +2 -2
- package/lib/types/net/FetchErrorData.js +6 -8
- package/lib/types/net/FetchResult.js +2 -2
- package/lib/types/net/HTTPMethod.js +2 -2
- package/lib/types/net/HTTPStatusCode.js +12 -14
- package/lib/types/net/Metadata.js +2 -2
- package/lib/types/net/Model.js +2 -2
- package/lib/types/net/ModelCollection.js +2 -2
- package/lib/types/net/ModelsState.js +2 -2
- package/lib/types/net/OAuthToken.js +2 -2
- package/lib/types/net/OAuthTokenOrNull.js +2 -2
- package/lib/types/net/TokenAccessFunction.js +2 -2
- package/lib/types/net/index.js +17 -19
- package/lib/utils/baseActivity.js +83 -85
- package/lib/utils/baseRole.js +32 -36
- package/lib/utils/collection.js +403 -297
- package/lib/utils/cookies.js +19 -23
- package/lib/utils/date.js +188 -205
- package/lib/utils/dom.js +130 -131
- package/lib/utils/domainIdentifier.js +4 -8
- package/lib/utils/entityUserRole.js +2 -5
- package/lib/utils/error.js +14 -19
- package/lib/utils/events.js +32 -31
- package/lib/utils/externalGroup.js +20 -25
- package/lib/utils/externalProviders.js +4 -7
- package/lib/utils/externalTerms.js +6 -6
- package/lib/utils/fetch.js +168 -176
- package/lib/utils/group.js +14 -11
- package/lib/utils/groupDates.js +38 -46
- package/lib/utils/groupRoles.js +23 -32
- package/lib/utils/lockDownBrowser.js +12 -15
- package/lib/utils/logger.js +23 -28
- package/lib/utils/lti.js +4 -7
- package/lib/utils/model.js +28 -43
- package/lib/utils/number.js +9 -13
- package/lib/utils/promise.js +23 -26
- package/lib/utils/quill.js +55 -60
- package/lib/utils/route.js +52 -60
- package/lib/utils/search.js +72 -87
- package/lib/utils/shard.js +33 -42
- package/lib/utils/sort.js +47 -50
- package/lib/utils/string.js +10 -12
- package/lib/utils/table.js +29 -33
- package/lib/utils/timezone.js +7 -12
- package/lib/utils/url.js +130 -144
- package/lib/utils/user.js +54 -64
- package/lib/utils/userAgent.js +7 -14
- package/lib/utils/userRole.js +36 -39
- package/package.json +17 -3
package/lib/utils/groupRoles.js
CHANGED
|
@@ -1,39 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const groupsAsGrader = (groups) => {
|
|
18
|
-
return filterGroupsByRole(groups, baseRole_1.BASE_ROLE.GROUP_GRADER);
|
|
19
|
-
};
|
|
20
|
-
exports.groupsAsGrader = groupsAsGrader;
|
|
21
|
-
const groupsAsAnythingButLearner = (groups) => {
|
|
22
|
-
return filterGroupsByRoleOtherThanRole(groups, baseRole_1.BASE_ROLE.GROUP_LEARNER);
|
|
23
|
-
};
|
|
24
|
-
exports.groupsAsAnythingButLearner = groupsAsAnythingButLearner;
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
import { BASE_ROLE } from '../constants/baseRole';
|
|
3
|
+
import { getModelArray } from './model';
|
|
4
|
+
import { isExternal } from './userRole';
|
|
5
|
+
export const groupsAsLearner = groups => {
|
|
6
|
+
return filterGroupsByRole(groups, BASE_ROLE.GROUP_LEARNER);
|
|
7
|
+
};
|
|
8
|
+
export const groupsAsOwner = groups => {
|
|
9
|
+
return filterGroupsByRole(groups, BASE_ROLE.GROUP_OWNER);
|
|
10
|
+
};
|
|
11
|
+
export const groupsAsGrader = groups => {
|
|
12
|
+
return filterGroupsByRole(groups, BASE_ROLE.GROUP_GRADER);
|
|
13
|
+
};
|
|
14
|
+
export const groupsAsAnythingButLearner = groups => {
|
|
15
|
+
return filterGroupsByRoleOtherThanRole(groups, BASE_ROLE.GROUP_LEARNER);
|
|
16
|
+
};
|
|
25
17
|
const groupHasRole = (value, key) => key !== '_metadata' && !!value && !!value.id && !!value.roles;
|
|
26
18
|
const filterGroupsByRole = (groups, role) => {
|
|
27
|
-
|
|
19
|
+
return _.values(_.omitBy(getModelArray(groups), (value, key) => !groupHasRole(value, key) || !_.includes(value.roles, role)));
|
|
28
20
|
};
|
|
29
21
|
const filterGroupsByRoleOtherThanRole = (groups, role) => {
|
|
30
|
-
|
|
22
|
+
return _.values(_.omitBy(getModelArray(groups), (value, key) => !groupHasRole(value, key) || _.every(value.roles, r => r === role)));
|
|
31
23
|
};
|
|
32
|
-
const filterManualGroupUsers =
|
|
33
|
-
|
|
24
|
+
export const filterManualGroupUsers = groupUsers => {
|
|
25
|
+
return groupUsers.filter(groupUser => !groupUser.roles.some(r => isExternal(r)));
|
|
34
26
|
};
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return groupUsers.filter(groupUser => groupUser.roles.some(r => (0, userRole_1.isExternal)(r)));
|
|
27
|
+
export const filterSyncedGroupUsers = groupUsers => {
|
|
28
|
+
return groupUsers.filter(groupUser => groupUser.roles.some(r => isExternal(r)));
|
|
38
29
|
};
|
|
39
|
-
|
|
30
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfIiwiQkFTRV9ST0xFIiwiZ2V0TW9kZWxBcnJheSIsImlzRXh0ZXJuYWwiLCJncm91cHNBc0xlYXJuZXIiLCJncm91cHMiLCJmaWx0ZXJHcm91cHNCeVJvbGUiLCJHUk9VUF9MRUFSTkVSIiwiZ3JvdXBzQXNPd25lciIsIkdST1VQX09XTkVSIiwiZ3JvdXBzQXNHcmFkZXIiLCJHUk9VUF9HUkFERVIiLCJncm91cHNBc0FueXRoaW5nQnV0TGVhcm5lciIsImZpbHRlckdyb3Vwc0J5Um9sZU90aGVyVGhhblJvbGUiLCJncm91cEhhc1JvbGUiLCJ2YWx1ZSIsImtleSIsImlkIiwicm9sZXMiLCJyb2xlIiwidmFsdWVzIiwib21pdEJ5IiwiaW5jbHVkZXMiLCJldmVyeSIsInIiLCJmaWx0ZXJNYW51YWxHcm91cFVzZXJzIiwiZ3JvdXBVc2VycyIsImZpbHRlciIsImdyb3VwVXNlciIsInNvbWUiLCJmaWx0ZXJTeW5jZWRHcm91cFVzZXJzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2dyb3VwUm9sZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IHsgQkFTRV9ST0xFIH0gZnJvbSAnLi4vY29uc3RhbnRzL2Jhc2VSb2xlJ1xuaW1wb3J0IHsgR3JvdXAsIE1ldGFkYXRhLCBNb2RlbENvbGxlY3Rpb24sIFVzZXJXaXRoUm9sZXMgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IGdldE1vZGVsQXJyYXkgfSBmcm9tICcuL21vZGVsJ1xuaW1wb3J0IHsgaXNFeHRlcm5hbCB9IGZyb20gJy4vdXNlclJvbGUnXG5cbmV4cG9ydCBjb25zdCBncm91cHNBc0xlYXJuZXIgPSAoZ3JvdXBzOiBNb2RlbENvbGxlY3Rpb248R3JvdXA+KSA9PiB7XG5cdHJldHVybiBmaWx0ZXJHcm91cHNCeVJvbGUoZ3JvdXBzLCBCQVNFX1JPTEUuR1JPVVBfTEVBUk5FUilcbn1cblxuZXhwb3J0IGNvbnN0IGdyb3Vwc0FzT3duZXIgPSAoZ3JvdXBzOiBNb2RlbENvbGxlY3Rpb248R3JvdXA+KSA9PiB7XG5cdHJldHVybiBmaWx0ZXJHcm91cHNCeVJvbGUoZ3JvdXBzLCBCQVNFX1JPTEUuR1JPVVBfT1dORVIpXG59XG5cbmV4cG9ydCBjb25zdCBncm91cHNBc0dyYWRlciA9IChncm91cHM6IE1vZGVsQ29sbGVjdGlvbjxHcm91cD4pID0+IHtcblx0cmV0dXJuIGZpbHRlckdyb3Vwc0J5Um9sZShncm91cHMsIEJBU0VfUk9MRS5HUk9VUF9HUkFERVIpXG59XG5cbmV4cG9ydCBjb25zdCBncm91cHNBc0FueXRoaW5nQnV0TGVhcm5lciA9IChncm91cHM6IE1vZGVsQ29sbGVjdGlvbjxHcm91cD4pID0+IHtcblx0cmV0dXJuIGZpbHRlckdyb3Vwc0J5Um9sZU90aGVyVGhhblJvbGUoZ3JvdXBzLCBCQVNFX1JPTEUuR1JPVVBfTEVBUk5FUilcbn1cblxuY29uc3QgZ3JvdXBIYXNSb2xlID0gKHZhbHVlOiBHcm91cCB8IE1ldGFkYXRhIHwgbnVsbCB8IHVuZGVmaW5lZCwga2V5OiBzdHJpbmcpID0+XG5cdGtleSAhPT0gJ19tZXRhZGF0YScgJiYgISF2YWx1ZSAmJiAhISh2YWx1ZSBhcyBHcm91cCkuaWQgJiYgISEodmFsdWUgYXMgR3JvdXApLnJvbGVzXG5cbmNvbnN0IGZpbHRlckdyb3Vwc0J5Um9sZSA9IChncm91cHM6IE1vZGVsQ29sbGVjdGlvbjxHcm91cD4sIHJvbGU6IHN0cmluZykgPT4ge1xuXHRyZXR1cm4gXy52YWx1ZXMoXG5cdFx0Xy5vbWl0QnkoZ2V0TW9kZWxBcnJheShncm91cHMpLCAodmFsdWUsIGtleSkgPT4gIWdyb3VwSGFzUm9sZSh2YWx1ZSwga2V5KSB8fCAhXy5pbmNsdWRlcyh2YWx1ZS5yb2xlcywgcm9sZSkpXG5cdClcbn1cblxuY29uc3QgZmlsdGVyR3JvdXBzQnlSb2xlT3RoZXJUaGFuUm9sZSA9IChncm91cHM6IE1vZGVsQ29sbGVjdGlvbjxHcm91cD4sIHJvbGU6IHN0cmluZykgPT4ge1xuXHRyZXR1cm4gXy52YWx1ZXMoXG5cdFx0Xy5vbWl0QnkoXG5cdFx0XHRnZXRNb2RlbEFycmF5KGdyb3VwcyksXG5cdFx0XHQodmFsdWUsIGtleSkgPT4gIWdyb3VwSGFzUm9sZSh2YWx1ZSwga2V5KSB8fCBfLmV2ZXJ5KHZhbHVlLnJvbGVzLCByID0+IHIgPT09IHJvbGUpXG5cdFx0KVxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJNYW51YWxHcm91cFVzZXJzID0gKGdyb3VwVXNlcnM6IFVzZXJXaXRoUm9sZXNbXSkgPT4ge1xuXHRyZXR1cm4gZ3JvdXBVc2Vycy5maWx0ZXIoZ3JvdXBVc2VyID0+ICFncm91cFVzZXIucm9sZXMuc29tZShyID0+IGlzRXh0ZXJuYWwocikpKVxufVxuXG5leHBvcnQgY29uc3QgZmlsdGVyU3luY2VkR3JvdXBVc2VycyA9IChncm91cFVzZXJzOiBVc2VyV2l0aFJvbGVzW10pID0+IHtcblx0cmV0dXJuIGdyb3VwVXNlcnMuZmlsdGVyKGdyb3VwVXNlciA9PiBncm91cFVzZXIucm9sZXMuc29tZShyID0+IGlzRXh0ZXJuYWwocikpKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxDQUFDLE1BQU0sUUFBUTtBQUN0QixTQUFTQyxTQUFTLFFBQVEsdUJBQXVCO0FBRWpELFNBQVNDLGFBQWEsUUFBUSxTQUFTO0FBQ3ZDLFNBQVNDLFVBQVUsUUFBUSxZQUFZO0FBRXZDLE9BQU8sTUFBTUMsZUFBZSxHQUFJQyxNQUE4QixJQUFLO0VBQ2xFLE9BQU9DLGtCQUFrQixDQUFDRCxNQUFNLEVBQUVKLFNBQVMsQ0FBQ00sYUFBYSxDQUFDO0FBQzNELENBQUM7QUFFRCxPQUFPLE1BQU1DLGFBQWEsR0FBSUgsTUFBOEIsSUFBSztFQUNoRSxPQUFPQyxrQkFBa0IsQ0FBQ0QsTUFBTSxFQUFFSixTQUFTLENBQUNRLFdBQVcsQ0FBQztBQUN6RCxDQUFDO0FBRUQsT0FBTyxNQUFNQyxjQUFjLEdBQUlMLE1BQThCLElBQUs7RUFDakUsT0FBT0Msa0JBQWtCLENBQUNELE1BQU0sRUFBRUosU0FBUyxDQUFDVSxZQUFZLENBQUM7QUFDMUQsQ0FBQztBQUVELE9BQU8sTUFBTUMsMEJBQTBCLEdBQUlQLE1BQThCLElBQUs7RUFDN0UsT0FBT1EsK0JBQStCLENBQUNSLE1BQU0sRUFBRUosU0FBUyxDQUFDTSxhQUFhLENBQUM7QUFDeEUsQ0FBQztBQUVELE1BQU1PLFlBQVksR0FBR0EsQ0FBQ0MsS0FBMEMsRUFBRUMsR0FBVyxLQUM1RUEsR0FBRyxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUNELEtBQUssSUFBSSxDQUFDLENBQUVBLEtBQUssQ0FBV0UsRUFBRSxJQUFJLENBQUMsQ0FBRUYsS0FBSyxDQUFXRyxLQUFLO0FBRXBGLE1BQU1aLGtCQUFrQixHQUFHQSxDQUFDRCxNQUE4QixFQUFFYyxJQUFZLEtBQUs7RUFDNUUsT0FBT25CLENBQUMsQ0FBQ29CLE1BQU0sQ0FDZHBCLENBQUMsQ0FBQ3FCLE1BQU0sQ0FBQ25CLGFBQWEsQ0FBQ0csTUFBTSxDQUFDLEVBQUUsQ0FBQ1UsS0FBSyxFQUFFQyxHQUFHLEtBQUssQ0FBQ0YsWUFBWSxDQUFDQyxLQUFLLEVBQUVDLEdBQUcsQ0FBQyxJQUFJLENBQUNoQixDQUFDLENBQUNzQixRQUFRLENBQUNQLEtBQUssQ0FBQ0csS0FBSyxFQUFFQyxJQUFJLENBQUMsQ0FDNUcsQ0FBQztBQUNGLENBQUM7QUFFRCxNQUFNTiwrQkFBK0IsR0FBR0EsQ0FBQ1IsTUFBOEIsRUFBRWMsSUFBWSxLQUFLO0VBQ3pGLE9BQU9uQixDQUFDLENBQUNvQixNQUFNLENBQ2RwQixDQUFDLENBQUNxQixNQUFNLENBQ1BuQixhQUFhLENBQUNHLE1BQU0sQ0FBQyxFQUNyQixDQUFDVSxLQUFLLEVBQUVDLEdBQUcsS0FBSyxDQUFDRixZQUFZLENBQUNDLEtBQUssRUFBRUMsR0FBRyxDQUFDLElBQUloQixDQUFDLENBQUN1QixLQUFLLENBQUNSLEtBQUssQ0FBQ0csS0FBSyxFQUFFTSxDQUFDLElBQUlBLENBQUMsS0FBS0wsSUFBSSxDQUNsRixDQUNELENBQUM7QUFDRixDQUFDO0FBRUQsT0FBTyxNQUFNTSxzQkFBc0IsR0FBSUMsVUFBMkIsSUFBSztFQUN0RSxPQUFPQSxVQUFVLENBQUNDLE1BQU0sQ0FBQ0MsU0FBUyxJQUFJLENBQUNBLFNBQVMsQ0FBQ1YsS0FBSyxDQUFDVyxJQUFJLENBQUNMLENBQUMsSUFBSXJCLFVBQVUsQ0FBQ3FCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakYsQ0FBQztBQUVELE9BQU8sTUFBTU0sc0JBQXNCLEdBQUlKLFVBQTJCLElBQUs7RUFDdEUsT0FBT0EsVUFBVSxDQUFDQyxNQUFNLENBQUNDLFNBQVMsSUFBSUEsU0FBUyxDQUFDVixLQUFLLENBQUNXLElBQUksQ0FBQ0wsQ0FBQyxJQUFJckIsVUFBVSxDQUFDcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRixDQUFDIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
buildDateMac: cookies[lockDownBrowser_1.LOCKDOWN_BROWSER_KEY.BUILD_DATE_MAC],
|
|
13
|
-
buildDateIpad: cookies[lockDownBrowser_1.LOCKDOWN_BROWSER_KEY.BUILD_DATE_IPAD]
|
|
14
|
-
};
|
|
1
|
+
import { LOCKDOWN_BROWSER_KEY, LOCKDOWN_BROWSER_TRUE } from '../constants/lockDownBrowser';
|
|
2
|
+
import { getCookies } from './cookies';
|
|
3
|
+
export const getLockDownBrowserInfo = () => {
|
|
4
|
+
const cookies = getCookies();
|
|
5
|
+
return {
|
|
6
|
+
isClientLockDownBrowser: cookies[LOCKDOWN_BROWSER_KEY.CLIENT_IS_LOCK_DOWN_BROWSER] === LOCKDOWN_BROWSER_TRUE,
|
|
7
|
+
buildId: cookies[LOCKDOWN_BROWSER_KEY.BUILD_ID],
|
|
8
|
+
buildDateWindows: cookies[LOCKDOWN_BROWSER_KEY.BUILD_DATE_WINDOWS],
|
|
9
|
+
buildDateMac: cookies[LOCKDOWN_BROWSER_KEY.BUILD_DATE_MAC],
|
|
10
|
+
buildDateIpad: cookies[LOCKDOWN_BROWSER_KEY.BUILD_DATE_IPAD]
|
|
11
|
+
};
|
|
15
12
|
};
|
|
16
|
-
|
|
13
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMT0NLRE9XTl9CUk9XU0VSX0tFWSIsIkxPQ0tET1dOX0JST1dTRVJfVFJVRSIsImdldENvb2tpZXMiLCJnZXRMb2NrRG93bkJyb3dzZXJJbmZvIiwiY29va2llcyIsImlzQ2xpZW50TG9ja0Rvd25Ccm93c2VyIiwiQ0xJRU5UX0lTX0xPQ0tfRE9XTl9CUk9XU0VSIiwiYnVpbGRJZCIsIkJVSUxEX0lEIiwiYnVpbGREYXRlV2luZG93cyIsIkJVSUxEX0RBVEVfV0lORE9XUyIsImJ1aWxkRGF0ZU1hYyIsIkJVSUxEX0RBVEVfTUFDIiwiYnVpbGREYXRlSXBhZCIsIkJVSUxEX0RBVEVfSVBBRCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9sb2NrRG93bkJyb3dzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTE9DS0RPV05fQlJPV1NFUl9LRVksIExPQ0tET1dOX0JST1dTRVJfVFJVRSB9IGZyb20gJy4uL2NvbnN0YW50cy9sb2NrRG93bkJyb3dzZXInXG5pbXBvcnQgeyBnZXRDb29raWVzIH0gZnJvbSAnLi9jb29raWVzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIExvY2tEb3duQnJvd3NlckluZm8ge1xuXHRpc0NsaWVudExvY2tEb3duQnJvd3NlcjogYm9vbGVhblxuXHRidWlsZElkPzogc3RyaW5nXG5cdGJ1aWxkRGF0ZVdpbmRvd3M/OiBzdHJpbmdcblx0YnVpbGREYXRlTWFjPzogc3RyaW5nXG5cdGJ1aWxkRGF0ZUlwYWQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvY2tEb3duQnJvd3NlckluZm8gPSAoKTogTG9ja0Rvd25Ccm93c2VySW5mbyA9PiB7XG5cdGNvbnN0IGNvb2tpZXMgPSBnZXRDb29raWVzKClcblx0cmV0dXJuIHtcblx0XHRpc0NsaWVudExvY2tEb3duQnJvd3NlcjogY29va2llc1tMT0NLRE9XTl9CUk9XU0VSX0tFWS5DTElFTlRfSVNfTE9DS19ET1dOX0JST1dTRVJdID09PSBMT0NLRE9XTl9CUk9XU0VSX1RSVUUsXG5cdFx0YnVpbGRJZDogY29va2llc1tMT0NLRE9XTl9CUk9XU0VSX0tFWS5CVUlMRF9JRF0sXG5cdFx0YnVpbGREYXRlV2luZG93czogY29va2llc1tMT0NLRE9XTl9CUk9XU0VSX0tFWS5CVUlMRF9EQVRFX1dJTkRPV1NdLFxuXHRcdGJ1aWxkRGF0ZU1hYzogY29va2llc1tMT0NLRE9XTl9CUk9XU0VSX0tFWS5CVUlMRF9EQVRFX01BQ10sXG5cdFx0YnVpbGREYXRlSXBhZDogY29va2llc1tMT0NLRE9XTl9CUk9XU0VSX0tFWS5CVUlMRF9EQVRFX0lQQURdXG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0Esb0JBQW9CLEVBQUVDLHFCQUFxQixRQUFRLDhCQUE4QjtBQUMxRixTQUFTQyxVQUFVLFFBQVEsV0FBVztBQVV0QyxPQUFPLE1BQU1DLHNCQUFzQixHQUFHQSxDQUFBLEtBQTJCO0VBQ2hFLE1BQU1DLE9BQU8sR0FBR0YsVUFBVSxDQUFDLENBQUM7RUFDNUIsT0FBTztJQUNORyx1QkFBdUIsRUFBRUQsT0FBTyxDQUFDSixvQkFBb0IsQ0FBQ00sMkJBQTJCLENBQUMsS0FBS0wscUJBQXFCO0lBQzVHTSxPQUFPLEVBQUVILE9BQU8sQ0FBQ0osb0JBQW9CLENBQUNRLFFBQVEsQ0FBQztJQUMvQ0MsZ0JBQWdCLEVBQUVMLE9BQU8sQ0FBQ0osb0JBQW9CLENBQUNVLGtCQUFrQixDQUFDO0lBQ2xFQyxZQUFZLEVBQUVQLE9BQU8sQ0FBQ0osb0JBQW9CLENBQUNZLGNBQWMsQ0FBQztJQUMxREMsYUFBYSxFQUFFVCxPQUFPLENBQUNKLG9CQUFvQixDQUFDYyxlQUFlO0VBQzVELENBQUM7QUFDRixDQUFDIiwiaWdub3JlTGlzdCI6W119
|
package/lib/utils/logger.js
CHANGED
|
@@ -1,35 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.dummyLogger = void 0;
|
|
4
|
-
exports.createLogger = createLogger;
|
|
5
|
-
exports.setLogger = setLogger;
|
|
6
|
-
exports.getLogger = getLogger;
|
|
7
|
-
const configuration_1 = require("../constants/configuration");
|
|
1
|
+
import { getAppConfig } from '../constants/configuration';
|
|
8
2
|
let logger;
|
|
9
3
|
const falseLog = () => {
|
|
10
|
-
|
|
4
|
+
return;
|
|
11
5
|
};
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
6
|
+
export const dummyLogger = {
|
|
7
|
+
debug: falseLog,
|
|
8
|
+
info: falseLog,
|
|
9
|
+
warn: falseLog,
|
|
10
|
+
error: falseLog
|
|
17
11
|
};
|
|
18
|
-
function createLogger() {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
12
|
+
export function createLogger() {
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
14
|
+
if (getAppConfig().NODE_ENV === 'production' || !window.console || !console) {
|
|
15
|
+
return dummyLogger;
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
debug: console.debug,
|
|
19
|
+
info: console.info,
|
|
20
|
+
warn: console.warn,
|
|
21
|
+
error: console.error
|
|
22
|
+
};
|
|
29
23
|
}
|
|
30
|
-
function setLogger(value) {
|
|
31
|
-
|
|
24
|
+
export function setLogger(value) {
|
|
25
|
+
logger = value;
|
|
32
26
|
}
|
|
33
|
-
function getLogger() {
|
|
34
|
-
|
|
27
|
+
export function getLogger() {
|
|
28
|
+
return logger;
|
|
35
29
|
}
|
|
30
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRBcHBDb25maWciLCJsb2dnZXIiLCJmYWxzZUxvZyIsImR1bW15TG9nZ2VyIiwiZGVidWciLCJpbmZvIiwid2FybiIsImVycm9yIiwiY3JlYXRlTG9nZ2VyIiwiTk9ERV9FTlYiLCJ3aW5kb3ciLCJjb25zb2xlIiwic2V0TG9nZ2VyIiwidmFsdWUiLCJnZXRMb2dnZXIiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvbG9nZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEFwcENvbmZpZyB9IGZyb20gJy4uL2NvbnN0YW50cy9jb25maWd1cmF0aW9uJ1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlciB7XG5cdGRlYnVnOiAobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB2b2lkXG5cdGluZm86IChtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pID0+IHZvaWRcblx0d2FybjogKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT4gdm9pZFxuXHRlcnJvcjogKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT4gdm9pZFxufVxuXG5sZXQgbG9nZ2VyOiBMb2dnZXJcblxuY29uc3QgZmFsc2VMb2cgPSAoKSA9PiB7XG5cdHJldHVyblxufVxuXG5leHBvcnQgY29uc3QgZHVtbXlMb2dnZXI6IExvZ2dlciA9IHtcblx0ZGVidWc6IGZhbHNlTG9nLFxuXHRpbmZvOiBmYWxzZUxvZyxcblx0d2FybjogZmFsc2VMb2csXG5cdGVycm9yOiBmYWxzZUxvZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTG9nZ2VyKCk6IExvZ2dlciB7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG5cdGlmIChnZXRBcHBDb25maWcoKS5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nIHx8ICF3aW5kb3cuY29uc29sZSB8fCAhY29uc29sZSkge1xuXHRcdHJldHVybiBkdW1teUxvZ2dlclxuXHR9XG5cdHJldHVybiB7XG5cdFx0ZGVidWc6IGNvbnNvbGUuZGVidWcsXG5cdFx0aW5mbzogY29uc29sZS5pbmZvLFxuXHRcdHdhcm46IGNvbnNvbGUud2Fybixcblx0XHRlcnJvcjogY29uc29sZS5lcnJvclxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb2dnZXIodmFsdWU6IExvZ2dlcikge1xuXHRsb2dnZXIgPSB2YWx1ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9nZ2VyKCkge1xuXHRyZXR1cm4gbG9nZ2VyXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFlBQVksUUFBUSw0QkFBNEI7QUFTekQsSUFBSUMsTUFBYztBQUVsQixNQUFNQyxRQUFRLEdBQUdBLENBQUEsS0FBTTtFQUN0QjtBQUNELENBQUM7QUFFRCxPQUFPLE1BQU1DLFdBQW1CLEdBQUc7RUFDbENDLEtBQUssRUFBRUYsUUFBUTtFQUNmRyxJQUFJLEVBQUVILFFBQVE7RUFDZEksSUFBSSxFQUFFSixRQUFRO0VBQ2RLLEtBQUssRUFBRUw7QUFDUixDQUFDO0FBRUQsT0FBTyxTQUFTTSxZQUFZQSxDQUFBLEVBQVc7RUFDdEM7RUFDQSxJQUFJUixZQUFZLENBQUMsQ0FBQyxDQUFDUyxRQUFRLEtBQUssWUFBWSxJQUFJLENBQUNDLE1BQU0sQ0FBQ0MsT0FBTyxJQUFJLENBQUNBLE9BQU8sRUFBRTtJQUM1RSxPQUFPUixXQUFXO0VBQ25CO0VBQ0EsT0FBTztJQUNOQyxLQUFLLEVBQUVPLE9BQU8sQ0FBQ1AsS0FBSztJQUNwQkMsSUFBSSxFQUFFTSxPQUFPLENBQUNOLElBQUk7SUFDbEJDLElBQUksRUFBRUssT0FBTyxDQUFDTCxJQUFJO0lBQ2xCQyxLQUFLLEVBQUVJLE9BQU8sQ0FBQ0o7RUFDaEIsQ0FBQztBQUNGO0FBRUEsT0FBTyxTQUFTSyxTQUFTQSxDQUFDQyxLQUFhLEVBQUU7RUFDeENaLE1BQU0sR0FBR1ksS0FBSztBQUNmO0FBRUEsT0FBTyxTQUFTQyxTQUFTQSxDQUFBLEVBQUc7RUFDM0IsT0FBT2IsTUFBTTtBQUNkIiwiaWdub3JlTGlzdCI6W119
|
package/lib/utils/lti.js
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isBasicLaunch = exports.isInsideIFrame = void 0;
|
|
4
1
|
// Check if we are inside an iframe
|
|
5
|
-
const isInsideIFrame = () => window !== window.parent;
|
|
6
|
-
|
|
2
|
+
export const isInsideIFrame = () => window !== window.parent;
|
|
3
|
+
|
|
7
4
|
// Check whether this is a regular launch or a Deep Link launch
|
|
8
|
-
const isBasicLaunch =
|
|
9
|
-
|
|
5
|
+
export const isBasicLaunch = ltiLaunch => !ltiLaunch.deepLinkingReturnUrl;
|
|
6
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0luc2lkZUlGcmFtZSIsIndpbmRvdyIsInBhcmVudCIsImlzQmFzaWNMYXVuY2giLCJsdGlMYXVuY2giLCJkZWVwTGlua2luZ1JldHVyblVybCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9sdGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTHRpTGF1bmNoIH0gZnJvbSAnLi4vdHlwZXMnXG5cbi8vIENoZWNrIGlmIHdlIGFyZSBpbnNpZGUgYW4gaWZyYW1lXG5leHBvcnQgY29uc3QgaXNJbnNpZGVJRnJhbWUgPSAoKSA9PiB3aW5kb3cgIT09IHdpbmRvdy5wYXJlbnRcblxuLy8gQ2hlY2sgd2hldGhlciB0aGlzIGlzIGEgcmVndWxhciBsYXVuY2ggb3IgYSBEZWVwIExpbmsgbGF1bmNoXG5leHBvcnQgY29uc3QgaXNCYXNpY0xhdW5jaCA9IChsdGlMYXVuY2g6IEx0aUxhdW5jaCkgPT4gIWx0aUxhdW5jaC5kZWVwTGlua2luZ1JldHVyblVybFxuIl0sIm1hcHBpbmdzIjoiQUFFQTtBQUNBLE9BQU8sTUFBTUEsY0FBYyxHQUFHQSxDQUFBLEtBQU1DLE1BQU0sS0FBS0EsTUFBTSxDQUFDQyxNQUFNOztBQUU1RDtBQUNBLE9BQU8sTUFBTUMsYUFBYSxHQUFJQyxTQUFvQixJQUFLLENBQUNBLFNBQVMsQ0FBQ0Msb0JBQW9CIiwiaWdub3JlTGlzdCI6W119
|
package/lib/utils/model.js
CHANGED
|
@@ -1,51 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const getModelArray = (model, guid) => Object.keys(model)
|
|
8
|
-
.filter(key => key !== '_metadata' && key !== guid && !!model[key])
|
|
9
|
-
.map(key => model[key]);
|
|
10
|
-
exports.getModelArray = getModelArray;
|
|
11
|
-
const getModelMinusRelations = (model) => Object.keys(model)
|
|
12
|
-
.filter(key => key !== 'guid' && !(0, lodash_1.isPlainObject)(model[key]) && !(0, lodash_1.isArray)(model[key]))
|
|
13
|
-
.reduce((retval, key) => {
|
|
14
|
-
retval[key] = model[key];
|
|
15
|
-
return retval;
|
|
1
|
+
import { isArray, isPlainObject } from 'lodash';
|
|
2
|
+
import { MODEL_STATUS } from '../constants/modelStatus';
|
|
3
|
+
export const getModelArray = (model, guid) => Object.keys(model).filter(key => key !== '_metadata' && key !== guid && !!model[key]).map(key => model[key]);
|
|
4
|
+
export const getModelMinusRelations = model => Object.keys(model).filter(key => key !== 'guid' && !isPlainObject(model[key]) && !isArray(model[key])).reduce((retval, key) => {
|
|
5
|
+
retval[key] = model[key];
|
|
6
|
+
return retval;
|
|
16
7
|
}, {});
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
return {
|
|
31
|
-
isFinished,
|
|
32
|
-
isSuccess,
|
|
33
|
-
error
|
|
34
|
-
};
|
|
8
|
+
export const getModelFetchResult = (model, nextModel) => {
|
|
9
|
+
// from (no model, empty model, fetching model) to (fetched model), e.g. GET
|
|
10
|
+
const didFetch = (!model || !model._metadata || model._metadata.isFetching) && !!nextModel && !!nextModel._metadata && !nextModel._metadata.isFetching;
|
|
11
|
+
// from (fetching model) to (no model), e.g. DELETED
|
|
12
|
+
const didDelete = !!model && !!model._metadata && model._metadata.isFetching && !nextModel;
|
|
13
|
+
const isFinished = didFetch || didDelete;
|
|
14
|
+
const isSuccess = isFinished && (didDelete || !!nextModel && !!nextModel._metadata && !nextModel._metadata.hasError);
|
|
15
|
+
const error = isFinished && !didDelete && !!nextModel && !!nextModel._metadata && nextModel._metadata.lastFetchErrorData || undefined;
|
|
16
|
+
return {
|
|
17
|
+
isFinished,
|
|
18
|
+
isSuccess,
|
|
19
|
+
error
|
|
20
|
+
};
|
|
35
21
|
};
|
|
36
|
-
|
|
22
|
+
|
|
37
23
|
/**
|
|
38
24
|
* When the model has finished fetching, call `changeModelStatus`.
|
|
39
25
|
* If `fetchingId` is provided, `model` and `prevModel` are assumed to be `ModelCollection`,
|
|
40
26
|
* and the model found at `fetchingId` is used.
|
|
41
27
|
*/
|
|
42
|
-
function handleModelFetchFinish(model, prevModel, fetchingId, changeModelStatus) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
changeModelStatus(!modelFetchResult.isSuccess ? modelStatus_1.MODEL_STATUS.ERROR : modelStatus_1.MODEL_STATUS.READY, undefined);
|
|
50
|
-
}
|
|
28
|
+
export function handleModelFetchFinish(model, prevModel, fetchingId, changeModelStatus) {
|
|
29
|
+
const fetchingModel = fetchingId ? model[fetchingId] : model;
|
|
30
|
+
const prevFetchingModel = fetchingId ? prevModel[fetchingId] : prevModel;
|
|
31
|
+
const modelFetchResult = getModelFetchResult(prevFetchingModel, fetchingModel);
|
|
32
|
+
if (modelFetchResult.isFinished) {
|
|
33
|
+
changeModelStatus(!modelFetchResult.isSuccess ? MODEL_STATUS.ERROR : MODEL_STATUS.READY, undefined);
|
|
34
|
+
}
|
|
51
35
|
}
|
|
36
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0FycmF5IiwiaXNQbGFpbk9iamVjdCIsIk1PREVMX1NUQVRVUyIsImdldE1vZGVsQXJyYXkiLCJtb2RlbCIsImd1aWQiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwia2V5IiwibWFwIiwiZ2V0TW9kZWxNaW51c1JlbGF0aW9ucyIsInJlZHVjZSIsInJldHZhbCIsImdldE1vZGVsRmV0Y2hSZXN1bHQiLCJuZXh0TW9kZWwiLCJkaWRGZXRjaCIsIl9tZXRhZGF0YSIsImlzRmV0Y2hpbmciLCJkaWREZWxldGUiLCJpc0ZpbmlzaGVkIiwiaXNTdWNjZXNzIiwiaGFzRXJyb3IiLCJlcnJvciIsImxhc3RGZXRjaEVycm9yRGF0YSIsInVuZGVmaW5lZCIsImhhbmRsZU1vZGVsRmV0Y2hGaW5pc2giLCJwcmV2TW9kZWwiLCJmZXRjaGluZ0lkIiwiY2hhbmdlTW9kZWxTdGF0dXMiLCJmZXRjaGluZ01vZGVsIiwicHJldkZldGNoaW5nTW9kZWwiLCJtb2RlbEZldGNoUmVzdWx0IiwiRVJST1IiLCJSRUFEWSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IHsgTU9ERUxfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzL21vZGVsU3RhdHVzJ1xuaW1wb3J0IHsgTW9kZWwsIE1vZGVsQ29sbGVjdGlvbiB9IGZyb20gJy4uL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgZ2V0TW9kZWxBcnJheSA9IDxUIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBNb2RlbENvbGxlY3Rpb248VD4sIGd1aWQ/OiBzdHJpbmcpOiBUW10gPT5cblx0T2JqZWN0LmtleXMobW9kZWwpXG5cdFx0LmZpbHRlcihrZXkgPT4ga2V5ICE9PSAnX21ldGFkYXRhJyAmJiBrZXkgIT09IGd1aWQgJiYgISFtb2RlbFtrZXldKVxuXHRcdC5tYXAoa2V5ID0+IG1vZGVsW2tleV0pIGFzIFRbXVxuXG5leHBvcnQgY29uc3QgZ2V0TW9kZWxNaW51c1JlbGF0aW9ucyA9IDxUIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBUKSA9PlxuXHQoT2JqZWN0LmtleXMobW9kZWwpIGFzIEFycmF5PGtleW9mIFQ+KVxuXHRcdC5maWx0ZXIoa2V5ID0+IGtleSAhPT0gJ2d1aWQnICYmICFpc1BsYWluT2JqZWN0KG1vZGVsW2tleV0pICYmICFpc0FycmF5KG1vZGVsW2tleV0pKVxuXHRcdC5yZWR1Y2UoKHJldHZhbDogUGFydGlhbDxUPiwga2V5KSA9PiB7XG5cdFx0XHRyZXR2YWxba2V5XSA9IG1vZGVsW2tleV1cblx0XHRcdHJldHVybiByZXR2YWxcblx0XHR9LCB7fSlcblxuZXhwb3J0IGNvbnN0IGdldE1vZGVsRmV0Y2hSZXN1bHQgPSA8VCBleHRlbmRzIE1vZGVsPihtb2RlbD86IFQsIG5leHRNb2RlbD86IFQpID0+IHtcblx0Ly8gZnJvbSAobm8gbW9kZWwsIGVtcHR5IG1vZGVsLCBmZXRjaGluZyBtb2RlbCkgdG8gKGZldGNoZWQgbW9kZWwpLCBlLmcuIEdFVFxuXHRjb25zdCBkaWRGZXRjaCA9XG5cdFx0KCFtb2RlbCB8fCAhbW9kZWwuX21ldGFkYXRhIHx8IG1vZGVsLl9tZXRhZGF0YS5pc0ZldGNoaW5nKSAmJlxuXHRcdCEhbmV4dE1vZGVsICYmXG5cdFx0ISFuZXh0TW9kZWwuX21ldGFkYXRhICYmXG5cdFx0IW5leHRNb2RlbC5fbWV0YWRhdGEuaXNGZXRjaGluZ1xuXHQvLyBmcm9tIChmZXRjaGluZyBtb2RlbCkgdG8gKG5vIG1vZGVsKSwgZS5nLiBERUxFVEVEXG5cdGNvbnN0IGRpZERlbGV0ZSA9ICEhbW9kZWwgJiYgISFtb2RlbC5fbWV0YWRhdGEgJiYgbW9kZWwuX21ldGFkYXRhLmlzRmV0Y2hpbmcgJiYgIW5leHRNb2RlbFxuXHRjb25zdCBpc0ZpbmlzaGVkID0gZGlkRmV0Y2ggfHwgZGlkRGVsZXRlXG5cdGNvbnN0IGlzU3VjY2VzcyA9XG5cdFx0aXNGaW5pc2hlZCAmJiAoZGlkRGVsZXRlIHx8ICghIW5leHRNb2RlbCAmJiAhIW5leHRNb2RlbC5fbWV0YWRhdGEgJiYgIW5leHRNb2RlbC5fbWV0YWRhdGEuaGFzRXJyb3IpKVxuXHRjb25zdCBlcnJvciA9XG5cdFx0KGlzRmluaXNoZWQgJiYgIWRpZERlbGV0ZSAmJiAhIW5leHRNb2RlbCAmJiAhIW5leHRNb2RlbC5fbWV0YWRhdGEgJiYgbmV4dE1vZGVsLl9tZXRhZGF0YS5sYXN0RmV0Y2hFcnJvckRhdGEpIHx8XG5cdFx0dW5kZWZpbmVkXG5cblx0cmV0dXJuIHtcblx0XHRpc0ZpbmlzaGVkLFxuXHRcdGlzU3VjY2Vzcyxcblx0XHRlcnJvclxuXHR9XG59XG5cbi8qKlxuICogV2hlbiB0aGUgbW9kZWwgaGFzIGZpbmlzaGVkIGZldGNoaW5nLCBjYWxsIGBjaGFuZ2VNb2RlbFN0YXR1c2AuXG4gKiBJZiBgZmV0Y2hpbmdJZGAgaXMgcHJvdmlkZWQsIGBtb2RlbGAgYW5kIGBwcmV2TW9kZWxgIGFyZSBhc3N1bWVkIHRvIGJlIGBNb2RlbENvbGxlY3Rpb25gLFxuICogYW5kIHRoZSBtb2RlbCBmb3VuZCBhdCBgZmV0Y2hpbmdJZGAgaXMgdXNlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZU1vZGVsRmV0Y2hGaW5pc2g8VE1vZGVsIGV4dGVuZHMgTW9kZWw+KFxuXHRtb2RlbDogVE1vZGVsIHwgTW9kZWxDb2xsZWN0aW9uPFRNb2RlbD4gfCB1bmRlZmluZWQsXG5cdHByZXZNb2RlbDogVE1vZGVsIHwgTW9kZWxDb2xsZWN0aW9uPFRNb2RlbD4gfCB1bmRlZmluZWQsXG5cdGZldGNoaW5nSWQ6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCxcblx0Y2hhbmdlTW9kZWxTdGF0dXM6IChtb2RlbFN0YXR1czogTU9ERUxfU1RBVFVTLCBmZXRjaGluZ0lkPzogc3RyaW5nKSA9PiB2b2lkXG4pIHtcblx0Y29uc3QgZmV0Y2hpbmdNb2RlbCA9IGZldGNoaW5nSWQgPyAoKG1vZGVsIGFzIE1vZGVsQ29sbGVjdGlvbjxUTW9kZWw+KVtmZXRjaGluZ0lkXSBhcyBUTW9kZWwgfCB1bmRlZmluZWQpIDogbW9kZWxcblx0Y29uc3QgcHJldkZldGNoaW5nTW9kZWwgPSBmZXRjaGluZ0lkXG5cdFx0PyAoKHByZXZNb2RlbCBhcyBNb2RlbENvbGxlY3Rpb248VE1vZGVsPilbZmV0Y2hpbmdJZF0gYXMgVE1vZGVsIHwgdW5kZWZpbmVkKVxuXHRcdDogcHJldk1vZGVsXG5cdGNvbnN0IG1vZGVsRmV0Y2hSZXN1bHQgPSBnZXRNb2RlbEZldGNoUmVzdWx0KHByZXZGZXRjaGluZ01vZGVsLCBmZXRjaGluZ01vZGVsKVxuXHRpZiAobW9kZWxGZXRjaFJlc3VsdC5pc0ZpbmlzaGVkKSB7XG5cdFx0Y2hhbmdlTW9kZWxTdGF0dXMoIW1vZGVsRmV0Y2hSZXN1bHQuaXNTdWNjZXNzID8gTU9ERUxfU1RBVFVTLkVSUk9SIDogTU9ERUxfU1RBVFVTLlJFQURZLCB1bmRlZmluZWQpXG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsT0FBTyxFQUFFQyxhQUFhLFFBQVEsUUFBUTtBQUMvQyxTQUFTQyxZQUFZLFFBQVEsMEJBQTBCO0FBR3ZELE9BQU8sTUFBTUMsYUFBYSxHQUFHQSxDQUFrQkMsS0FBeUIsRUFBRUMsSUFBYSxLQUN0RkMsTUFBTSxDQUFDQyxJQUFJLENBQUNILEtBQUssQ0FBQyxDQUNoQkksTUFBTSxDQUFDQyxHQUFHLElBQUlBLEdBQUcsS0FBSyxXQUFXLElBQUlBLEdBQUcsS0FBS0osSUFBSSxJQUFJLENBQUMsQ0FBQ0QsS0FBSyxDQUFDSyxHQUFHLENBQUMsQ0FBQyxDQUNsRUMsR0FBRyxDQUFDRCxHQUFHLElBQUlMLEtBQUssQ0FBQ0ssR0FBRyxDQUFDLENBQVE7QUFFaEMsT0FBTyxNQUFNRSxzQkFBc0IsR0FBcUJQLEtBQVEsSUFDOURFLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDSCxLQUFLLENBQUMsQ0FDakJJLE1BQU0sQ0FBQ0MsR0FBRyxJQUFJQSxHQUFHLEtBQUssTUFBTSxJQUFJLENBQUNSLGFBQWEsQ0FBQ0csS0FBSyxDQUFDSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUNULE9BQU8sQ0FBQ0ksS0FBSyxDQUFDSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQ25GRyxNQUFNLENBQUMsQ0FBQ0MsTUFBa0IsRUFBRUosR0FBRyxLQUFLO0VBQ3BDSSxNQUFNLENBQUNKLEdBQUcsQ0FBQyxHQUFHTCxLQUFLLENBQUNLLEdBQUcsQ0FBQztFQUN4QixPQUFPSSxNQUFNO0FBQ2QsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRVIsT0FBTyxNQUFNQyxtQkFBbUIsR0FBR0EsQ0FBa0JWLEtBQVMsRUFBRVcsU0FBYSxLQUFLO0VBQ2pGO0VBQ0EsTUFBTUMsUUFBUSxHQUNiLENBQUMsQ0FBQ1osS0FBSyxJQUFJLENBQUNBLEtBQUssQ0FBQ2EsU0FBUyxJQUFJYixLQUFLLENBQUNhLFNBQVMsQ0FBQ0MsVUFBVSxLQUN6RCxDQUFDLENBQUNILFNBQVMsSUFDWCxDQUFDLENBQUNBLFNBQVMsQ0FBQ0UsU0FBUyxJQUNyQixDQUFDRixTQUFTLENBQUNFLFNBQVMsQ0FBQ0MsVUFBVTtFQUNoQztFQUNBLE1BQU1DLFNBQVMsR0FBRyxDQUFDLENBQUNmLEtBQUssSUFBSSxDQUFDLENBQUNBLEtBQUssQ0FBQ2EsU0FBUyxJQUFJYixLQUFLLENBQUNhLFNBQVMsQ0FBQ0MsVUFBVSxJQUFJLENBQUNILFNBQVM7RUFDMUYsTUFBTUssVUFBVSxHQUFHSixRQUFRLElBQUlHLFNBQVM7RUFDeEMsTUFBTUUsU0FBUyxHQUNkRCxVQUFVLEtBQUtELFNBQVMsSUFBSyxDQUFDLENBQUNKLFNBQVMsSUFBSSxDQUFDLENBQUNBLFNBQVMsQ0FBQ0UsU0FBUyxJQUFJLENBQUNGLFNBQVMsQ0FBQ0UsU0FBUyxDQUFDSyxRQUFTLENBQUM7RUFDckcsTUFBTUMsS0FBSyxHQUNUSCxVQUFVLElBQUksQ0FBQ0QsU0FBUyxJQUFJLENBQUMsQ0FBQ0osU0FBUyxJQUFJLENBQUMsQ0FBQ0EsU0FBUyxDQUFDRSxTQUFTLElBQUlGLFNBQVMsQ0FBQ0UsU0FBUyxDQUFDTyxrQkFBa0IsSUFDM0dDLFNBQVM7RUFFVixPQUFPO0lBQ05MLFVBQVU7SUFDVkMsU0FBUztJQUNURTtFQUNELENBQUM7QUFDRixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNHLHNCQUFzQkEsQ0FDckN0QixLQUFtRCxFQUNuRHVCLFNBQXVELEVBQ3ZEQyxVQUF1QyxFQUN2Q0MsaUJBQTJFLEVBQzFFO0VBQ0QsTUFBTUMsYUFBYSxHQUFHRixVQUFVLEdBQUt4QixLQUFLLENBQTZCd0IsVUFBVSxDQUFDLEdBQTBCeEIsS0FBSztFQUNqSCxNQUFNMkIsaUJBQWlCLEdBQUdILFVBQVUsR0FDL0JELFNBQVMsQ0FBNkJDLFVBQVUsQ0FBQyxHQUNuREQsU0FBUztFQUNaLE1BQU1LLGdCQUFnQixHQUFHbEIsbUJBQW1CLENBQUNpQixpQkFBaUIsRUFBRUQsYUFBYSxDQUFDO0VBQzlFLElBQUlFLGdCQUFnQixDQUFDWixVQUFVLEVBQUU7SUFDaENTLGlCQUFpQixDQUFDLENBQUNHLGdCQUFnQixDQUFDWCxTQUFTLEdBQUduQixZQUFZLENBQUMrQixLQUFLLEdBQUcvQixZQUFZLENBQUNnQyxLQUFLLEVBQUVULFNBQVMsQ0FBQztFQUNwRztBQUNEIiwiaWdub3JlTGlzdCI6W119
|
package/lib/utils/number.js
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.hasPrecisionAndScale = hasPrecisionAndScale;
|
|
4
|
-
exports.modulo = modulo;
|
|
5
1
|
/**
|
|
6
2
|
* Validates that the input is a number and that the number falls within
|
|
7
3
|
* the precision and scale constraints provided.
|
|
@@ -13,14 +9,14 @@ exports.modulo = modulo;
|
|
|
13
9
|
* @param scale - The number of digits allowed to the right of the decimal point in the value
|
|
14
10
|
* @returns A boolean indicating whether the number falls within the precision and scale constraints provided
|
|
15
11
|
*/
|
|
16
|
-
function hasPrecisionAndScale(decimalString, precision, scale) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
(parts.length > 1 ? new RegExp(`^\\d{1,${scale}}$`).exec(parts[1]) : true));
|
|
12
|
+
export function hasPrecisionAndScale(decimalString, precision, scale) {
|
|
13
|
+
if (isNaN(Number(decimalString)) || isNaN(precision) || isNaN(scale) || precision <= 0 || scale < 0) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
const parts = decimalString.split('.');
|
|
17
|
+
return !!(new RegExp(precision === scale ? '^0$' : `^-?\\d{1,${precision - scale}}$`).exec(parts[0]) && (parts.length > 1 ? new RegExp(`^\\d{1,${scale}}$`).exec(parts[1]) : true));
|
|
23
18
|
}
|
|
24
|
-
function modulo(n, m) {
|
|
25
|
-
|
|
19
|
+
export function modulo(n, m) {
|
|
20
|
+
return (n % m + m) % m;
|
|
26
21
|
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJoYXNQcmVjaXNpb25BbmRTY2FsZSIsImRlY2ltYWxTdHJpbmciLCJwcmVjaXNpb24iLCJzY2FsZSIsImlzTmFOIiwiTnVtYmVyIiwicGFydHMiLCJzcGxpdCIsIlJlZ0V4cCIsImV4ZWMiLCJsZW5ndGgiLCJtb2R1bG8iLCJuIiwibSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9udW1iZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBWYWxpZGF0ZXMgdGhhdCB0aGUgaW5wdXQgaXMgYSBudW1iZXIgYW5kIHRoYXQgdGhlIG51bWJlciBmYWxscyB3aXRoaW5cbiAqIHRoZSBwcmVjaXNpb24gYW5kIHNjYWxlIGNvbnN0cmFpbnRzIHByb3ZpZGVkLlxuICogaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvc3FsL3Qtc3FsL2RhdGEtdHlwZXMvcHJlY2lzaW9uLXNjYWxlLWFuZC1sZW5ndGgtdHJhbnNhY3Qtc3FsP3ZpZXc9c3FsLXNlcnZlci0yMDE3XG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIGRlY2ltYWxTdHJpbmcgLSBUaGUgbnVtYmVyIHRvIHZhbGlkYXRlLiBNdXN0IGJlIHBhc3NlZCBhcyBhIHN0cmluZyAoaS5lLiBmcm9tIGEgd2ViIGZvcm0pXG4gKiBAcGFyYW0gcHJlY2lzaW9uIC0gVGhlIG51bWJlciBvZiBkaWdpdHMgYWxsb3dlZCBpbiB0aGUgdmFsdWVcbiAqIEBwYXJhbSBzY2FsZSAtIFRoZSBudW1iZXIgb2YgZGlnaXRzIGFsbG93ZWQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBkZWNpbWFsIHBvaW50IGluIHRoZSB2YWx1ZVxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbnVtYmVyIGZhbGxzIHdpdGhpbiB0aGUgcHJlY2lzaW9uIGFuZCBzY2FsZSBjb25zdHJhaW50cyBwcm92aWRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzUHJlY2lzaW9uQW5kU2NhbGUoZGVjaW1hbFN0cmluZzogc3RyaW5nLCBwcmVjaXNpb246IG51bWJlciwgc2NhbGU6IG51bWJlcikge1xuXHRpZiAoaXNOYU4oTnVtYmVyKGRlY2ltYWxTdHJpbmcpKSB8fCBpc05hTihwcmVjaXNpb24pIHx8IGlzTmFOKHNjYWxlKSB8fCBwcmVjaXNpb24gPD0gMCB8fCBzY2FsZSA8IDApIHtcblx0XHRyZXR1cm4gZmFsc2Vcblx0fVxuXHRjb25zdCBwYXJ0cyA9IGRlY2ltYWxTdHJpbmcuc3BsaXQoJy4nKVxuXHRyZXR1cm4gISEoXG5cdFx0bmV3IFJlZ0V4cChwcmVjaXNpb24gPT09IHNjYWxlID8gJ14wJCcgOiBgXi0/XFxcXGR7MSwke3ByZWNpc2lvbiAtIHNjYWxlfX0kYCkuZXhlYyhwYXJ0c1swXSkgJiZcblx0XHQocGFydHMubGVuZ3RoID4gMSA/IG5ldyBSZWdFeHAoYF5cXFxcZHsxLCR7c2NhbGV9fSRgKS5leGVjKHBhcnRzWzFdKSA6IHRydWUpXG5cdClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vZHVsbyhuOiBudW1iZXIsIG06IG51bWJlcikge1xuXHRyZXR1cm4gKChuICUgbSkgKyBtKSAlIG1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0Esb0JBQW9CQSxDQUFDQyxhQUFxQixFQUFFQyxTQUFpQixFQUFFQyxLQUFhLEVBQUU7RUFDN0YsSUFBSUMsS0FBSyxDQUFDQyxNQUFNLENBQUNKLGFBQWEsQ0FBQyxDQUFDLElBQUlHLEtBQUssQ0FBQ0YsU0FBUyxDQUFDLElBQUlFLEtBQUssQ0FBQ0QsS0FBSyxDQUFDLElBQUlELFNBQVMsSUFBSSxDQUFDLElBQUlDLEtBQUssR0FBRyxDQUFDLEVBQUU7SUFDcEcsT0FBTyxLQUFLO0VBQ2I7RUFDQSxNQUFNRyxLQUFLLEdBQUdMLGFBQWEsQ0FBQ00sS0FBSyxDQUFDLEdBQUcsQ0FBQztFQUN0QyxPQUFPLENBQUMsRUFDUCxJQUFJQyxNQUFNLENBQUNOLFNBQVMsS0FBS0MsS0FBSyxHQUFHLEtBQUssR0FBRyxZQUFZRCxTQUFTLEdBQUdDLEtBQUssSUFBSSxDQUFDLENBQUNNLElBQUksQ0FBQ0gsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQ3pGQSxLQUFLLENBQUNJLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSUYsTUFBTSxDQUFDLFVBQVVMLEtBQUssSUFBSSxDQUFDLENBQUNNLElBQUksQ0FBQ0gsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQzFFO0FBQ0Y7QUFFQSxPQUFPLFNBQVNLLE1BQU1BLENBQUNDLENBQVMsRUFBRUMsQ0FBUyxFQUFFO0VBQzVDLE9BQU8sQ0FBRUQsQ0FBQyxHQUFHQyxDQUFDLEdBQUlBLENBQUMsSUFBSUEsQ0FBQztBQUN6QiIsImlnbm9yZUxpc3QiOltdfQ==
|
package/lib/utils/promise.js
CHANGED
|
@@ -1,29 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
export class CancelledError extends Error {
|
|
3
|
+
constructor() {
|
|
4
|
+
super('Promise was cancelled');
|
|
5
|
+
_defineProperty(this, "isCancelled", void 0);
|
|
6
|
+
this.name = 'CancelledError';
|
|
7
|
+
this.isCancelled = true;
|
|
8
|
+
}
|
|
10
9
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
return !!error && error instanceof CancelledError && error.isCancelled;
|
|
10
|
+
export const isErrorCancelled = error => {
|
|
11
|
+
return !!error && error instanceof CancelledError && error.isCancelled;
|
|
14
12
|
};
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return response;
|
|
13
|
+
export const cancellablePromise = promise => {
|
|
14
|
+
let isCancelled = false;
|
|
15
|
+
const wrappedPromise = new Promise((resolve, reject) => {
|
|
16
|
+
promise.then(val => isCancelled ? reject(new CancelledError()) : resolve(val), error => isCancelled ? reject(new CancelledError()) : reject(error));
|
|
17
|
+
});
|
|
18
|
+
const response = {
|
|
19
|
+
promise: wrappedPromise,
|
|
20
|
+
cancel() {
|
|
21
|
+
isCancelled = true;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
return response;
|
|
28
25
|
};
|
|
29
|
-
|
|
26
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDYW5jZWxsZWRFcnJvciIsIkVycm9yIiwiY29uc3RydWN0b3IiLCJfZGVmaW5lUHJvcGVydHkiLCJuYW1lIiwiaXNDYW5jZWxsZWQiLCJpc0Vycm9yQ2FuY2VsbGVkIiwiZXJyb3IiLCJjYW5jZWxsYWJsZVByb21pc2UiLCJwcm9taXNlIiwid3JhcHBlZFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInRoZW4iLCJ2YWwiLCJyZXNwb25zZSIsImNhbmNlbCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9wcm9taXNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQ2FuY2VsbGFibGVQcm9taXNlPFQ+IHtcblx0cHJvbWlzZTogUHJvbWlzZTxUPlxuXHRjYW5jZWwoKTogdm9pZFxufVxuXG5leHBvcnQgY2xhc3MgQ2FuY2VsbGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdHB1YmxpYyBpc0NhbmNlbGxlZDogYm9vbGVhblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcignUHJvbWlzZSB3YXMgY2FuY2VsbGVkJylcblx0XHR0aGlzLm5hbWUgPSAnQ2FuY2VsbGVkRXJyb3InXG5cdFx0dGhpcy5pc0NhbmNlbGxlZCA9IHRydWVcblx0fVxufVxuXG5leHBvcnQgY29uc3QgaXNFcnJvckNhbmNlbGxlZCA9IChlcnJvcjogdW5rbm93bikgPT4ge1xuXHRyZXR1cm4gISFlcnJvciAmJiBlcnJvciBpbnN0YW5jZW9mIENhbmNlbGxlZEVycm9yICYmIGVycm9yLmlzQ2FuY2VsbGVkXG59XG5cbmV4cG9ydCBjb25zdCBjYW5jZWxsYWJsZVByb21pc2UgPSA8VD4ocHJvbWlzZTogUHJvbWlzZTxUPikgPT4ge1xuXHRsZXQgaXNDYW5jZWxsZWQgPSBmYWxzZVxuXG5cdGNvbnN0IHdyYXBwZWRQcm9taXNlID0gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdHByb21pc2UudGhlbihcblx0XHRcdHZhbCA9PiAoaXNDYW5jZWxsZWQgPyByZWplY3QobmV3IENhbmNlbGxlZEVycm9yKCkpIDogcmVzb2x2ZSh2YWwpKSxcblx0XHRcdChlcnJvcjogdW5rbm93bikgPT4gKGlzQ2FuY2VsbGVkID8gcmVqZWN0KG5ldyBDYW5jZWxsZWRFcnJvcigpKSA6IHJlamVjdChlcnJvciBhcyBFcnJvcikpXG5cdFx0KVxuXHR9KVxuXG5cdGNvbnN0IHJlc3BvbnNlOiBDYW5jZWxsYWJsZVByb21pc2U8VD4gPSB7XG5cdFx0cHJvbWlzZTogd3JhcHBlZFByb21pc2UsXG5cdFx0Y2FuY2VsKCkge1xuXHRcdFx0aXNDYW5jZWxsZWQgPSB0cnVlXG5cdFx0fVxuXHR9XG5cdHJldHVybiByZXNwb25zZVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBS0EsT0FBTyxNQUFNQSxjQUFjLFNBQVNDLEtBQUssQ0FBQztFQUV6Q0MsV0FBV0EsQ0FBQSxFQUFHO0lBQ2IsS0FBSyxDQUFDLHVCQUF1QixDQUFDO0lBQUFDLGVBQUE7SUFDOUIsSUFBSSxDQUFDQyxJQUFJLEdBQUcsZ0JBQWdCO0lBQzVCLElBQUksQ0FBQ0MsV0FBVyxHQUFHLElBQUk7RUFDeEI7QUFDRDtBQUVBLE9BQU8sTUFBTUMsZ0JBQWdCLEdBQUlDLEtBQWMsSUFBSztFQUNuRCxPQUFPLENBQUMsQ0FBQ0EsS0FBSyxJQUFJQSxLQUFLLFlBQVlQLGNBQWMsSUFBSU8sS0FBSyxDQUFDRixXQUFXO0FBQ3ZFLENBQUM7QUFFRCxPQUFPLE1BQU1HLGtCQUFrQixHQUFPQyxPQUFtQixJQUFLO0VBQzdELElBQUlKLFdBQVcsR0FBRyxLQUFLO0VBRXZCLE1BQU1LLGNBQWMsR0FBRyxJQUFJQyxPQUFPLENBQUksQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7SUFDMURKLE9BQU8sQ0FBQ0ssSUFBSSxDQUNYQyxHQUFHLElBQUtWLFdBQVcsR0FBR1EsTUFBTSxDQUFDLElBQUliLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBR1ksT0FBTyxDQUFDRyxHQUFHLENBQUUsRUFDakVSLEtBQWMsSUFBTUYsV0FBVyxHQUFHUSxNQUFNLENBQUMsSUFBSWIsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHYSxNQUFNLENBQUNOLEtBQWMsQ0FDeEYsQ0FBQztFQUNGLENBQUMsQ0FBQztFQUVGLE1BQU1TLFFBQStCLEdBQUc7SUFDdkNQLE9BQU8sRUFBRUMsY0FBYztJQUN2Qk8sTUFBTUEsQ0FBQSxFQUFHO01BQ1JaLFdBQVcsR0FBRyxJQUFJO0lBQ25CO0VBQ0QsQ0FBQztFQUNELE9BQU9XLFFBQVE7QUFDaEIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
package/lib/utils/quill.js
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
const noStoreSaga_1 = require("../redux/sagas/noStoreSaga");
|
|
9
|
-
const fetch_1 = require("./fetch");
|
|
10
|
-
const Delta = quill_1.default.import('delta');
|
|
1
|
+
import Quill from 'quill';
|
|
2
|
+
import { v5 as uuidv5 } from 'uuid';
|
|
3
|
+
import { dispatchModelFetchRequest } from '../redux/actionCreator';
|
|
4
|
+
import { noStoreHooks } from '../redux/sagas/noStoreSaga';
|
|
5
|
+
import { isFetchErrorData } from './fetch';
|
|
6
|
+
const Delta = Quill.import('delta');
|
|
7
|
+
|
|
11
8
|
/**
|
|
12
9
|
* Check for non-public in the provided quill contents. Update the ImageValue of an op if an image is found to be
|
|
13
10
|
* non-public.
|
|
@@ -15,56 +12,54 @@ const Delta = quill_1.default.import('delta');
|
|
|
15
12
|
* @param checkedImages A list of all images we have already processed in previous calls to this function.
|
|
16
13
|
* list of processed images
|
|
17
14
|
*/
|
|
18
|
-
const checkForNonPublicImages = (quill, checkedImages) => {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
const ops = contents.map((o) => {
|
|
51
|
-
var _a;
|
|
52
|
-
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
|
|
53
|
-
? Object.assign(Object.assign({}, o), { insert: Object.assign(Object.assign({}, o.insert), { image: Object.assign(Object.assign({}, o.insert.image), { nonPublic: true }) }) }) : o;
|
|
54
|
-
});
|
|
55
|
-
const updatedContents = contents.diff(new Delta(ops));
|
|
56
|
-
quill.updateContents(updatedContents);
|
|
15
|
+
export const checkForNonPublicImages = (quill, checkedImages) => {
|
|
16
|
+
quill.getContents().ops // Is the op an image and have we not seen it before?
|
|
17
|
+
?.filter(op => op.insert.image && !checkedImages.find(image => image.src === op.insert.image.src) && op.insert.image.src.startsWith('http')).forEach(op => {
|
|
18
|
+
// Check if the image is public. Do not check data:image urls
|
|
19
|
+
// Use the backend to check if the image is public
|
|
20
|
+
// Due to CSP and other security measures, we can't check this in the frontend
|
|
21
|
+
|
|
22
|
+
// uuidv5 is a deterministic uuid generator based on a namespace and a name
|
|
23
|
+
// uuidv5.URL is the namespace for urls
|
|
24
|
+
const hookId = uuidv5(op.insert.image.src, uuidv5.URL);
|
|
25
|
+
noStoreHooks.registerNoStoreActionHook(hookId, data => {
|
|
26
|
+
noStoreHooks.unregisterNoStoreActionHook(hookId);
|
|
27
|
+
let contentTypeKey;
|
|
28
|
+
/**
|
|
29
|
+
* API fetches the URL, and `noStoreSaga` returns either the result or error
|
|
30
|
+
* * `data` is `null` when the API could not fetch the URL with a successful status code, and returns `null` => `nonPublic`
|
|
31
|
+
* * `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
|
|
32
|
+
* * `data` is a dictionary of headers when the API does fetch the URL
|
|
33
|
+
* * if there is no `Content-Type` header, we don't know if the image is public => do not update
|
|
34
|
+
* * if there is a `Content-Type` header, but is NOT an image type (i.e. it was a 302 that, when followed returned HTML)
|
|
35
|
+
* (I'm looking at you, Brightspace) => `nonPublic`
|
|
36
|
+
* * if there is a `Content-Type` header, and it is an image type, then the image is public => do not update
|
|
37
|
+
*/
|
|
38
|
+
if (!data || !isFetchErrorData(data) && (contentTypeKey = Object.keys(data).find(k => k.toLowerCase() === 'content-type')) && !data[contentTypeKey][0].startsWith('image')) {
|
|
39
|
+
const contents = quill.getContents();
|
|
40
|
+
const ops = contents.map(o => o.insert.image?.src && op.insert.image.src && o.insert.image.src === op.insert.image.src ? {
|
|
41
|
+
...o,
|
|
42
|
+
insert: {
|
|
43
|
+
...o.insert,
|
|
44
|
+
image: {
|
|
45
|
+
...o.insert.image,
|
|
46
|
+
nonPublic: true
|
|
57
47
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
48
|
+
}
|
|
49
|
+
} : o);
|
|
50
|
+
const updatedContents = contents.diff(new Delta(ops));
|
|
51
|
+
quill.updateContents(updatedContents);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
// This endpoint returns headers for a url. If the url is nonexistent, it will return null
|
|
55
|
+
dispatchModelFetchRequest({
|
|
56
|
+
modelName: 'urlChecker',
|
|
57
|
+
guid: hookId,
|
|
58
|
+
noStore: true,
|
|
59
|
+
queryParams: {
|
|
60
|
+
url: op.insert.image.src
|
|
61
|
+
}
|
|
68
62
|
});
|
|
63
|
+
});
|
|
69
64
|
};
|
|
70
|
-
|
|
65
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJRdWlsbCIsInY1IiwidXVpZHY1IiwiZGlzcGF0Y2hNb2RlbEZldGNoUmVxdWVzdCIsIm5vU3RvcmVIb29rcyIsImlzRmV0Y2hFcnJvckRhdGEiLCJEZWx0YSIsImltcG9ydCIsImNoZWNrRm9yTm9uUHVibGljSW1hZ2VzIiwicXVpbGwiLCJjaGVja2VkSW1hZ2VzIiwiZ2V0Q29udGVudHMiLCJvcHMiLCJmaWx0ZXIiLCJvcCIsImluc2VydCIsImltYWdlIiwiZmluZCIsInNyYyIsInN0YXJ0c1dpdGgiLCJmb3JFYWNoIiwiaG9va0lkIiwiVVJMIiwicmVnaXN0ZXJOb1N0b3JlQWN0aW9uSG9vayIsImRhdGEiLCJ1bnJlZ2lzdGVyTm9TdG9yZUFjdGlvbkhvb2siLCJjb250ZW50VHlwZUtleSIsIk9iamVjdCIsImtleXMiLCJrIiwidG9Mb3dlckNhc2UiLCJjb250ZW50cyIsIm1hcCIsIm8iLCJub25QdWJsaWMiLCJ1cGRhdGVkQ29udGVudHMiLCJkaWZmIiwidXBkYXRlQ29udGVudHMiLCJtb2RlbE5hbWUiLCJndWlkIiwibm9TdG9yZSIsInF1ZXJ5UGFyYW1zIiwidXJsIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3F1aWxsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBRdWlsbCwgeyBEZWx0YU9wZXJhdGlvbiB9IGZyb20gJ3F1aWxsJ1xuaW1wb3J0IHsgdjUgYXMgdXVpZHY1IH0gZnJvbSAndXVpZCdcbmltcG9ydCB7IEltYWdlVmFsdWUgfSBmcm9tICcuLi9jb21wb25lbnRzL1F1aWxsL0Zvcm1hdHMvSW1hZ2UnXG5pbXBvcnQgeyBkaXNwYXRjaE1vZGVsRmV0Y2hSZXF1ZXN0IH0gZnJvbSAnLi4vcmVkdXgvYWN0aW9uQ3JlYXRvcidcbmltcG9ydCB7IG5vU3RvcmVIb29rcyB9IGZyb20gJy4uL3JlZHV4L3NhZ2FzL25vU3RvcmVTYWdhJ1xuaW1wb3J0IHsgRmV0Y2hFcnJvckRhdGEgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IGlzRmV0Y2hFcnJvckRhdGEgfSBmcm9tICcuL2ZldGNoJ1xuXG5jb25zdCBEZWx0YSA9IFF1aWxsLmltcG9ydCgnZGVsdGEnKVxuXG4vKipcbiAqIENoZWNrIGZvciBub24tcHVibGljIGluIHRoZSBwcm92aWRlZCBxdWlsbCBjb250ZW50cy4gVXBkYXRlIHRoZSBJbWFnZVZhbHVlIG9mIGFuIG9wIGlmIGFuIGltYWdlIGlzIGZvdW5kIHRvIGJlXG4gKiBub24tcHVibGljLlxuICogQHBhcmFtIHF1aWxsIFRoZSBRdWlsbCBpbnN0YW5jZVxuICogQHBhcmFtIGNoZWNrZWRJbWFnZXMgQSBsaXN0IG9mIGFsbCBpbWFnZXMgd2UgaGF2ZSBhbHJlYWR5IHByb2Nlc3NlZCBpbiBwcmV2aW91cyBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLlxuICogbGlzdCBvZiBwcm9jZXNzZWQgaW1hZ2VzXG4gKi9cbmV4cG9ydCBjb25zdCBjaGVja0Zvck5vblB1YmxpY0ltYWdlcyA9IChxdWlsbDogUXVpbGwsIGNoZWNrZWRJbWFnZXM6IEltYWdlVmFsdWVbXSkgPT4ge1xuXHRxdWlsbFxuXHRcdC5nZXRDb250ZW50cygpXG5cdFx0Lm9wcyAvLyBJcyB0aGUgb3AgYW4gaW1hZ2UgYW5kIGhhdmUgd2Ugbm90IHNlZW4gaXQgYmVmb3JlP1xuXHRcdD8uZmlsdGVyKFxuXHRcdFx0b3AgPT5cblx0XHRcdFx0b3AuaW5zZXJ0LmltYWdlICYmXG5cdFx0XHRcdCFjaGVja2VkSW1hZ2VzLmZpbmQoaW1hZ2UgPT4gaW1hZ2Uuc3JjID09PSBvcC5pbnNlcnQuaW1hZ2Uuc3JjKSAmJlxuXHRcdFx0XHRvcC5pbnNlcnQuaW1hZ2Uuc3JjLnN0YXJ0c1dpdGgoJ2h0dHAnKVxuXHRcdClcblx0XHQuZm9yRWFjaChvcCA9PiB7XG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgaW1hZ2UgaXMgcHVibGljLiBEbyBub3QgY2hlY2sgZGF0YTppbWFnZSB1cmxzXG5cdFx0XHQvLyBVc2UgdGhlIGJhY2tlbmQgdG8gY2hlY2sgaWYgdGhlIGltYWdlIGlzIHB1YmxpY1xuXHRcdFx0Ly8gRHVlIHRvIENTUCBhbmQgb3RoZXIgc2VjdXJpdHkgbWVhc3VyZXMsIHdlIGNhbid0IGNoZWNrIHRoaXMgaW4gdGhlIGZyb250ZW5kXG5cblx0XHRcdC8vIHV1aWR2NSBpcyBhIGRldGVybWluaXN0aWMgdXVpZCBnZW5lcmF0b3IgYmFzZWQgb24gYSBuYW1lc3BhY2UgYW5kIGEgbmFtZVxuXHRcdFx0Ly8gdXVpZHY1LlVSTCBpcyB0aGUgbmFtZXNwYWNlIGZvciB1cmxzXG5cdFx0XHRjb25zdCBob29rSWQgPSB1dWlkdjUob3AuaW5zZXJ0LmltYWdlLnNyYywgdXVpZHY1LlVSTClcblx0XHRcdG5vU3RvcmVIb29rcy5yZWdpc3Rlck5vU3RvcmVBY3Rpb25Ib29rKGhvb2tJZCwgKGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiB8IEZldGNoRXJyb3JEYXRhIHwgbnVsbCkgPT4ge1xuXHRcdFx0XHRub1N0b3JlSG9va3MudW5yZWdpc3Rlck5vU3RvcmVBY3Rpb25Ib29rKGhvb2tJZClcblx0XHRcdFx0bGV0IGNvbnRlbnRUeXBlS2V5OiBzdHJpbmcgfCB1bmRlZmluZWRcblx0XHRcdFx0LyoqXG5cdFx0XHRcdCAqIEFQSSBmZXRjaGVzIHRoZSBVUkwsIGFuZCBgbm9TdG9yZVNhZ2FgIHJldHVybnMgZWl0aGVyIHRoZSByZXN1bHQgb3IgZXJyb3Jcblx0XHRcdFx0ICogKiBgZGF0YWAgaXMgYG51bGxgIHdoZW4gdGhlIEFQSSBjb3VsZCBub3QgZmV0Y2ggdGhlIFVSTCB3aXRoIGEgc3VjY2Vzc2Z1bCBzdGF0dXMgY29kZSwgYW5kIHJldHVybnMgYG51bGxgID0+IGBub25QdWJsaWNgXG5cdFx0XHRcdCAqICogYGRhdGFgIGlzIGBGZXRjaEVycm9yRGF0YWAgaWYgdGhlIEFQSSByZXF1ZXN0IGl0c2VsZiBmYWlsZWQsIGUuZy4gZnJvbSBzb21lIHVua25vd24gZXJyb3IsIHdlIGRvbid0IGtub3cgaWYgdGhlIGltYWdlIGlzIHB1YmxpYyA9PiBkbyBub3QgdXBkYXRlXG5cdFx0XHRcdCAqICogYGRhdGFgIGlzIGEgZGljdGlvbmFyeSBvZiBoZWFkZXJzIHdoZW4gdGhlIEFQSSBkb2VzIGZldGNoIHRoZSBVUkxcblx0XHRcdFx0ICogICAqIGlmIHRoZXJlIGlzIG5vIGBDb250ZW50LVR5cGVgIGhlYWRlciwgd2UgZG9uJ3Qga25vdyBpZiB0aGUgaW1hZ2UgaXMgcHVibGljID0+IGRvIG5vdCB1cGRhdGVcblx0XHRcdFx0ICogICAqIGlmIHRoZXJlIGlzIGEgYENvbnRlbnQtVHlwZWAgaGVhZGVyLCBidXQgaXMgTk9UIGFuIGltYWdlIHR5cGUgKGkuZS4gaXQgd2FzIGEgMzAyIHRoYXQsIHdoZW4gZm9sbG93ZWQgcmV0dXJuZWQgSFRNTClcblx0XHRcdFx0ICogICAgIChJJ20gbG9va2luZyBhdCB5b3UsIEJyaWdodHNwYWNlKSA9PiBgbm9uUHVibGljYFxuXHRcdFx0XHQgKiAgICogaWYgdGhlcmUgaXMgYSBgQ29udGVudC1UeXBlYCBoZWFkZXIsIGFuZCBpdCBpcyBhbiBpbWFnZSB0eXBlLCB0aGVuIHRoZSBpbWFnZSBpcyBwdWJsaWMgPT4gZG8gbm90IHVwZGF0ZVxuXHRcdFx0XHQgKi9cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCFkYXRhIHx8XG5cdFx0XHRcdFx0KCFpc0ZldGNoRXJyb3JEYXRhKGRhdGEpICYmXG5cdFx0XHRcdFx0XHQoY29udGVudFR5cGVLZXkgPSBPYmplY3Qua2V5cyhkYXRhKS5maW5kKGsgPT4gay50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC10eXBlJykpICYmXG5cdFx0XHRcdFx0XHQhZGF0YVtjb250ZW50VHlwZUtleV1bMF0uc3RhcnRzV2l0aCgnaW1hZ2UnKSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Y29uc3QgY29udGVudHMgPSBxdWlsbC5nZXRDb250ZW50cygpXG5cdFx0XHRcdFx0Y29uc3Qgb3BzID0gY29udGVudHMubWFwKChvOiBEZWx0YU9wZXJhdGlvbikgPT5cblx0XHRcdFx0XHRcdG8uaW5zZXJ0LmltYWdlPy5zcmMgJiYgb3AuaW5zZXJ0LmltYWdlLnNyYyAmJiBvLmluc2VydC5pbWFnZS5zcmMgPT09IG9wLmluc2VydC5pbWFnZS5zcmNcblx0XHRcdFx0XHRcdFx0PyB7XG5cdFx0XHRcdFx0XHRcdFx0XHQuLi5vLFxuXHRcdFx0XHRcdFx0XHRcdFx0aW5zZXJ0OiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC4uLm8uaW5zZXJ0LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpbWFnZTogeyAuLi5vLmluc2VydC5pbWFnZSwgbm9uUHVibGljOiB0cnVlIH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdDogb1xuXHRcdFx0XHRcdClcblx0XHRcdFx0XHRjb25zdCB1cGRhdGVkQ29udGVudHMgPSBjb250ZW50cy5kaWZmKG5ldyBEZWx0YShvcHMpKVxuXHRcdFx0XHRcdHF1aWxsLnVwZGF0ZUNvbnRlbnRzKHVwZGF0ZWRDb250ZW50cylcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC8vIFRoaXMgZW5kcG9pbnQgcmV0dXJucyBoZWFkZXJzIGZvciBhIHVybC4gSWYgdGhlIHVybCBpcyBub25leGlzdGVudCwgaXQgd2lsbCByZXR1cm4gbnVsbFxuXHRcdFx0ZGlzcGF0Y2hNb2RlbEZldGNoUmVxdWVzdCh7XG5cdFx0XHRcdG1vZGVsTmFtZTogJ3VybENoZWNrZXInLFxuXHRcdFx0XHRndWlkOiBob29rSWQsXG5cdFx0XHRcdG5vU3RvcmU6IHRydWUsXG5cdFx0XHRcdHF1ZXJ5UGFyYW1zOiB7XG5cdFx0XHRcdFx0dXJsOiBvcC5pbnNlcnQuaW1hZ2Uuc3JjXG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0fSlcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsS0FBSyxNQUEwQixPQUFPO0FBQzdDLFNBQVNDLEVBQUUsSUFBSUMsTUFBTSxRQUFRLE1BQU07QUFFbkMsU0FBU0MseUJBQXlCLFFBQVEsd0JBQXdCO0FBQ2xFLFNBQVNDLFlBQVksUUFBUSw0QkFBNEI7QUFFekQsU0FBU0MsZ0JBQWdCLFFBQVEsU0FBUztBQUUxQyxNQUFNQyxLQUFLLEdBQUdOLEtBQUssQ0FBQ08sTUFBTSxDQUFDLE9BQU8sQ0FBQzs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU1DLHVCQUF1QixHQUFHQSxDQUFDQyxLQUFZLEVBQUVDLGFBQTJCLEtBQUs7RUFDckZELEtBQUssQ0FDSEUsV0FBVyxDQUFDLENBQUMsQ0FDYkMsR0FBRyxDQUFDO0VBQUEsRUFDSEMsTUFBTSxDQUNQQyxFQUFFLElBQ0RBLEVBQUUsQ0FBQ0MsTUFBTSxDQUFDQyxLQUFLLElBQ2YsQ0FBQ04sYUFBYSxDQUFDTyxJQUFJLENBQUNELEtBQUssSUFBSUEsS0FBSyxDQUFDRSxHQUFHLEtBQUtKLEVBQUUsQ0FBQ0MsTUFBTSxDQUFDQyxLQUFLLENBQUNFLEdBQUcsQ0FBQyxJQUMvREosRUFBRSxDQUFDQyxNQUFNLENBQUNDLEtBQUssQ0FBQ0UsR0FBRyxDQUFDQyxVQUFVLENBQUMsTUFBTSxDQUN2QyxDQUFDLENBQ0FDLE9BQU8sQ0FBQ04sRUFBRSxJQUFJO0lBQ2Q7SUFDQTtJQUNBOztJQUVBO0lBQ0E7SUFDQSxNQUFNTyxNQUFNLEdBQUduQixNQUFNLENBQUNZLEVBQUUsQ0FBQ0MsTUFBTSxDQUFDQyxLQUFLLENBQUNFLEdBQUcsRUFBRWhCLE1BQU0sQ0FBQ29CLEdBQUcsQ0FBQztJQUN0RGxCLFlBQVksQ0FBQ21CLHlCQUF5QixDQUFDRixNQUFNLEVBQUdHLElBQXNELElBQUs7TUFDMUdwQixZQUFZLENBQUNxQiwyQkFBMkIsQ0FBQ0osTUFBTSxDQUFDO01BQ2hELElBQUlLLGNBQWtDO01BQ3RDO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO01BQ0ksSUFDQyxDQUFDRixJQUFJLElBQ0osQ0FBQ25CLGdCQUFnQixDQUFDbUIsSUFBSSxDQUFDLEtBQ3RCRSxjQUFjLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDSixJQUFJLENBQUMsQ0FBQ1AsSUFBSSxDQUFDWSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsV0FBVyxDQUFDLENBQUMsS0FBSyxjQUFjLENBQUMsQ0FBQyxJQUNsRixDQUFDTixJQUFJLENBQUNFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDUCxVQUFVLENBQUMsT0FBTyxDQUFFLEVBQzdDO1FBQ0QsTUFBTVksUUFBUSxHQUFHdEIsS0FBSyxDQUFDRSxXQUFXLENBQUMsQ0FBQztRQUNwQyxNQUFNQyxHQUFHLEdBQUdtQixRQUFRLENBQUNDLEdBQUcsQ0FBRUMsQ0FBaUIsSUFDMUNBLENBQUMsQ0FBQ2xCLE1BQU0sQ0FBQ0MsS0FBSyxFQUFFRSxHQUFHLElBQUlKLEVBQUUsQ0FBQ0MsTUFBTSxDQUFDQyxLQUFLLENBQUNFLEdBQUcsSUFBSWUsQ0FBQyxDQUFDbEIsTUFBTSxDQUFDQyxLQUFLLENBQUNFLEdBQUcsS0FBS0osRUFBRSxDQUFDQyxNQUFNLENBQUNDLEtBQUssQ0FBQ0UsR0FBRyxHQUNyRjtVQUNBLEdBQUdlLENBQUM7VUFDSmxCLE1BQU0sRUFBRTtZQUNQLEdBQUdrQixDQUFDLENBQUNsQixNQUFNO1lBQ1hDLEtBQUssRUFBRTtjQUFFLEdBQUdpQixDQUFDLENBQUNsQixNQUFNLENBQUNDLEtBQUs7Y0FBRWtCLFNBQVMsRUFBRTtZQUFLO1VBQzdDO1FBQ0QsQ0FBQyxHQUNBRCxDQUNKLENBQUM7UUFDRCxNQUFNRSxlQUFlLEdBQUdKLFFBQVEsQ0FBQ0ssSUFBSSxDQUFDLElBQUk5QixLQUFLLENBQUNNLEdBQUcsQ0FBQyxDQUFDO1FBQ3JESCxLQUFLLENBQUM0QixjQUFjLENBQUNGLGVBQWUsQ0FBQztNQUN0QztJQUNELENBQUMsQ0FBQztJQUNGO0lBQ0FoQyx5QkFBeUIsQ0FBQztNQUN6Qm1DLFNBQVMsRUFBRSxZQUFZO01BQ3ZCQyxJQUFJLEVBQUVsQixNQUFNO01BQ1ptQixPQUFPLEVBQUUsSUFBSTtNQUNiQyxXQUFXLEVBQUU7UUFDWkMsR0FBRyxFQUFFNUIsRUFBRSxDQUFDQyxNQUFNLENBQUNDLEtBQUssQ0FBQ0U7TUFDdEI7SUFDRCxDQUFDLENBQUM7RUFDSCxDQUFDLENBQUM7QUFDSixDQUFDIiwiaWdub3JlTGlzdCI6W119
|