studiokit-scaffolding-js 7.0.14-alpha.1 → 7.1.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.d.ts +2 -2
- package/lib/components/ActionList.js +166 -87
- package/lib/components/AlertDialog.d.ts +3 -3
- package/lib/components/AlertDialog.js +133 -18
- package/lib/components/AlertWithIcon.js +93 -52
- package/lib/components/ConnectedModal.d.ts +1 -2
- package/lib/components/ConnectedModal.js +41 -35
- package/lib/components/Dropdowns/GroupsDropdown.d.ts +4 -4
- package/lib/components/Dropdowns/GroupsDropdown.js +69 -82
- package/lib/components/Dropdowns/ManagedNavDropdown.d.ts +2 -2
- package/lib/components/Dropdowns/ManagedNavDropdown.js +96 -108
- package/lib/components/Dropdowns/UserDropdown.js +109 -70
- package/lib/components/Dropdowns/index.js +27 -11
- package/lib/components/EntityOwnerList.d.ts +3 -3
- package/lib/components/EntityOwnerList.js +52 -60
- package/lib/components/Error.js +107 -27
- package/lib/components/ErrorBoundary.js +133 -94
- package/lib/components/ErrorMessage.d.ts +2 -2
- package/lib/components/ErrorMessage.js +44 -14
- package/lib/components/Forms/DateField.d.ts +2 -2
- package/lib/components/Forms/DateField.js +63 -95
- package/lib/components/Forms/TimeField.d.ts +2 -2
- package/lib/components/Forms/TimeField.js +84 -108
- package/lib/components/Forms/index.js +27 -13
- package/lib/components/Groups/CreateEditCopySaveButtons.d.ts +2 -2
- package/lib/components/Groups/CreateEditCopySaveButtons.js +102 -14
- package/lib/components/Groups/ExternalGroups/Attach.d.ts +6 -7
- package/lib/components/Groups/ExternalGroups/Attach.js +213 -188
- package/lib/components/Groups/ExternalGroups/Table.js +183 -76
- package/lib/components/Groups/GroupCreateOrEditCommonProps.js +5 -1
- package/lib/components/Groups/RosterSyncInfo.js +140 -49
- package/lib/components/HOC/AccessibleAppComponent.d.ts +2 -2
- package/lib/components/HOC/AccessibleAppComponent.js +96 -119
- package/lib/components/HOC/ActivityRequiredComponent.d.ts +14 -14
- package/lib/components/HOC/ActivityRequiredComponent.js +72 -86
- package/lib/components/HOC/AsyncComponent.d.ts +9 -9
- package/lib/components/HOC/AsyncComponent.js +53 -129
- package/lib/components/HOC/AuthenticatedComponent.d.ts +4 -4
- package/lib/components/HOC/AuthenticatedComponent.js +59 -96
- package/lib/components/HOC/CollectionComponent.d.ts +12 -12
- package/lib/components/HOC/CollectionComponent.js +161 -161
- package/lib/components/HOC/CollectionFirstItemComponent.d.ts +13 -13
- package/lib/components/HOC/CollectionFirstItemComponent.js +49 -91
- package/lib/components/HOC/CollectionItemComponent.d.ts +9 -9
- package/lib/components/HOC/CollectionItemComponent.js +159 -158
- package/lib/components/HOC/ConnectedModalComponent.d.ts +9 -9
- package/lib/components/HOC/ConnectedModalComponent.js +96 -126
- package/lib/components/HOC/DataDependentComponent.d.ts +3 -55
- package/lib/components/HOC/DataDependentComponent.js +30 -79
- package/lib/components/HOC/EntityComponent.d.ts +13 -13
- package/lib/components/HOC/EntityComponent.js +63 -101
- package/lib/components/HOC/FullscreenModalComponent.d.ts +9 -9
- package/lib/components/HOC/FullscreenModalComponent.js +145 -165
- package/lib/components/HOC/GroupActivityRequiredComponent.d.ts +2 -2
- package/lib/components/HOC/GroupActivityRequiredComponent.js +32 -31
- package/lib/components/HOC/GuidComponent.d.ts +1 -1
- package/lib/components/HOC/GuidComponent.js +25 -64
- package/lib/components/HOC/ModelContextDependencyVerifyComponent.d.ts +28 -29
- package/lib/components/HOC/ModelContextDependencyVerifyComponent.js +36 -59
- package/lib/components/HOC/ModelErrorRedirectComponent.d.ts +10 -10
- package/lib/components/HOC/ModelErrorRedirectComponent.js +40 -83
- package/lib/components/HOC/SearchPersistorComponent.d.ts +4 -4
- package/lib/components/HOC/SearchPersistorComponent.js +243 -216
- package/lib/components/HOC/UnauthenticatedComponent.d.ts +12 -12
- package/lib/components/HOC/UnauthenticatedComponent.js +37 -82
- package/lib/components/HOC/UserComponent.d.ts +1 -1
- package/lib/components/HOC/UserComponent.js +12 -11
- package/lib/components/Icons/IconAlphaList.js +34 -20
- package/lib/components/Icons/IconExternalUser.js +34 -20
- package/lib/components/Icons/IconImpersonation.js +34 -20
- package/lib/components/Icons/IconStopImpersonating.js +34 -20
- package/lib/components/Icons/IconTable.js +35 -21
- package/lib/components/Icons/IconTableDeleteCol.js +34 -20
- package/lib/components/Icons/IconTableDeleteRow.js +34 -20
- package/lib/components/Icons/IconTableInsertCol.js +34 -20
- package/lib/components/Icons/IconTableInsertRow.js +34 -20
- package/lib/components/Impersonation/Button.d.ts +2 -2
- package/lib/components/Impersonation/Button.js +76 -56
- package/lib/components/Impersonation/Link.d.ts +2 -2
- package/lib/components/Impersonation/Link.js +76 -53
- package/lib/components/Impersonation/UserDetail.d.ts +2 -2
- package/lib/components/Impersonation/UserDetail.js +64 -15
- package/lib/components/Loading.js +27 -21
- package/lib/components/LockDownBrowser/Check.js +194 -107
- package/lib/components/LockDownBrowser/ExitButton.js +27 -14
- package/lib/components/LockDownBrowser/Launch.js +70 -85
- package/lib/components/Lti/Confirm.js +152 -33
- package/lib/components/Lti/CreateNonLtiGroupAlertDialog.d.ts +4 -2
- package/lib/components/Lti/CreateNonLtiGroupAlertDialog.js +170 -78
- package/lib/components/Lti/Launch.js +105 -49
- package/lib/components/Lti/LaunchGroup.js +85 -39
- package/lib/components/ManageTable.d.ts +1 -2
- package/lib/components/ManageTable.js +309 -104
- package/lib/components/ManageTableNoDataComponent.js +42 -22
- package/lib/components/NewVersionAlert.d.ts +2 -2
- package/lib/components/NewVersionAlert.js +82 -91
- package/lib/components/NotFound.js +87 -28
- package/lib/components/Notifications.d.ts +4 -4
- package/lib/components/Notifications.js +187 -169
- package/lib/components/PaginationNextButton.js +33 -21
- package/lib/components/PaginationPreviousButton.js +33 -21
- package/lib/components/Quill/CustomToolbar.d.ts +2 -2
- package/lib/components/Quill/CustomToolbar.js +432 -257
- package/lib/components/Quill/Formats/Image.d.ts +10 -25
- package/lib/components/Quill/Formats/Image.js +76 -82
- package/lib/components/Quill/Formats/List.d.ts +6 -3
- package/lib/components/Quill/Formats/List.js +50 -72
- package/lib/components/Quill/Formats/Video.d.ts +2 -1
- package/lib/components/Quill/Formats/Video.js +29 -43
- package/lib/components/Quill/ImageDropModule.d.ts +1 -1
- package/lib/components/Quill/ImageDropModule.js +142 -115
- package/lib/components/Quill/ImageWarning.d.ts +2 -2
- package/lib/components/Quill/ImageWarning.js +45 -32
- package/lib/components/Quill/ImageWithAltTextModal.d.ts +0 -1
- package/lib/components/Quill/ImageWithAltTextModal.js +425 -141
- package/lib/components/Quill/Specs/CustomImageSpec.d.ts +1 -1
- package/lib/components/Quill/Specs/CustomImageSpec.js +37 -45
- package/lib/components/Quill/Specs/CustomVideoSpec.d.ts +1 -1
- package/lib/components/Quill/Specs/CustomVideoSpec.js +27 -36
- package/lib/components/Quill/TableModule/Blots/BaseTableBlot.d.ts +2 -1
- package/lib/components/Quill/TableModule/Blots/BaseTableBlot.js +100 -116
- package/lib/components/Quill/TableModule/Blots/TableBlot.js +53 -66
- package/lib/components/Quill/TableModule/Blots/TableBodyBlot.js +54 -67
- package/lib/components/Quill/TableModule/Blots/TableCellBlot.d.ts +1 -1
- package/lib/components/Quill/TableModule/Blots/TableCellBlot.js +225 -241
- package/lib/components/Quill/TableModule/Blots/TableContainer.js +82 -99
- package/lib/components/Quill/TableModule/Blots/TableRowBlot.js +76 -87
- package/lib/components/Quill/TableModule/constants.js +45 -41
- package/lib/components/Quill/TableModule/index.css +25 -25
- package/lib/components/Quill/TableModule/index.d.ts +14 -5
- package/lib/components/Quill/TableModule/index.js +373 -313
- package/lib/components/Quill/TableModule/utils.js +45 -45
- package/lib/components/Quill/accessibilityFix.d.ts +0 -1
- package/lib/components/Quill/accessibilityFix.js +222 -238
- package/lib/components/Quill/index.js +36 -32
- package/lib/components/RefreshIndicator/Bordered.js +48 -32
- package/lib/components/RefreshIndicator/Inline.js +48 -33
- package/lib/components/RefreshIndicator/index.d.ts +2 -2
- package/lib/components/RefreshIndicator/index.js +263 -113
- package/lib/components/SearchControls.js +216 -31
- package/lib/components/SentryRoute.js +10 -23
- package/lib/components/Tables/RoleFilter.d.ts +3 -4
- package/lib/components/Tables/RoleFilter.js +71 -46
- package/lib/components/Tables/TextFilter.d.ts +2 -3
- package/lib/components/Tables/TextFilter.js +62 -20
- package/lib/components/UserRoles/Add.d.ts +3 -3
- package/lib/components/UserRoles/Add.js +199 -161
- package/lib/components/UserRoles/Context.js +8 -6
- package/lib/components/UserRoles/RoleCell.js +181 -100
- package/lib/components/UserRoles/Select.js +168 -54
- package/lib/components/UserRoles/Table.js +221 -102
- package/lib/components/UserRoles/index.d.ts +6 -6
- package/lib/components/UserRoles/index.js +535 -464
- package/lib/config/eslint/index.d.ts +2 -0
- package/lib/config/eslint/index.js +36 -0
- package/lib/config/eslint/lib/order.d.ts +3 -0
- package/lib/config/eslint/lib/order.js +30 -0
- package/lib/config/eslint/lib/prettier.d.ts +3 -0
- package/lib/config/eslint/lib/prettier.js +23 -0
- package/lib/config/eslint/lib/typescript.d.ts +2 -0
- package/lib/config/eslint/lib/typescript.js +98 -0
- package/lib/config/eslint/react.d.ts +2 -0
- package/lib/config/eslint/react.js +30 -0
- package/lib/constants/baseActivity.js +30 -26
- package/lib/constants/baseRole.js +14 -10
- package/lib/constants/configuration.d.ts +1 -1
- package/lib/constants/configuration.js +43 -39
- package/lib/constants/externalProviderType.js +10 -6
- package/lib/constants/fetchErrorData.js +15 -11
- package/lib/constants/index.js +137 -23
- package/lib/constants/lockDownBrowser.js +28 -24
- package/lib/constants/mockData.d.ts +4 -6
- package/lib/constants/mockData.js +383 -324
- package/lib/constants/modelStatus.js +15 -11
- package/lib/constants/notificationType.js +12 -8
- package/lib/constants/operatingSystem.js +12 -8
- package/lib/constants/shard.js +11 -7
- package/lib/constants/table.js +21 -21
- package/lib/constants/tier.js +12 -8
- package/lib/constants/userRole.d.ts +1 -2
- package/lib/constants/userRole.js +15 -17
- package/lib/css/components/_buttons.css +11 -3
- package/lib/css/components/_quill.css +3 -3
- package/lib/css/components/_tables.css +6 -5
- package/lib/css/utils/_display.css +12 -19
- package/lib/css/utils/_general.css +1 -1
- package/lib/css/utils/_text.css +2 -1
- package/lib/css/variables.css +0 -4
- package/lib/endpointMappings.js +197 -193
- package/lib/hooks/useCollection.js +83 -65
- package/lib/hooks/useCollectionConfiguration.d.ts +0 -1
- package/lib/hooks/useCollectionConfiguration.js +179 -82
- package/lib/hooks/useCollectionItem.js +155 -58
- package/lib/hooks/useEventCalback.d.ts +14 -0
- package/lib/hooks/useEventCalback.js +51 -0
- package/lib/hooks/useGuid.js +19 -8
- package/lib/hooks/usePrevious.d.ts +24 -1
- package/lib/hooks/usePrevious.js +82 -12
- package/lib/index.js +156 -36
- package/lib/redux/actionCreator.d.ts +6 -6
- package/lib/redux/actionCreator.js +51 -40
- package/lib/redux/actions/AuthAction.js +44 -31
- package/lib/redux/actions/ModalAction.d.ts +1 -1
- package/lib/redux/actions/ModalAction.js +10 -6
- package/lib/redux/actions/ModelAction.d.ts +1 -1
- package/lib/redux/actions/ModelAction.js +77 -49
- package/lib/redux/actions/NotificationAction.js +10 -6
- package/lib/redux/actions/SearchAction.js +9 -5
- package/lib/redux/actions/index.js +60 -16
- package/lib/redux/configureReducers.d.ts +2 -5
- package/lib/redux/configureReducers.js +61 -72
- package/lib/redux/configureStore.d.ts +2 -2
- package/lib/redux/configureStore.js +83 -115
- package/lib/redux/helpers.js +7 -2
- package/lib/redux/reducers/authReducer.js +50 -44
- package/lib/redux/reducers/index.js +41 -15
- package/lib/redux/reducers/modalsReducer.js +49 -52
- package/lib/redux/reducers/modelsReducer.d.ts +2 -2
- package/lib/redux/reducers/modelsReducer.js +136 -135
- package/lib/redux/reducers/notificationsReducer.js +26 -21
- package/lib/redux/reducers/searchReducer.js +18 -12
- package/lib/redux/sagas/appInsightsSaga.js +24 -62
- package/lib/redux/sagas/authSaga.js +287 -414
- package/lib/redux/sagas/caliperSaga.js +154 -248
- package/lib/redux/sagas/clockOffsetSaga.js +35 -76
- package/lib/redux/sagas/configurationSaga.js +13 -46
- package/lib/redux/sagas/downtimeApiErrorSaga.d.ts +0 -1
- package/lib/redux/sagas/downtimeApiErrorSaga.js +23 -64
- package/lib/redux/sagas/errorSaga.d.ts +0 -1
- package/lib/redux/sagas/errorSaga.js +29 -63
- package/lib/redux/sagas/googleAnalyticsSaga.js +29 -69
- package/lib/redux/sagas/identityProviderSaga.js +24 -69
- package/lib/redux/sagas/initialDataLoadSaga.js +38 -29
- package/lib/redux/sagas/lockDownBrowserErrorSaga.d.ts +0 -1
- package/lib/redux/sagas/lockDownBrowserErrorSaga.js +32 -81
- package/lib/redux/sagas/modelFetchSaga.js +331 -411
- package/lib/redux/sagas/noStoreSaga.d.ts +1 -1
- package/lib/redux/sagas/noStoreSaga.js +68 -101
- package/lib/redux/sagas/postLoginDataSaga.js +42 -74
- package/lib/redux/sagas/postLoginRedirectSaga.js +27 -68
- package/lib/redux/sagas/rootSaga.js +85 -137
- package/lib/redux/sagas/sentrySaga.js +29 -85
- package/lib/redux/sagas/userIdSaga.js +18 -54
- package/lib/services/codeProviderService.js +25 -29
- package/lib/services/dateService.js +12 -10
- package/lib/services/documentService.js +15 -10
- package/lib/services/fetchService.js +110 -144
- package/lib/services/persistenceService.d.ts +4 -4
- package/lib/services/persistenceService.js +45 -43
- package/lib/services/ticketProviderService.js +29 -33
- package/lib/services/tokenPersistenceService.js +13 -9
- package/lib/services/windowService.js +21 -17
- package/lib/startup.d.ts +1 -1
- package/lib/startup.js +115 -118
- package/lib/types/AppConfiguration.js +5 -1
- package/lib/types/Artifact.js +11 -7
- package/lib/types/BaseReduxState.js +5 -1
- package/lib/types/Client.js +5 -1
- package/lib/types/Collection.d.ts +3 -3
- package/lib/types/Collection.js +5 -1
- package/lib/types/Configuration.js +5 -1
- package/lib/types/DeepLinkingResponseRequest.js +5 -1
- package/lib/types/DeletableModel.js +5 -1
- package/lib/types/Event.js +5 -1
- package/lib/types/ExternalGroup.js +5 -1
- package/lib/types/ExternalProvider.js +5 -1
- package/lib/types/ExternalTerm.js +5 -1
- package/lib/types/Group.js +5 -1
- package/lib/types/IdentityProvider.js +5 -1
- package/lib/types/LtiLaunch.js +5 -1
- package/lib/types/NameOnlyEntity.js +5 -1
- package/lib/types/Notification.d.ts +2 -2
- package/lib/types/Notification.js +5 -1
- package/lib/types/OptionalRecord.d.ts +1 -1
- package/lib/types/OptionalRecord.js +5 -1
- package/lib/types/OwnerSchedule.d.ts +3 -1
- package/lib/types/OwnerSchedule.js +5 -1
- package/lib/types/PropertyOfType.d.ts +3 -3
- package/lib/types/PropertyOfType.js +5 -1
- package/lib/types/Quill.js +5 -1
- package/lib/types/RoleDescription.d.ts +0 -1
- package/lib/types/RoleDescription.js +5 -1
- package/lib/types/Search.js +5 -1
- package/lib/types/SimpleLocation.js +5 -1
- package/lib/types/UniTime.js +5 -1
- package/lib/types/User.js +5 -1
- package/lib/types/UserRole.js +5 -1
- package/lib/types/auth/AuthState.js +5 -1
- package/lib/types/auth/CasV1LoginRequestBody.js +5 -1
- package/lib/types/auth/ClientCredentials.js +5 -1
- package/lib/types/auth/CodeProviderService.js +5 -1
- package/lib/types/auth/LocalLoginRequestBody.js +5 -1
- package/lib/types/auth/TicketProviderService.js +5 -1
- package/lib/types/auth/TokenPersistenceService.js +5 -1
- package/lib/types/auth/index.js +82 -18
- package/lib/types/externals.d.js +2 -0
- package/lib/types/index.js +313 -39
- package/lib/types/net/EndpointConfig.js +5 -1
- package/lib/types/net/EndpointMapping.js +5 -1
- package/lib/types/net/EndpointMappings.js +5 -1
- package/lib/types/net/ErrorHandler.d.ts +1 -1
- package/lib/types/net/ErrorHandler.js +5 -1
- package/lib/types/net/FetchConfig.d.ts +1 -1
- package/lib/types/net/FetchConfig.js +5 -1
- package/lib/types/net/FetchErrorData.js +10 -6
- package/lib/types/net/FetchResult.d.ts +2 -2
- package/lib/types/net/FetchResult.js +5 -1
- package/lib/types/net/HTTPMethod.d.ts +1 -1
- package/lib/types/net/HTTPMethod.js +5 -1
- package/lib/types/net/HTTPStatusCode.js +16 -12
- package/lib/types/net/Metadata.js +5 -1
- package/lib/types/net/Model.js +5 -1
- package/lib/types/net/ModelCollection.js +5 -1
- package/lib/types/net/ModelsState.js +5 -1
- package/lib/types/net/OAuthToken.js +5 -1
- package/lib/types/net/OAuthTokenOrNull.d.ts +1 -1
- package/lib/types/net/OAuthTokenOrNull.js +5 -1
- package/lib/types/net/TokenAccessFunction.d.ts +1 -1
- package/lib/types/net/TokenAccessFunction.js +5 -1
- package/lib/types/net/index.js +181 -27
- package/lib/utils/baseActivity.d.ts +2 -2
- package/lib/utils/baseActivity.js +93 -91
- package/lib/utils/baseRole.js +37 -33
- package/lib/utils/collection.js +413 -291
- package/lib/utils/cookies.js +22 -37
- package/lib/utils/date.js +210 -210
- package/lib/utils/dom.js +145 -133
- package/lib/utils/domainIdentifier.js +9 -9
- package/lib/utils/entityUserRole.js +6 -2
- package/lib/utils/error.d.ts +1 -1
- package/lib/utils/error.js +18 -16
- package/lib/utils/events.js +37 -30
- package/lib/utils/externalGroup.js +25 -21
- package/lib/utils/externalProviders.js +8 -4
- package/lib/utils/externalTerms.js +9 -6
- package/lib/utils/fetch.d.ts +1 -1
- package/lib/utils/fetch.js +179 -176
- package/lib/utils/group.js +17 -9
- package/lib/utils/groupDates.d.ts +1 -1
- package/lib/utils/groupDates.js +43 -39
- package/lib/utils/groupRoles.js +28 -28
- package/lib/utils/lockDownBrowser.js +16 -12
- package/lib/utils/logger.js +30 -25
- package/lib/utils/lti.js +10 -5
- package/lib/utils/model.d.ts +2 -2
- package/lib/utils/model.js +35 -44
- package/lib/utils/number.js +13 -16
- package/lib/utils/promise.d.ts +6 -1
- package/lib/utils/promise.js +34 -15
- package/lib/utils/quill.js +60 -71
- package/lib/utils/route.d.ts +2 -2
- package/lib/utils/route.js +61 -60
- package/lib/utils/search.d.ts +1 -1
- package/lib/utils/search.js +78 -85
- package/lib/utils/shard.js +38 -41
- package/lib/utils/sort.d.ts +3 -3
- package/lib/utils/sort.js +62 -58
- package/lib/utils/string.js +14 -10
- package/lib/utils/table.d.ts +3 -3
- package/lib/utils/table.js +36 -33
- package/lib/utils/timezone.js +12 -26
- package/lib/utils/url.d.ts +2 -1
- package/lib/utils/url.js +139 -193
- package/lib/utils/user.js +59 -61
- package/lib/utils/userAgent.js +11 -11
- package/lib/utils/userRole.d.ts +3 -3
- package/lib/utils/userRole.js +46 -44
- package/package.json +90 -73
- package/lib/config/eslint/index.cjs +0 -21
- package/lib/config/eslint/lib/order.cjs +0 -22
- package/lib/config/eslint/lib/prettier.cjs +0 -18
- package/lib/config/eslint/lib/typescript.cjs +0 -86
- package/lib/config/eslint/react.cjs +0 -9
- package/lib/css/utils/_focus.css +0 -4
package/lib/utils/collection.js
CHANGED
|
@@ -1,278 +1,390 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
exports.cleanupCollectionGuidKey = exports.handleCollectionParamsChange = exports.handleCollectionItemParamsChange = exports.initializeCollection = exports.initializeCollectionItem = exports.deleteCollectionItem = exports.deleteItemFromCollection = exports.updateCollectionItem = exports.updateItemInCollection = exports.createCollectionItem = exports.createItemInCollection = exports.loadCollectionItem = exports.loadCollection = exports.stopCollectionPeriodicLoad = exports.selectCollectionFromState = exports.selectCollectionItemFromState = void 0;
|
|
7
|
-
var lodash_1 = require("lodash");
|
|
8
|
-
var memoize_one_1 = __importDefault(require("memoize-one"));
|
|
9
|
-
var constants_1 = require("../constants");
|
|
10
|
-
var actionCreator_1 = require("../redux/actionCreator");
|
|
11
|
-
var route_1 = require("./route");
|
|
12
|
-
//#region Redux Methods
|
|
13
|
-
var getPathParams = memoize_one_1.default(function (pathParams, routeMatchParams, modelName) {
|
|
14
|
-
return pathParams || route_1.getPathParamsFromRouteMatchParams(routeMatchParams, modelName);
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
15
6
|
});
|
|
7
|
+
exports.cleanupCollectionGuidKey = cleanupCollectionGuidKey;
|
|
8
|
+
exports.createCollectionItem = createCollectionItem;
|
|
9
|
+
exports.createItemInCollection = createItemInCollection;
|
|
10
|
+
exports.deleteCollectionItem = deleteCollectionItem;
|
|
11
|
+
exports.deleteItemFromCollection = deleteItemFromCollection;
|
|
12
|
+
exports.handleCollectionItemParamsChange = handleCollectionItemParamsChange;
|
|
13
|
+
exports.handleCollectionParamsChange = handleCollectionParamsChange;
|
|
14
|
+
exports.initializeCollection = initializeCollection;
|
|
15
|
+
exports.initializeCollectionItem = initializeCollectionItem;
|
|
16
|
+
exports.loadCollection = loadCollection;
|
|
17
|
+
exports.loadCollectionItem = loadCollectionItem;
|
|
18
|
+
exports.selectCollectionFromState = selectCollectionFromState;
|
|
19
|
+
exports.selectCollectionItemFromState = selectCollectionItemFromState;
|
|
20
|
+
exports.stopCollectionPeriodicLoad = stopCollectionPeriodicLoad;
|
|
21
|
+
exports.updateCollectionItem = updateCollectionItem;
|
|
22
|
+
exports.updateItemInCollection = updateItemInCollection;
|
|
23
|
+
var _lodash = require("lodash");
|
|
24
|
+
var _memoizeOne = _interopRequireDefault(require("memoize-one"));
|
|
25
|
+
var _constants = require("../constants");
|
|
26
|
+
var _actionCreator = require("../redux/actionCreator");
|
|
27
|
+
var _route = require("./route");
|
|
28
|
+
//#region Redux Methods
|
|
29
|
+
|
|
30
|
+
const getPathParams = (0, _memoizeOne.default)((pathParams, routeMatchParams, modelName) => pathParams || (0, _route.getPathParamsFromRouteMatchParams)(routeMatchParams, modelName));
|
|
31
|
+
|
|
32
|
+
// Provide a stable object reference for empty collections
|
|
33
|
+
const DEFAULT_MODEL = Object.freeze({});
|
|
16
34
|
function selectCollectionItemFromState(params) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
35
|
+
const {
|
|
36
|
+
guid,
|
|
37
|
+
modelName,
|
|
38
|
+
pathParams,
|
|
39
|
+
routeMatchParams,
|
|
40
|
+
state
|
|
41
|
+
} = params;
|
|
42
|
+
const modelNameLevelCount = (0, _route.getMinRequiredPathParamsCount)(modelName);
|
|
43
|
+
const p = getPathParams(pathParams, routeMatchParams, modelName);
|
|
44
|
+
const reduxModelName = (0, _route.getReduxModelName)(p, modelName);
|
|
45
|
+
let model = DEFAULT_MODEL;
|
|
46
|
+
// find `model` using `guid` as its key, to match new item created in `create()`
|
|
47
|
+
if (p.length === modelNameLevelCount) {
|
|
48
|
+
const collection = (0, _lodash.get)(state.models, reduxModelName) || {};
|
|
49
|
+
if (Object.prototype.hasOwnProperty.call(collection, guid)) {
|
|
50
|
+
model = collection[guid];
|
|
51
|
+
} else {
|
|
52
|
+
const modelByGuid = (0, _lodash.find)((0, _lodash.values)(collection), m => !!m && 'guid' in m && m.guid === guid);
|
|
53
|
+
model = modelByGuid || model;
|
|
32
54
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
55
|
+
} else {
|
|
56
|
+
// find `model` using pathParams
|
|
57
|
+
const reduxModel = (0, _lodash.get)(state.models, reduxModelName) || {};
|
|
58
|
+
model = Object.keys(reduxModel).length > 0 ? reduxModel : DEFAULT_MODEL;
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
modelName,
|
|
62
|
+
pathParams: p,
|
|
63
|
+
model,
|
|
64
|
+
isCollectionItem: true
|
|
65
|
+
};
|
|
44
66
|
}
|
|
45
|
-
exports.selectCollectionItemFromState = selectCollectionItemFromState;
|
|
46
67
|
function selectCollectionFromState(params) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
68
|
+
const {
|
|
69
|
+
modelName,
|
|
70
|
+
pathParams,
|
|
71
|
+
routeMatchParams,
|
|
72
|
+
state
|
|
73
|
+
} = params;
|
|
74
|
+
const p = getPathParams(pathParams, routeMatchParams, modelName);
|
|
75
|
+
const reduxModelName = (0, _route.getReduxModelName)(p, modelName);
|
|
76
|
+
let model = (0, _lodash.get)(state.models, reduxModelName);
|
|
77
|
+
model = model && Object.keys(model).length > 0 ? model : DEFAULT_MODEL;
|
|
78
|
+
return {
|
|
79
|
+
modelName,
|
|
80
|
+
pathParams: p,
|
|
81
|
+
model,
|
|
82
|
+
isCollectionItem: false
|
|
83
|
+
};
|
|
58
84
|
}
|
|
59
|
-
|
|
85
|
+
|
|
60
86
|
//#endregion Redux Methods
|
|
87
|
+
|
|
61
88
|
//#region Collection/Item CRUD Methods
|
|
89
|
+
|
|
62
90
|
//#region Load
|
|
91
|
+
|
|
63
92
|
function stopCollectionPeriodicLoad(taskId) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
93
|
+
(0, _actionCreator.dispatchPeriodicModelFetchTerminateAction)({
|
|
94
|
+
taskId
|
|
95
|
+
});
|
|
67
96
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
97
|
+
function loadCollection(config) {
|
|
98
|
+
let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
99
|
+
const {
|
|
100
|
+
modelName,
|
|
101
|
+
isInitialized,
|
|
102
|
+
pathParams: configPathParams,
|
|
103
|
+
queryParams: configQueryParams,
|
|
104
|
+
changeModelStatus
|
|
105
|
+
} = config;
|
|
106
|
+
const {
|
|
107
|
+
id,
|
|
108
|
+
pathParams,
|
|
109
|
+
queryParams,
|
|
110
|
+
period,
|
|
111
|
+
taskId,
|
|
112
|
+
replaceValue
|
|
113
|
+
} = params;
|
|
114
|
+
const p = (0, _lodash.concat)([], pathParams || configPathParams, id ? [id] : []);
|
|
115
|
+
if (p.length !== (0, _route.getMinRequiredPathParamsCount)(modelName) + (id ? 1 : 0)) {
|
|
116
|
+
throw new Error('pathParams length does not match length of path components');
|
|
117
|
+
}
|
|
118
|
+
if (isInitialized) {
|
|
119
|
+
changeModelStatus(_constants.MODEL_STATUS.LOADING, id);
|
|
120
|
+
}
|
|
121
|
+
if (!period) {
|
|
122
|
+
(0, _actionCreator.dispatchModelFetchRequest)({
|
|
123
|
+
modelName,
|
|
124
|
+
method: 'GET',
|
|
125
|
+
pathParams: p,
|
|
126
|
+
queryParams: queryParams || configQueryParams,
|
|
127
|
+
replaceValue
|
|
128
|
+
});
|
|
129
|
+
} else {
|
|
130
|
+
if (!taskId) throw new Error('taskId is required for periodic data requests');
|
|
131
|
+
(0, _actionCreator.dispatchPeriodicModelFetchRequest)({
|
|
132
|
+
modelName,
|
|
133
|
+
method: 'GET',
|
|
134
|
+
pathParams: p,
|
|
135
|
+
queryParams: queryParams || configQueryParams,
|
|
136
|
+
period,
|
|
137
|
+
taskId,
|
|
138
|
+
replaceValue
|
|
139
|
+
});
|
|
140
|
+
}
|
|
102
141
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
142
|
+
function loadCollectionItem(config) {
|
|
143
|
+
let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
144
|
+
const {
|
|
145
|
+
modelName,
|
|
146
|
+
isInitialized,
|
|
147
|
+
pathParams: configPathParams,
|
|
148
|
+
queryParams: configQueryParams,
|
|
149
|
+
changeModelStatus
|
|
150
|
+
} = config;
|
|
151
|
+
const {
|
|
152
|
+
pathParams,
|
|
153
|
+
queryParams,
|
|
154
|
+
period,
|
|
155
|
+
taskId,
|
|
156
|
+
replaceValue
|
|
157
|
+
} = params;
|
|
158
|
+
const p = pathParams || configPathParams;
|
|
159
|
+
if (p.length < (0, _route.getMinRequiredPathParamsCount)(modelName) + 1) {
|
|
160
|
+
throw new Error('pathParams length does not match length of path components');
|
|
161
|
+
}
|
|
162
|
+
if (isInitialized) {
|
|
163
|
+
changeModelStatus(_constants.MODEL_STATUS.LOADING);
|
|
164
|
+
}
|
|
165
|
+
if (!period) {
|
|
166
|
+
(0, _actionCreator.dispatchModelFetchRequest)({
|
|
167
|
+
modelName,
|
|
168
|
+
method: 'GET',
|
|
169
|
+
pathParams: p,
|
|
170
|
+
queryParams: queryParams || configQueryParams,
|
|
171
|
+
replaceValue
|
|
172
|
+
});
|
|
173
|
+
} else {
|
|
174
|
+
if (!taskId) throw new Error('taskId is required for periodic data requests');
|
|
175
|
+
(0, _actionCreator.dispatchPeriodicModelFetchRequest)({
|
|
176
|
+
modelName,
|
|
177
|
+
method: 'GET',
|
|
178
|
+
pathParams: p,
|
|
179
|
+
queryParams: queryParams || configQueryParams,
|
|
180
|
+
period,
|
|
181
|
+
taskId,
|
|
182
|
+
replaceValue
|
|
183
|
+
});
|
|
184
|
+
}
|
|
137
185
|
}
|
|
138
|
-
|
|
186
|
+
|
|
139
187
|
//#endregion Load
|
|
188
|
+
|
|
140
189
|
//#region Create
|
|
190
|
+
|
|
141
191
|
function createItemInCollection(config, params) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
changeModelStatus
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
192
|
+
const {
|
|
193
|
+
guid,
|
|
194
|
+
modelName,
|
|
195
|
+
pathParams,
|
|
196
|
+
queryParams: configQueryParams,
|
|
197
|
+
changeModelStatus
|
|
198
|
+
} = config;
|
|
199
|
+
const {
|
|
200
|
+
body,
|
|
201
|
+
contentType,
|
|
202
|
+
queryParams
|
|
203
|
+
} = params;
|
|
204
|
+
if (pathParams.length < (0, _route.getMinRequiredPathParamsCount)(modelName)) {
|
|
205
|
+
throw new Error('pathParams length does not match length of path components');
|
|
206
|
+
}
|
|
207
|
+
changeModelStatus(_constants.MODEL_STATUS.CREATING, guid);
|
|
208
|
+
(0, _actionCreator.dispatchModelFetchRequest)({
|
|
209
|
+
modelName,
|
|
210
|
+
guid,
|
|
211
|
+
method: 'POST',
|
|
212
|
+
body,
|
|
213
|
+
pathParams,
|
|
214
|
+
contentType,
|
|
215
|
+
queryParams: queryParams || configQueryParams
|
|
216
|
+
});
|
|
157
217
|
}
|
|
158
|
-
exports.createItemInCollection = createItemInCollection;
|
|
159
218
|
function createCollectionItem(model, config, params) {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
changeModelStatus
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
219
|
+
if (model.id) {
|
|
220
|
+
throw new Error('model already exists');
|
|
221
|
+
}
|
|
222
|
+
const {
|
|
223
|
+
guid,
|
|
224
|
+
modelName,
|
|
225
|
+
pathParams,
|
|
226
|
+
queryParams: configQueryParams,
|
|
227
|
+
changeModelStatus
|
|
228
|
+
} = config;
|
|
229
|
+
const {
|
|
230
|
+
body,
|
|
231
|
+
contentType,
|
|
232
|
+
queryParams
|
|
233
|
+
} = params;
|
|
234
|
+
if (pathParams.length < (0, _route.getMinRequiredPathParamsCount)(modelName)) {
|
|
235
|
+
throw new Error('pathParams length does not match length of path components');
|
|
236
|
+
}
|
|
237
|
+
changeModelStatus(_constants.MODEL_STATUS.CREATING);
|
|
238
|
+
(0, _actionCreator.dispatchModelFetchRequest)({
|
|
239
|
+
modelName,
|
|
240
|
+
guid,
|
|
241
|
+
method: 'POST',
|
|
242
|
+
body,
|
|
243
|
+
pathParams,
|
|
244
|
+
contentType,
|
|
245
|
+
queryParams: queryParams || configQueryParams
|
|
246
|
+
});
|
|
178
247
|
}
|
|
179
|
-
|
|
248
|
+
|
|
180
249
|
//#endregion Create
|
|
250
|
+
|
|
181
251
|
//#region Update
|
|
252
|
+
|
|
182
253
|
function updateItemInCollection(config, params) {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
254
|
+
const {
|
|
255
|
+
id,
|
|
256
|
+
body,
|
|
257
|
+
contentType,
|
|
258
|
+
method,
|
|
259
|
+
queryParams
|
|
260
|
+
} = params;
|
|
261
|
+
if (!id) {
|
|
262
|
+
throw new Error(`'id' is required`);
|
|
263
|
+
}
|
|
264
|
+
if (!body) {
|
|
265
|
+
throw new Error(`'body' is required`);
|
|
266
|
+
}
|
|
267
|
+
const {
|
|
268
|
+
modelName,
|
|
269
|
+
pathParams: configPathParams,
|
|
270
|
+
queryParams: configQueryParams,
|
|
271
|
+
changeModelStatus
|
|
272
|
+
} = config;
|
|
273
|
+
const pathParams = (0, _lodash.concat)([], configPathParams, [id]);
|
|
274
|
+
if (pathParams.length !== (0, _route.getMinRequiredPathParamsCount)(modelName) + 1) {
|
|
275
|
+
throw new Error('pathParams+id length does not match length of path components');
|
|
276
|
+
}
|
|
277
|
+
const m = method || 'PUT';
|
|
278
|
+
changeModelStatus(_constants.MODEL_STATUS.UPDATING, id);
|
|
279
|
+
(0, _actionCreator.dispatchModelFetchRequest)({
|
|
280
|
+
modelName,
|
|
281
|
+
method: m,
|
|
282
|
+
pathParams,
|
|
283
|
+
queryParams: queryParams || configQueryParams,
|
|
284
|
+
body,
|
|
285
|
+
contentType
|
|
286
|
+
});
|
|
205
287
|
}
|
|
206
|
-
exports.updateItemInCollection = updateItemInCollection;
|
|
207
288
|
function updateCollectionItem(model, config, params) {
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
289
|
+
if (!model.id) {
|
|
290
|
+
throw new Error('model does not exist');
|
|
291
|
+
}
|
|
292
|
+
const {
|
|
293
|
+
body,
|
|
294
|
+
contentType,
|
|
295
|
+
method,
|
|
296
|
+
queryParams
|
|
297
|
+
} = params;
|
|
298
|
+
if (!body) {
|
|
299
|
+
throw new Error(`'body' is required`);
|
|
300
|
+
}
|
|
301
|
+
const {
|
|
302
|
+
modelName,
|
|
303
|
+
pathParams,
|
|
304
|
+
queryParams: configQueryParams,
|
|
305
|
+
changeModelStatus
|
|
306
|
+
} = config;
|
|
307
|
+
if (pathParams.length < (0, _route.getMinRequiredPathParamsCount)(modelName) + 1) {
|
|
308
|
+
throw new Error('pathParams length does not match length of path components');
|
|
309
|
+
}
|
|
310
|
+
const m = method || 'PUT';
|
|
311
|
+
changeModelStatus(_constants.MODEL_STATUS.UPDATING);
|
|
312
|
+
(0, _actionCreator.dispatchModelFetchRequest)({
|
|
313
|
+
modelName,
|
|
314
|
+
method: m,
|
|
315
|
+
pathParams,
|
|
316
|
+
body,
|
|
317
|
+
contentType,
|
|
318
|
+
queryParams: queryParams || configQueryParams
|
|
319
|
+
});
|
|
229
320
|
}
|
|
230
|
-
|
|
321
|
+
|
|
231
322
|
//#endregion Update
|
|
323
|
+
|
|
232
324
|
//#region Delete
|
|
325
|
+
|
|
233
326
|
function deleteItemFromCollection(config, params) {
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
327
|
+
const {
|
|
328
|
+
id,
|
|
329
|
+
body,
|
|
330
|
+
queryParams
|
|
331
|
+
} = params;
|
|
332
|
+
if (!id) {
|
|
333
|
+
throw new Error(`'id' is required`);
|
|
334
|
+
}
|
|
335
|
+
const {
|
|
336
|
+
modelName,
|
|
337
|
+
pathParams,
|
|
338
|
+
queryParams: configQueryParams,
|
|
339
|
+
changeModelStatus
|
|
340
|
+
} = config;
|
|
341
|
+
const p = (0, _lodash.concat)([], pathParams, [id]);
|
|
342
|
+
if (p.length !== (0, _route.getMinRequiredPathParamsCount)(modelName) + 1) {
|
|
343
|
+
throw new Error('pathParams+id length does not match length of path components');
|
|
344
|
+
}
|
|
345
|
+
changeModelStatus(_constants.MODEL_STATUS.DELETING, id);
|
|
346
|
+
(0, _actionCreator.dispatchModelFetchRequest)({
|
|
347
|
+
modelName,
|
|
348
|
+
method: 'DELETE',
|
|
349
|
+
pathParams: p,
|
|
350
|
+
queryParams: queryParams || configQueryParams,
|
|
351
|
+
body
|
|
352
|
+
});
|
|
251
353
|
}
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
354
|
+
function deleteCollectionItem(model, config) {
|
|
355
|
+
let params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
356
|
+
if (!model.id) {
|
|
357
|
+
throw new Error('model does not exist');
|
|
358
|
+
}
|
|
359
|
+
const {
|
|
360
|
+
body,
|
|
361
|
+
queryParams
|
|
362
|
+
} = params;
|
|
363
|
+
const {
|
|
364
|
+
modelName,
|
|
365
|
+
pathParams,
|
|
366
|
+
queryParams: configQueryParams,
|
|
367
|
+
changeModelStatus
|
|
368
|
+
} = config;
|
|
369
|
+
if (pathParams.length < (0, _route.getMinRequiredPathParamsCount)(modelName) + 1) {
|
|
370
|
+
throw new Error('pathParams length does not match length of path components');
|
|
371
|
+
}
|
|
372
|
+
changeModelStatus(_constants.MODEL_STATUS.DELETING);
|
|
373
|
+
(0, _actionCreator.dispatchModelFetchRequest)({
|
|
374
|
+
modelName,
|
|
375
|
+
method: 'DELETE',
|
|
376
|
+
pathParams,
|
|
377
|
+
body,
|
|
378
|
+
queryParams: queryParams || configQueryParams
|
|
379
|
+
});
|
|
271
380
|
}
|
|
272
|
-
|
|
381
|
+
|
|
273
382
|
//#endregion Delete
|
|
383
|
+
|
|
274
384
|
//#endregion Collection/Item CRUD Methods
|
|
385
|
+
|
|
275
386
|
//#region Helper Methods
|
|
387
|
+
|
|
276
388
|
/**
|
|
277
389
|
* Automatically call `load`, or `changeModelStatus` to `READY`.
|
|
278
390
|
*
|
|
@@ -282,17 +394,19 @@ exports.deleteCollectionItem = deleteCollectionItem;
|
|
|
282
394
|
* * auto load is disabled.
|
|
283
395
|
*/
|
|
284
396
|
function initializeCollectionItem(model, load, config) {
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
397
|
+
const {
|
|
398
|
+
modelName,
|
|
399
|
+
pathParams,
|
|
400
|
+
disableAutoLoad,
|
|
401
|
+
changeModelStatus
|
|
402
|
+
} = config;
|
|
403
|
+
if (pathParams.length === (0, _route.getMinRequiredPathParamsCount)(modelName) + 1 && !disableAutoLoad && (!model._metadata || !model._metadata.isFetching)) {
|
|
404
|
+
load();
|
|
405
|
+
} else {
|
|
406
|
+
changeModelStatus(_constants.MODEL_STATUS.READY);
|
|
407
|
+
}
|
|
294
408
|
}
|
|
295
|
-
|
|
409
|
+
|
|
296
410
|
/**
|
|
297
411
|
* Automatically call `load`, or `changeModelStatus` to `READY`.
|
|
298
412
|
*
|
|
@@ -301,62 +415,70 @@ exports.initializeCollectionItem = initializeCollectionItem;
|
|
|
301
415
|
* * auto load is disabled.
|
|
302
416
|
*/
|
|
303
417
|
function initializeCollection(model, load, config) {
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
418
|
+
const {
|
|
419
|
+
disableAutoLoad,
|
|
420
|
+
changeModelStatus
|
|
421
|
+
} = config;
|
|
422
|
+
if (!disableAutoLoad && (!model._metadata || !model._metadata.isFetching)) {
|
|
423
|
+
load();
|
|
424
|
+
} else if (disableAutoLoad) {
|
|
425
|
+
changeModelStatus(_constants.MODEL_STATUS.READY);
|
|
426
|
+
}
|
|
311
427
|
}
|
|
312
|
-
|
|
428
|
+
|
|
313
429
|
/**
|
|
314
430
|
* When `pathParams` or `queryParams` change, call `load`
|
|
315
431
|
*/
|
|
316
432
|
function handleCollectionItemParamsChange(modelName, prevModelName, pathParams, prevPathParams, queryParams, prevQueryParams, load) {
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
}
|
|
433
|
+
if (modelName !== prevModelName || pathParams.length === (0, _route.getMinRequiredPathParamsCount)(modelName) + 1 && !(0, _lodash.isEqual)(prevPathParams, pathParams) || !(0, _lodash.isEqual)(prevQueryParams, queryParams)) {
|
|
434
|
+
load({
|
|
435
|
+
pathParams,
|
|
436
|
+
queryParams
|
|
437
|
+
});
|
|
438
|
+
}
|
|
322
439
|
}
|
|
323
|
-
|
|
440
|
+
|
|
324
441
|
/**
|
|
325
442
|
* When `pathParams` or `queryParams` change, call `load`
|
|
326
443
|
*/
|
|
327
444
|
function handleCollectionParamsChange(modelName, prevModelName, pathParams, prevPathParams, queryParams, prevQueryParams, load) {
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
}
|
|
445
|
+
if (modelName !== prevModelName || pathParams.length > 0 && !(0, _lodash.isEqual)(prevPathParams, pathParams) || !(0, _lodash.isEqual)(prevQueryParams, queryParams)) {
|
|
446
|
+
load({
|
|
447
|
+
pathParams,
|
|
448
|
+
queryParams
|
|
449
|
+
});
|
|
450
|
+
}
|
|
333
451
|
}
|
|
334
|
-
|
|
452
|
+
|
|
335
453
|
/**
|
|
336
454
|
* Delete the guid in the model
|
|
337
455
|
*/
|
|
338
456
|
function cleanupCollectionGuidKey(model, config) {
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
modelPath: path_1
|
|
357
|
-
});
|
|
457
|
+
const {
|
|
458
|
+
guid,
|
|
459
|
+
modelName,
|
|
460
|
+
pathParams
|
|
461
|
+
} = config;
|
|
462
|
+
if ((0, _lodash.includes)(Object.keys(model), guid)) {
|
|
463
|
+
const modelNames = modelName.split('.');
|
|
464
|
+
const tempPathParams = pathParams.slice();
|
|
465
|
+
// should include the guid at the end
|
|
466
|
+
tempPathParams.push(guid);
|
|
467
|
+
if (modelNames.length === tempPathParams.length) {
|
|
468
|
+
let path = '';
|
|
469
|
+
modelNames.forEach((m, i) => {
|
|
470
|
+
if (i === 0) {
|
|
471
|
+
path += `${m}.${tempPathParams[i]}`;
|
|
472
|
+
} else {
|
|
473
|
+
path += `.${m}.${tempPathParams[i]}`;
|
|
358
474
|
}
|
|
475
|
+
});
|
|
476
|
+
(0, _actionCreator.dispatchModelRemoveKeyAction)({
|
|
477
|
+
modelPath: path
|
|
478
|
+
});
|
|
359
479
|
}
|
|
480
|
+
}
|
|
360
481
|
}
|
|
361
|
-
|
|
482
|
+
|
|
362
483
|
//#endregion Helper Methods
|
|
484
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwicmVxdWlyZSIsIl9tZW1vaXplT25lIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jb25zdGFudHMiLCJfYWN0aW9uQ3JlYXRvciIsIl9yb3V0ZSIsImdldFBhdGhQYXJhbXMiLCJtZW1vaXplT25lIiwicGF0aFBhcmFtcyIsInJvdXRlTWF0Y2hQYXJhbXMiLCJtb2RlbE5hbWUiLCJnZXRQYXRoUGFyYW1zRnJvbVJvdXRlTWF0Y2hQYXJhbXMiLCJERUZBVUxUX01PREVMIiwiT2JqZWN0IiwiZnJlZXplIiwic2VsZWN0Q29sbGVjdGlvbkl0ZW1Gcm9tU3RhdGUiLCJwYXJhbXMiLCJndWlkIiwic3RhdGUiLCJtb2RlbE5hbWVMZXZlbENvdW50IiwiZ2V0TWluUmVxdWlyZWRQYXRoUGFyYW1zQ291bnQiLCJwIiwicmVkdXhNb2RlbE5hbWUiLCJnZXRSZWR1eE1vZGVsTmFtZSIsIm1vZGVsIiwibGVuZ3RoIiwiY29sbGVjdGlvbiIsImdldCIsIm1vZGVscyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIm1vZGVsQnlHdWlkIiwiZmluZCIsInZhbHVlcyIsIm0iLCJyZWR1eE1vZGVsIiwia2V5cyIsImlzQ29sbGVjdGlvbkl0ZW0iLCJzZWxlY3RDb2xsZWN0aW9uRnJvbVN0YXRlIiwic3RvcENvbGxlY3Rpb25QZXJpb2RpY0xvYWQiLCJ0YXNrSWQiLCJkaXNwYXRjaFBlcmlvZGljTW9kZWxGZXRjaFRlcm1pbmF0ZUFjdGlvbiIsImxvYWRDb2xsZWN0aW9uIiwiY29uZmlnIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiaXNJbml0aWFsaXplZCIsImNvbmZpZ1BhdGhQYXJhbXMiLCJxdWVyeVBhcmFtcyIsImNvbmZpZ1F1ZXJ5UGFyYW1zIiwiY2hhbmdlTW9kZWxTdGF0dXMiLCJpZCIsInBlcmlvZCIsInJlcGxhY2VWYWx1ZSIsImNvbmNhdCIsIkVycm9yIiwiTU9ERUxfU1RBVFVTIiwiTE9BRElORyIsImRpc3BhdGNoTW9kZWxGZXRjaFJlcXVlc3QiLCJtZXRob2QiLCJkaXNwYXRjaFBlcmlvZGljTW9kZWxGZXRjaFJlcXVlc3QiLCJsb2FkQ29sbGVjdGlvbkl0ZW0iLCJjcmVhdGVJdGVtSW5Db2xsZWN0aW9uIiwiYm9keSIsImNvbnRlbnRUeXBlIiwiQ1JFQVRJTkciLCJjcmVhdGVDb2xsZWN0aW9uSXRlbSIsInVwZGF0ZUl0ZW1JbkNvbGxlY3Rpb24iLCJVUERBVElORyIsInVwZGF0ZUNvbGxlY3Rpb25JdGVtIiwiZGVsZXRlSXRlbUZyb21Db2xsZWN0aW9uIiwiREVMRVRJTkciLCJkZWxldGVDb2xsZWN0aW9uSXRlbSIsImluaXRpYWxpemVDb2xsZWN0aW9uSXRlbSIsImxvYWQiLCJkaXNhYmxlQXV0b0xvYWQiLCJfbWV0YWRhdGEiLCJpc0ZldGNoaW5nIiwiUkVBRFkiLCJpbml0aWFsaXplQ29sbGVjdGlvbiIsImhhbmRsZUNvbGxlY3Rpb25JdGVtUGFyYW1zQ2hhbmdlIiwicHJldk1vZGVsTmFtZSIsInByZXZQYXRoUGFyYW1zIiwicHJldlF1ZXJ5UGFyYW1zIiwiaXNFcXVhbCIsImhhbmRsZUNvbGxlY3Rpb25QYXJhbXNDaGFuZ2UiLCJjbGVhbnVwQ29sbGVjdGlvbkd1aWRLZXkiLCJpbmNsdWRlcyIsIm1vZGVsTmFtZXMiLCJzcGxpdCIsInRlbXBQYXRoUGFyYW1zIiwic2xpY2UiLCJwdXNoIiwicGF0aCIsImZvckVhY2giLCJpIiwiZGlzcGF0Y2hNb2RlbFJlbW92ZUtleUFjdGlvbiIsIm1vZGVsUGF0aCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jb2xsZWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbmNhdCwgRGljdGlvbmFyeSwgZmluZCwgZ2V0LCBpbmNsdWRlcywgaXNFcXVhbCwgdmFsdWVzIH0gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IG1lbW9pemVPbmUgZnJvbSAnbWVtb2l6ZS1vbmUnXG5pbXBvcnQgeyBNT0RFTF9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnXG5pbXBvcnQge1xuXHRkaXNwYXRjaE1vZGVsRmV0Y2hSZXF1ZXN0LFxuXHRkaXNwYXRjaE1vZGVsUmVtb3ZlS2V5QWN0aW9uLFxuXHRkaXNwYXRjaFBlcmlvZGljTW9kZWxGZXRjaFJlcXVlc3QsXG5cdGRpc3BhdGNoUGVyaW9kaWNNb2RlbEZldGNoVGVybWluYXRlQWN0aW9uXG59IGZyb20gJy4uL3JlZHV4L2FjdGlvbkNyZWF0b3InXG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uQ3JlYXRlUGFyYW1zLFxuXHRDb2xsZWN0aW9uRGVsZXRlUGFyYW1zLFxuXHRDb2xsZWN0aW9uSXRlbURlbGV0ZVBhcmFtcyxcblx0Q29sbGVjdGlvbkl0ZW1Mb2FkUGFyYW1zLFxuXHRDb2xsZWN0aW9uSXRlbVVwZGF0ZVBhcmFtcyxcblx0Q29sbGVjdGlvbkxvYWRQYXJhbXMsXG5cdENvbGxlY3Rpb25NZXRob2RDb25maWd1cmF0aW9uLFxuXHRDb2xsZWN0aW9uU2VsZWN0b3JNZXRob2RQYXJhbXMsXG5cdENvbGxlY3Rpb25TZWxlY3Rvck1ldGhvZFJlc3BvbnNlLFxuXHRDb2xsZWN0aW9uVXBkYXRlUGFyYW1zLFxuXHRNb2RlbCxcblx0TW9kZWxDb2xsZWN0aW9uXG59IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0TWluUmVxdWlyZWRQYXRoUGFyYW1zQ291bnQsIGdldFBhdGhQYXJhbXNGcm9tUm91dGVNYXRjaFBhcmFtcywgZ2V0UmVkdXhNb2RlbE5hbWUgfSBmcm9tICcuL3JvdXRlJ1xuXG4vLyNyZWdpb24gUmVkdXggTWV0aG9kc1xuXG5jb25zdCBnZXRQYXRoUGFyYW1zID0gbWVtb2l6ZU9uZShcblx0KHBhdGhQYXJhbXM6IEFycmF5PHN0cmluZyB8IG51bWJlcj4gfCB1bmRlZmluZWQsIHJvdXRlTWF0Y2hQYXJhbXM6IERpY3Rpb25hcnk8c3RyaW5nPiwgbW9kZWxOYW1lOiBzdHJpbmcpID0+XG5cdFx0cGF0aFBhcmFtcyB8fCBnZXRQYXRoUGFyYW1zRnJvbVJvdXRlTWF0Y2hQYXJhbXMocm91dGVNYXRjaFBhcmFtcywgbW9kZWxOYW1lKVxuKVxuXG4vLyBQcm92aWRlIGEgc3RhYmxlIG9iamVjdCByZWZlcmVuY2UgZm9yIGVtcHR5IGNvbGxlY3Rpb25zXG5jb25zdCBERUZBVUxUX01PREVMID0gT2JqZWN0LmZyZWV6ZSh7fSlcbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RDb2xsZWN0aW9uSXRlbUZyb21TdGF0ZTxUTW9kZWwgZXh0ZW5kcyBNb2RlbD4oXG5cdHBhcmFtczogQ29sbGVjdGlvblNlbGVjdG9yTWV0aG9kUGFyYW1zXG4pOiBDb2xsZWN0aW9uU2VsZWN0b3JNZXRob2RSZXNwb25zZTxUTW9kZWw+IHtcblx0Y29uc3QgeyBndWlkLCBtb2RlbE5hbWUsIHBhdGhQYXJhbXMsIHJvdXRlTWF0Y2hQYXJhbXMsIHN0YXRlIH0gPSBwYXJhbXNcblx0Y29uc3QgbW9kZWxOYW1lTGV2ZWxDb3VudCA9IGdldE1pblJlcXVpcmVkUGF0aFBhcmFtc0NvdW50KG1vZGVsTmFtZSlcblx0Y29uc3QgcCA9IGdldFBhdGhQYXJhbXMocGF0aFBhcmFtcywgcm91dGVNYXRjaFBhcmFtcywgbW9kZWxOYW1lKVxuXHRjb25zdCByZWR1eE1vZGVsTmFtZSA9IGdldFJlZHV4TW9kZWxOYW1lKHAsIG1vZGVsTmFtZSlcblxuXHRsZXQgbW9kZWwgPSBERUZBVUxUX01PREVMIGFzIFRNb2RlbFxuXHQvLyBmaW5kIGBtb2RlbGAgdXNpbmcgYGd1aWRgIGFzIGl0cyBrZXksIHRvIG1hdGNoIG5ldyBpdGVtIGNyZWF0ZWQgaW4gYGNyZWF0ZSgpYFxuXHRpZiAocC5sZW5ndGggPT09IG1vZGVsTmFtZUxldmVsQ291bnQpIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uID0gKGdldChzdGF0ZS5tb2RlbHMsIHJlZHV4TW9kZWxOYW1lKSB8fCB7fSkgYXMgTW9kZWxDb2xsZWN0aW9uPFRNb2RlbD5cblx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbGxlY3Rpb24sIGd1aWQpKSB7XG5cdFx0XHRtb2RlbCA9IGNvbGxlY3Rpb25bZ3VpZF0gYXMgVE1vZGVsXG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG1vZGVsQnlHdWlkID0gZmluZCh2YWx1ZXMoY29sbGVjdGlvbiksIChtKTogbSBpcyBUTW9kZWwgPT4gISFtICYmICdndWlkJyBpbiBtICYmIG0uZ3VpZCA9PT0gZ3VpZClcblx0XHRcdG1vZGVsID0gbW9kZWxCeUd1aWQgfHwgbW9kZWxcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZmluZCBgbW9kZWxgIHVzaW5nIHBhdGhQYXJhbXNcblx0XHRjb25zdCByZWR1eE1vZGVsID0gKGdldChzdGF0ZS5tb2RlbHMsIHJlZHV4TW9kZWxOYW1lKSB8fCB7fSkgYXMgVE1vZGVsXG5cdFx0bW9kZWwgPSAoT2JqZWN0LmtleXMocmVkdXhNb2RlbCkubGVuZ3RoID4gMCA/IHJlZHV4TW9kZWwgOiBERUZBVUxUX01PREVMKSBhcyBUTW9kZWxcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bW9kZWxOYW1lLFxuXHRcdHBhdGhQYXJhbXM6IHAsXG5cdFx0bW9kZWwsXG5cdFx0aXNDb2xsZWN0aW9uSXRlbTogdHJ1ZVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RDb2xsZWN0aW9uRnJvbVN0YXRlPFRNb2RlbCBleHRlbmRzIE1vZGVsPihcblx0cGFyYW1zOiBDb2xsZWN0aW9uU2VsZWN0b3JNZXRob2RQYXJhbXNcbik6IENvbGxlY3Rpb25TZWxlY3Rvck1ldGhvZFJlc3BvbnNlPFRNb2RlbD4ge1xuXHRjb25zdCB7IG1vZGVsTmFtZSwgcGF0aFBhcmFtcywgcm91dGVNYXRjaFBhcmFtcywgc3RhdGUgfSA9IHBhcmFtc1xuXHRjb25zdCBwID0gZ2V0UGF0aFBhcmFtcyhwYXRoUGFyYW1zLCByb3V0ZU1hdGNoUGFyYW1zLCBtb2RlbE5hbWUpXG5cdGNvbnN0IHJlZHV4TW9kZWxOYW1lID0gZ2V0UmVkdXhNb2RlbE5hbWUocCwgbW9kZWxOYW1lKVxuXG5cdGxldCBtb2RlbCA9IGdldChzdGF0ZS5tb2RlbHMsIHJlZHV4TW9kZWxOYW1lKSBhcyBNb2RlbENvbGxlY3Rpb248VE1vZGVsPiB8IHVuZGVmaW5lZFxuXHRtb2RlbCA9IG1vZGVsICYmIE9iamVjdC5rZXlzKG1vZGVsKS5sZW5ndGggPiAwID8gbW9kZWwgOiAoREVGQVVMVF9NT0RFTCBhcyBNb2RlbENvbGxlY3Rpb248VE1vZGVsPilcblxuXHRyZXR1cm4ge1xuXHRcdG1vZGVsTmFtZSxcblx0XHRwYXRoUGFyYW1zOiBwLFxuXHRcdG1vZGVsLFxuXHRcdGlzQ29sbGVjdGlvbkl0ZW06IGZhbHNlXG5cdH1cbn1cblxuLy8jZW5kcmVnaW9uIFJlZHV4IE1ldGhvZHNcblxuLy8jcmVnaW9uIENvbGxlY3Rpb24vSXRlbSBDUlVEIE1ldGhvZHNcblxuLy8jcmVnaW9uIExvYWRcblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BDb2xsZWN0aW9uUGVyaW9kaWNMb2FkKHRhc2tJZDogc3RyaW5nKSB7XG5cdGRpc3BhdGNoUGVyaW9kaWNNb2RlbEZldGNoVGVybWluYXRlQWN0aW9uKHtcblx0XHR0YXNrSWRcblx0fSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb2xsZWN0aW9uKGNvbmZpZzogQ29sbGVjdGlvbk1ldGhvZENvbmZpZ3VyYXRpb24sIHBhcmFtczogQ29sbGVjdGlvbkxvYWRQYXJhbXMgPSB7fSkge1xuXHRjb25zdCB7XG5cdFx0bW9kZWxOYW1lLFxuXHRcdGlzSW5pdGlhbGl6ZWQsXG5cdFx0cGF0aFBhcmFtczogY29uZmlnUGF0aFBhcmFtcyxcblx0XHRxdWVyeVBhcmFtczogY29uZmlnUXVlcnlQYXJhbXMsXG5cdFx0Y2hhbmdlTW9kZWxTdGF0dXNcblx0fSA9IGNvbmZpZ1xuXHRjb25zdCB7IGlkLCBwYXRoUGFyYW1zLCBxdWVyeVBhcmFtcywgcGVyaW9kLCB0YXNrSWQsIHJlcGxhY2VWYWx1ZSB9ID0gcGFyYW1zXG5cdGNvbnN0IHAgPSBjb25jYXQoW10sIHBhdGhQYXJhbXMgfHwgY29uZmlnUGF0aFBhcmFtcywgaWQgPyBbaWRdIDogW10pXG5cdGlmIChwLmxlbmd0aCAhPT0gZ2V0TWluUmVxdWlyZWRQYXRoUGFyYW1zQ291bnQobW9kZWxOYW1lKSArIChpZCA/IDEgOiAwKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcigncGF0aFBhcmFtcyBsZW5ndGggZG9lcyBub3QgbWF0Y2ggbGVuZ3RoIG9mIHBhdGggY29tcG9uZW50cycpXG5cdH1cblx0aWYgKGlzSW5pdGlhbGl6ZWQpIHtcblx0XHRjaGFuZ2VNb2RlbFN0YXR1cyhNT0RFTF9TVEFUVVMuTE9BRElORywgaWQpXG5cdH1cblx0aWYgKCFwZXJpb2QpIHtcblx0XHRkaXNwYXRjaE1vZGVsRmV0Y2hSZXF1ZXN0KHtcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdG1ldGhvZDogJ0dFVCcsXG5cdFx0XHRwYXRoUGFyYW1zOiBwLFxuXHRcdFx0cXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zIHx8IGNvbmZpZ1F1ZXJ5UGFyYW1zLFxuXHRcdFx0cmVwbGFjZVZhbHVlXG5cdFx0fSlcblx0fSBlbHNlIHtcblx0XHRpZiAoIXRhc2tJZCkgdGhyb3cgbmV3IEVycm9yKCd0YXNrSWQgaXMgcmVxdWlyZWQgZm9yIHBlcmlvZGljIGRhdGEgcmVxdWVzdHMnKVxuXHRcdGRpc3BhdGNoUGVyaW9kaWNNb2RlbEZldGNoUmVxdWVzdCh7XG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRtZXRob2Q6ICdHRVQnLFxuXHRcdFx0cGF0aFBhcmFtczogcCxcblx0XHRcdHF1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtcyB8fCBjb25maWdRdWVyeVBhcmFtcyxcblx0XHRcdHBlcmlvZCxcblx0XHRcdHRhc2tJZCxcblx0XHRcdHJlcGxhY2VWYWx1ZVxuXHRcdH0pXG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb2xsZWN0aW9uSXRlbShjb25maWc6IENvbGxlY3Rpb25NZXRob2RDb25maWd1cmF0aW9uLCBwYXJhbXM6IENvbGxlY3Rpb25JdGVtTG9hZFBhcmFtcyA9IHt9KSB7XG5cdGNvbnN0IHtcblx0XHRtb2RlbE5hbWUsXG5cdFx0aXNJbml0aWFsaXplZCxcblx0XHRwYXRoUGFyYW1zOiBjb25maWdQYXRoUGFyYW1zLFxuXHRcdHF1ZXJ5UGFyYW1zOiBjb25maWdRdWVyeVBhcmFtcyxcblx0XHRjaGFuZ2VNb2RlbFN0YXR1c1xuXHR9ID0gY29uZmlnXG5cdGNvbnN0IHsgcGF0aFBhcmFtcywgcXVlcnlQYXJhbXMsIHBlcmlvZCwgdGFza0lkLCByZXBsYWNlVmFsdWUgfSA9IHBhcmFtc1xuXHRjb25zdCBwID0gcGF0aFBhcmFtcyB8fCBjb25maWdQYXRoUGFyYW1zXG5cdGlmIChwLmxlbmd0aCA8IGdldE1pblJlcXVpcmVkUGF0aFBhcmFtc0NvdW50KG1vZGVsTmFtZSkgKyAxKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdwYXRoUGFyYW1zIGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBsZW5ndGggb2YgcGF0aCBjb21wb25lbnRzJylcblx0fVxuXHRpZiAoaXNJbml0aWFsaXplZCkge1xuXHRcdGNoYW5nZU1vZGVsU3RhdHVzKE1PREVMX1NUQVRVUy5MT0FESU5HKVxuXHR9XG5cdGlmICghcGVyaW9kKSB7XG5cdFx0ZGlzcGF0Y2hNb2RlbEZldGNoUmVxdWVzdCh7XG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRtZXRob2Q6ICdHRVQnLFxuXHRcdFx0cGF0aFBhcmFtczogcCxcblx0XHRcdHF1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtcyB8fCBjb25maWdRdWVyeVBhcmFtcyxcblx0XHRcdHJlcGxhY2VWYWx1ZVxuXHRcdH0pXG5cdH0gZWxzZSB7XG5cdFx0aWYgKCF0YXNrSWQpIHRocm93IG5ldyBFcnJvcigndGFza0lkIGlzIHJlcXVpcmVkIGZvciBwZXJpb2RpYyBkYXRhIHJlcXVlc3RzJylcblx0XHRkaXNwYXRjaFBlcmlvZGljTW9kZWxGZXRjaFJlcXVlc3Qoe1xuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0bWV0aG9kOiAnR0VUJyxcblx0XHRcdHBhdGhQYXJhbXM6IHAsXG5cdFx0XHRxdWVyeVBhcmFtczogcXVlcnlQYXJhbXMgfHwgY29uZmlnUXVlcnlQYXJhbXMsXG5cdFx0XHRwZXJpb2QsXG5cdFx0XHR0YXNrSWQsXG5cdFx0XHRyZXBsYWNlVmFsdWVcblx0XHR9KVxuXHR9XG59XG5cbi8vI2VuZHJlZ2lvbiBMb2FkXG5cbi8vI3JlZ2lvbiBDcmVhdGVcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUl0ZW1JbkNvbGxlY3Rpb24oY29uZmlnOiBDb2xsZWN0aW9uTWV0aG9kQ29uZmlndXJhdGlvbiwgcGFyYW1zOiBDb2xsZWN0aW9uQ3JlYXRlUGFyYW1zKSB7XG5cdGNvbnN0IHsgZ3VpZCwgbW9kZWxOYW1lLCBwYXRoUGFyYW1zLCBxdWVyeVBhcmFtczogY29uZmlnUXVlcnlQYXJhbXMsIGNoYW5nZU1vZGVsU3RhdHVzIH0gPSBjb25maWdcblx0Y29uc3QgeyBib2R5LCBjb250ZW50VHlwZSwgcXVlcnlQYXJhbXMgfSA9IHBhcmFtc1xuXHRpZiAocGF0aFBhcmFtcy5sZW5ndGggPCBnZXRNaW5SZXF1aXJlZFBhdGhQYXJhbXNDb3VudChtb2RlbE5hbWUpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdwYXRoUGFyYW1zIGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBsZW5ndGggb2YgcGF0aCBjb21wb25lbnRzJylcblx0fVxuXHRjaGFuZ2VNb2RlbFN0YXR1cyhNT0RFTF9TVEFUVVMuQ1JFQVRJTkcsIGd1aWQpXG5cdGRpc3BhdGNoTW9kZWxGZXRjaFJlcXVlc3Qoe1xuXHRcdG1vZGVsTmFtZSxcblx0XHRndWlkLFxuXHRcdG1ldGhvZDogJ1BPU1QnLFxuXHRcdGJvZHksXG5cdFx0cGF0aFBhcmFtcyxcblx0XHRjb250ZW50VHlwZSxcblx0XHRxdWVyeVBhcmFtczogcXVlcnlQYXJhbXMgfHwgY29uZmlnUXVlcnlQYXJhbXNcblx0fSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbGxlY3Rpb25JdGVtKFxuXHRtb2RlbDogTW9kZWwsXG5cdGNvbmZpZzogQ29sbGVjdGlvbk1ldGhvZENvbmZpZ3VyYXRpb24sXG5cdHBhcmFtczogQ29sbGVjdGlvbkNyZWF0ZVBhcmFtc1xuKSB7XG5cdGlmIChtb2RlbC5pZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignbW9kZWwgYWxyZWFkeSBleGlzdHMnKVxuXHR9XG5cdGNvbnN0IHsgZ3VpZCwgbW9kZWxOYW1lLCBwYXRoUGFyYW1zLCBxdWVyeVBhcmFtczogY29uZmlnUXVlcnlQYXJhbXMsIGNoYW5nZU1vZGVsU3RhdHVzIH0gPSBjb25maWdcblx0Y29uc3QgeyBib2R5LCBjb250ZW50VHlwZSwgcXVlcnlQYXJhbXMgfSA9IHBhcmFtc1xuXHRpZiAocGF0aFBhcmFtcy5sZW5ndGggPCBnZXRNaW5SZXF1aXJlZFBhdGhQYXJhbXNDb3VudChtb2RlbE5hbWUpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdwYXRoUGFyYW1zIGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBsZW5ndGggb2YgcGF0aCBjb21wb25lbnRzJylcblx0fVxuXHRjaGFuZ2VNb2RlbFN0YXR1cyhNT0RFTF9TVEFUVVMuQ1JFQVRJTkcpXG5cdGRpc3BhdGNoTW9kZWxGZXRjaFJlcXVlc3Qoe1xuXHRcdG1vZGVsTmFtZSxcblx0XHRndWlkLFxuXHRcdG1ldGhvZDogJ1BPU1QnLFxuXHRcdGJvZHksXG5cdFx0cGF0aFBhcmFtcyxcblx0XHRjb250ZW50VHlwZSxcblx0XHRxdWVyeVBhcmFtczogcXVlcnlQYXJhbXMgfHwgY29uZmlnUXVlcnlQYXJhbXNcblx0fSlcbn1cblxuLy8jZW5kcmVnaW9uIENyZWF0ZVxuXG4vLyNyZWdpb24gVXBkYXRlXG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVJdGVtSW5Db2xsZWN0aW9uKGNvbmZpZzogQ29sbGVjdGlvbk1ldGhvZENvbmZpZ3VyYXRpb24sIHBhcmFtczogQ29sbGVjdGlvblVwZGF0ZVBhcmFtcykge1xuXHRjb25zdCB7IGlkLCBib2R5LCBjb250ZW50VHlwZSwgbWV0aG9kLCBxdWVyeVBhcmFtcyB9ID0gcGFyYW1zXG5cdGlmICghaWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYCdpZCcgaXMgcmVxdWlyZWRgKVxuXHR9XG5cdGlmICghYm9keSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgJ2JvZHknIGlzIHJlcXVpcmVkYClcblx0fVxuXHRjb25zdCB7IG1vZGVsTmFtZSwgcGF0aFBhcmFtczogY29uZmlnUGF0aFBhcmFtcywgcXVlcnlQYXJhbXM6IGNvbmZpZ1F1ZXJ5UGFyYW1zLCBjaGFuZ2VNb2RlbFN0YXR1cyB9ID0gY29uZmlnXG5cdGNvbnN0IHBhdGhQYXJhbXMgPSBjb25jYXQoW10sIGNvbmZpZ1BhdGhQYXJhbXMsIFtpZF0pXG5cdGlmIChwYXRoUGFyYW1zLmxlbmd0aCAhPT0gZ2V0TWluUmVxdWlyZWRQYXRoUGFyYW1zQ291bnQobW9kZWxOYW1lKSArIDEpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ3BhdGhQYXJhbXMraWQgbGVuZ3RoIGRvZXMgbm90IG1hdGNoIGxlbmd0aCBvZiBwYXRoIGNvbXBvbmVudHMnKVxuXHR9XG5cdGNvbnN0IG0gPSBtZXRob2QgfHwgJ1BVVCdcblx0Y2hhbmdlTW9kZWxTdGF0dXMoTU9ERUxfU1RBVFVTLlVQREFUSU5HLCBpZClcblx0ZGlzcGF0Y2hNb2RlbEZldGNoUmVxdWVzdCh7XG5cdFx0bW9kZWxOYW1lLFxuXHRcdG1ldGhvZDogbSxcblx0XHRwYXRoUGFyYW1zLFxuXHRcdHF1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtcyB8fCBjb25maWdRdWVyeVBhcmFtcyxcblx0XHRib2R5LFxuXHRcdGNvbnRlbnRUeXBlXG5cdH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVDb2xsZWN0aW9uSXRlbShcblx0bW9kZWw6IE1vZGVsLFxuXHRjb25maWc6IENvbGxlY3Rpb25NZXRob2RDb25maWd1cmF0aW9uLFxuXHRwYXJhbXM6IENvbGxlY3Rpb25JdGVtVXBkYXRlUGFyYW1zXG4pIHtcblx0aWYgKCFtb2RlbC5pZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignbW9kZWwgZG9lcyBub3QgZXhpc3QnKVxuXHR9XG5cdGNvbnN0IHsgYm9keSwgY29udGVudFR5cGUsIG1ldGhvZCwgcXVlcnlQYXJhbXMgfSA9IHBhcmFtc1xuXHRpZiAoIWJvZHkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYCdib2R5JyBpcyByZXF1aXJlZGApXG5cdH1cblx0Y29uc3QgeyBtb2RlbE5hbWUsIHBhdGhQYXJhbXMsIHF1ZXJ5UGFyYW1zOiBjb25maWdRdWVyeVBhcmFtcywgY2hhbmdlTW9kZWxTdGF0dXMgfSA9IGNvbmZpZ1xuXHRpZiAocGF0aFBhcmFtcy5sZW5ndGggPCBnZXRNaW5SZXF1aXJlZFBhdGhQYXJhbXNDb3VudChtb2RlbE5hbWUpICsgMSkge1xuXHRcdHRocm93IG5ldyBFcnJvcigncGF0aFBhcmFtcyBsZW5ndGggZG9lcyBub3QgbWF0Y2ggbGVuZ3RoIG9mIHBhdGggY29tcG9uZW50cycpXG5cdH1cblx0Y29uc3QgbSA9IG1ldGhvZCB8fCAnUFVUJ1xuXHRjaGFuZ2VNb2RlbFN0YXR1cyhNT0RFTF9TVEFUVVMuVVBEQVRJTkcpXG5cdGRpc3BhdGNoTW9kZWxGZXRjaFJlcXVlc3Qoe1xuXHRcdG1vZGVsTmFtZSxcblx0XHRtZXRob2Q6IG0sXG5cdFx0cGF0aFBhcmFtcyxcblx0XHRib2R5LFxuXHRcdGNvbnRlbnRUeXBlLFxuXHRcdHF1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtcyB8fCBjb25maWdRdWVyeVBhcmFtc1xuXHR9KVxufVxuXG4vLyNlbmRyZWdpb24gVXBkYXRlXG5cbi8vI3JlZ2lvbiBEZWxldGVcblxuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUl0ZW1Gcm9tQ29sbGVjdGlvbihjb25maWc6IENvbGxlY3Rpb25NZXRob2RDb25maWd1cmF0aW9uLCBwYXJhbXM6IENvbGxlY3Rpb25EZWxldGVQYXJhbXMpIHtcblx0Y29uc3QgeyBpZCwgYm9keSwgcXVlcnlQYXJhbXMgfSA9IHBhcmFtc1xuXHRpZiAoIWlkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGAnaWQnIGlzIHJlcXVpcmVkYClcblx0fVxuXHRjb25zdCB7IG1vZGVsTmFtZSwgcGF0aFBhcmFtcywgcXVlcnlQYXJhbXM6IGNvbmZpZ1F1ZXJ5UGFyYW1zLCBjaGFuZ2VNb2RlbFN0YXR1cyB9ID0gY29uZmlnXG5cdGNvbnN0IHAgPSBjb25jYXQoW10sIHBhdGhQYXJhbXMsIFtpZF0pXG5cdGlmIChwLmxlbmd0aCAhPT0gZ2V0TWluUmVxdWlyZWRQYXRoUGFyYW1zQ291bnQobW9kZWxOYW1lKSArIDEpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ3BhdGhQYXJhbXMraWQgbGVuZ3RoIGRvZXMgbm90IG1hdGNoIGxlbmd0aCBvZiBwYXRoIGNvbXBvbmVudHMnKVxuXHR9XG5cdGNoYW5nZU1vZGVsU3RhdHVzKE1PREVMX1NUQVRVUy5ERUxFVElORywgaWQpXG5cdGRpc3BhdGNoTW9kZWxGZXRjaFJlcXVlc3Qoe1xuXHRcdG1vZGVsTmFtZSxcblx0XHRtZXRob2Q6ICdERUxFVEUnLFxuXHRcdHBhdGhQYXJhbXM6IHAsXG5cdFx0cXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zIHx8IGNvbmZpZ1F1ZXJ5UGFyYW1zLFxuXHRcdGJvZHlcblx0fSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUNvbGxlY3Rpb25JdGVtKFxuXHRtb2RlbDogTW9kZWwsXG5cdGNvbmZpZzogQ29sbGVjdGlvbk1ldGhvZENvbmZpZ3VyYXRpb24sXG5cdHBhcmFtczogQ29sbGVjdGlvbkl0ZW1EZWxldGVQYXJhbXMgPSB7fVxuKSB7XG5cdGlmICghbW9kZWwuaWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ21vZGVsIGRvZXMgbm90IGV4aXN0Jylcblx0fVxuXHRjb25zdCB7IGJvZHksIHF1ZXJ5UGFyYW1zIH0gPSBwYXJhbXNcblx0Y29uc3QgeyBtb2RlbE5hbWUsIHBhdGhQYXJhbXMsIHF1ZXJ5UGFyYW1zOiBjb25maWdRdWVyeVBhcmFtcywgY2hhbmdlTW9kZWxTdGF0dXMgfSA9IGNvbmZpZ1xuXHRpZiAocGF0aFBhcmFtcy5sZW5ndGggPCBnZXRNaW5SZXF1aXJlZFBhdGhQYXJhbXNDb3VudChtb2RlbE5hbWUpICsgMSkge1xuXHRcdHRocm93IG5ldyBFcnJvcigncGF0aFBhcmFtcyBsZW5ndGggZG9lcyBub3QgbWF0Y2ggbGVuZ3RoIG9mIHBhdGggY29tcG9uZW50cycpXG5cdH1cblx0Y2hhbmdlTW9kZWxTdGF0dXMoTU9ERUxfU1RBVFVTLkRFTEVUSU5HKVxuXHRkaXNwYXRjaE1vZGVsRmV0Y2hSZXF1ZXN0KHtcblx0XHRtb2RlbE5hbWUsXG5cdFx0bWV0aG9kOiAnREVMRVRFJyxcblx0XHRwYXRoUGFyYW1zLFxuXHRcdGJvZHksXG5cdFx0cXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zIHx8IGNvbmZpZ1F1ZXJ5UGFyYW1zXG5cdH0pXG59XG5cbi8vI2VuZHJlZ2lvbiBEZWxldGVcblxuLy8jZW5kcmVnaW9uIENvbGxlY3Rpb24vSXRlbSBDUlVEIE1ldGhvZHNcblxuLy8jcmVnaW9uIEhlbHBlciBNZXRob2RzXG5cbi8qKlxuICogQXV0b21hdGljYWxseSBjYWxsIGBsb2FkYCwgb3IgYGNoYW5nZU1vZGVsU3RhdHVzYCB0byBgUkVBRFlgLlxuICpcbiAqIERvZXMgTk9UIGF1dG9tYXRpY2FsbHkgbG9hZCBpZjpcbiAqICogcGF0aFBhcmFtcyBkb2VzIG5vdCBjb250YWluIGVub3VnaCBpdGVtcy5cbiAqICogbW9kZWwgaXMgYWxyZWFkeSBmZXRjaGluZy5cbiAqICogYXV0byBsb2FkIGlzIGRpc2FibGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZUNvbGxlY3Rpb25JdGVtKFxuXHRtb2RlbDogTW9kZWwsXG5cdGxvYWQ6IChwYXJhbXM/OiBDb2xsZWN0aW9uSXRlbUxvYWRQYXJhbXMpID0+IHZvaWQsXG5cdGNvbmZpZzogQ29sbGVjdGlvbk1ldGhvZENvbmZpZ3VyYXRpb25cbikge1xuXHRjb25zdCB7IG1vZGVsTmFtZSwgcGF0aFBhcmFtcywgZGlzYWJsZUF1dG9Mb2FkLCBjaGFuZ2VNb2RlbFN0YXR1cyB9ID0gY29uZmlnXG5cdGlmIChcblx0XHRwYXRoUGFyYW1zLmxlbmd0aCA9PT0gZ2V0TWluUmVxdWlyZWRQYXRoUGFyYW1zQ291bnQobW9kZWxOYW1lKSArIDEgJiZcblx0XHQhZGlzYWJsZUF1dG9Mb2FkICYmXG5cdFx0KCFtb2RlbC5fbWV0YWRhdGEgfHwgIW1vZGVsLl9tZXRhZGF0YS5pc0ZldGNoaW5nKVxuXHQpIHtcblx0XHRsb2FkKClcblx0fSBlbHNlIHtcblx0XHRjaGFuZ2VNb2RlbFN0YXR1cyhNT0RFTF9TVEFUVVMuUkVBRFkpXG5cdH1cbn1cblxuLyoqXG4gKiBBdXRvbWF0aWNhbGx5IGNhbGwgYGxvYWRgLCBvciBgY2hhbmdlTW9kZWxTdGF0dXNgIHRvIGBSRUFEWWAuXG4gKlxuICogRG9lcyBOT1QgYXV0b21hdGljYWxseSBsb2FkIGlmOlxuICogKiBtb2RlbCBpcyBhbHJlYWR5IGZldGNoaW5nLlxuICogKiBhdXRvIGxvYWQgaXMgZGlzYWJsZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplQ29sbGVjdGlvbihcblx0bW9kZWw6IE1vZGVsLFxuXHRsb2FkOiAocGFyYW1zPzogQ29sbGVjdGlvbkl0ZW1Mb2FkUGFyYW1zKSA9PiB2b2lkLFxuXHRjb25maWc6IENvbGxlY3Rpb25NZXRob2RDb25maWd1cmF0aW9uXG4pIHtcblx0Y29uc3QgeyBkaXNhYmxlQXV0b0xvYWQsIGNoYW5nZU1vZGVsU3RhdHVzIH0gPSBjb25maWdcblx0aWYgKCFkaXNhYmxlQXV0b0xvYWQgJiYgKCFtb2RlbC5fbWV0YWRhdGEgfHwgIW1vZGVsLl9tZXRhZGF0YS5pc0ZldGNoaW5nKSkge1xuXHRcdGxvYWQoKVxuXHR9IGVsc2UgaWYgKGRpc2FibGVBdXRvTG9hZCkge1xuXHRcdGNoYW5nZU1vZGVsU3RhdHVzKE1PREVMX1NUQVRVUy5SRUFEWSlcblx0fVxufVxuXG4vKipcbiAqIFdoZW4gYHBhdGhQYXJhbXNgIG9yIGBxdWVyeVBhcmFtc2AgY2hhbmdlLCBjYWxsIGBsb2FkYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlQ29sbGVjdGlvbkl0ZW1QYXJhbXNDaGFuZ2UoXG5cdG1vZGVsTmFtZTogc3RyaW5nLFxuXHRwcmV2TW9kZWxOYW1lOiBzdHJpbmcsXG5cdHBhdGhQYXJhbXM6IEFycmF5PHN0cmluZyB8IG51bWJlcj4sXG5cdHByZXZQYXRoUGFyYW1zOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+IHwgdW5kZWZpbmVkLFxuXHRxdWVyeVBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gfCB1bmRlZmluZWQsXG5cdHByZXZRdWVyeVBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gfCB1bmRlZmluZWQsXG5cdGxvYWQ6IChwYXJhbXM/OiBDb2xsZWN0aW9uSXRlbUxvYWRQYXJhbXMpID0+IHZvaWRcbikge1xuXHRpZiAoXG5cdFx0bW9kZWxOYW1lICE9PSBwcmV2TW9kZWxOYW1lIHx8XG5cdFx0KHBhdGhQYXJhbXMubGVuZ3RoID09PSBnZXRNaW5SZXF1aXJlZFBhdGhQYXJhbXNDb3VudChtb2RlbE5hbWUpICsgMSAmJiAhaXNFcXVhbChwcmV2UGF0aFBhcmFtcywgcGF0aFBhcmFtcykpIHx8XG5cdFx0IWlzRXF1YWwocHJldlF1ZXJ5UGFyYW1zLCBxdWVyeVBhcmFtcylcblx0KSB7XG5cdFx0bG9hZCh7IHBhdGhQYXJhbXMsIHF1ZXJ5UGFyYW1zIH0pXG5cdH1cbn1cblxuLyoqXG4gKiBXaGVuIGBwYXRoUGFyYW1zYCBvciBgcXVlcnlQYXJhbXNgIGNoYW5nZSwgY2FsbCBgbG9hZGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZUNvbGxlY3Rpb25QYXJhbXNDaGFuZ2UoXG5cdG1vZGVsTmFtZTogc3RyaW5nLFxuXHRwcmV2TW9kZWxOYW1lOiBzdHJpbmcsXG5cdHBhdGhQYXJhbXM6IEFycmF5PHN0cmluZyB8IG51bWJlcj4sXG5cdHByZXZQYXRoUGFyYW1zOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+IHwgdW5kZWZpbmVkLFxuXHRxdWVyeVBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gfCB1bmRlZmluZWQsXG5cdHByZXZRdWVyeVBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gfCB1bmRlZmluZWQsXG5cdGxvYWQ6IChwYXJhbXM/OiBDb2xsZWN0aW9uTG9hZFBhcmFtcykgPT4gdm9pZFxuKSB7XG5cdGlmIChcblx0XHRtb2RlbE5hbWUgIT09IHByZXZNb2RlbE5hbWUgfHxcblx0XHQocGF0aFBhcmFtcy5sZW5ndGggPiAwICYmICFpc0VxdWFsKHByZXZQYXRoUGFyYW1zLCBwYXRoUGFyYW1zKSkgfHxcblx0XHQhaXNFcXVhbChwcmV2UXVlcnlQYXJhbXMsIHF1ZXJ5UGFyYW1zKVxuXHQpIHtcblx0XHRsb2FkKHsgcGF0aFBhcmFtcywgcXVlcnlQYXJhbXMgfSlcblx0fVxufVxuXG4vKipcbiAqIERlbGV0ZSB0aGUgZ3VpZCBpbiB0aGUgbW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFudXBDb2xsZWN0aW9uR3VpZEtleTxUTW9kZWwgZXh0ZW5kcyBNb2RlbD4oXG5cdG1vZGVsOiBNb2RlbENvbGxlY3Rpb248VE1vZGVsPixcblx0Y29uZmlnOiBDb2xsZWN0aW9uTWV0aG9kQ29uZmlndXJhdGlvblxuKSB7XG5cdGNvbnN0IHsgZ3VpZCwgbW9kZWxOYW1lLCBwYXRoUGFyYW1zIH0gPSBjb25maWdcblx0aWYgKGluY2x1ZGVzKE9iamVjdC5rZXlzKG1vZGVsKSwgZ3VpZCkpIHtcblx0XHRjb25zdCBtb2RlbE5hbWVzID0gbW9kZWxOYW1lLnNwbGl0KCcuJylcblx0XHRjb25zdCB0ZW1wUGF0aFBhcmFtcyA9IHBhdGhQYXJhbXMuc2xpY2UoKVxuXHRcdC8vIHNob3VsZCBpbmNsdWRlIHRoZSBndWlkIGF0IHRoZSBlbmRcblx0XHR0ZW1wUGF0aFBhcmFtcy5wdXNoKGd1aWQpXG5cdFx0aWYgKG1vZGVsTmFtZXMubGVuZ3RoID09PSB0ZW1wUGF0aFBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdGxldCBwYXRoID0gJydcblx0XHRcdG1vZGVsTmFtZXMuZm9yRWFjaCgobSwgaSkgPT4ge1xuXHRcdFx0XHRpZiAoaSA9PT0gMCkge1xuXHRcdFx0XHRcdHBhdGggKz0gYCR7bX0uJHt0ZW1wUGF0aFBhcmFtc1tpXX1gXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGF0aCArPSBgLiR7bX0uJHt0ZW1wUGF0aFBhcmFtc1tpXX1gXG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHRkaXNwYXRjaE1vZGVsUmVtb3ZlS2V5QWN0aW9uKHtcblx0XHRcdFx0bW9kZWxQYXRoOiBwYXRoXG5cdFx0XHR9KVxuXHRcdH1cblx0fVxufVxuXG4vLyNlbmRyZWdpb24gSGVscGVyIE1ldGhvZHNcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLGNBQUEsR0FBQUosT0FBQTtBQW9CQSxJQUFBSyxNQUFBLEdBQUFMLE9BQUE7QUFFQTs7QUFFQSxNQUFNTSxhQUFhLEdBQUcsSUFBQUMsbUJBQVUsRUFDL0IsQ0FBQ0MsVUFBOEMsRUFBRUMsZ0JBQW9DLEVBQUVDLFNBQWlCLEtBQ3ZHRixVQUFVLElBQUksSUFBQUcsd0NBQWlDLEVBQUNGLGdCQUFnQixFQUFFQyxTQUFTLENBQzdFLENBQUM7O0FBRUQ7QUFDQSxNQUFNRSxhQUFhLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFNBQVNDLDZCQUE2QkEsQ0FDNUNDLE1BQXNDLEVBQ0s7RUFDM0MsTUFBTTtJQUFFQyxJQUFJO0lBQUVQLFNBQVM7SUFBRUYsVUFBVTtJQUFFQyxnQkFBZ0I7SUFBRVM7RUFBTSxDQUFDLEdBQUdGLE1BQU07RUFDdkUsTUFBTUcsbUJBQW1CLEdBQUcsSUFBQUMsb0NBQTZCLEVBQUNWLFNBQVMsQ0FBQztFQUNw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RUFDbERsQyxXQUFrRSxFQUNsRW1DLGVBQXNFLEVBQ3RFVCxJQUE2QyxFQUM1QztFQUNELElBQ0NqRSxTQUFTLEtBQUt3RSxhQUFhLElBQzFCMUUsVUFBVSxDQUFDaUIsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUE0RCxlQUFPLEVBQUNGLGNBQWMsRUFBRTNFLFVBQVUsQ0FBRSxJQUMvRCxDQUFDLElBQUE2RSxlQUFPLEVBQUNELGVBQWUsRUFBRW5DLFdBQVcsQ0FBQyxFQUNyQztJQUNEMEIsSUFBSSxDQUFDO01BQUVuRSxVQUFVO01BQUV5QztJQUFZLENBQUMsQ0FBQztFQUNsQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNPLFNBQVNzQyx3QkFBd0JBLENBQ3ZDL0QsS0FBOEIsRUFDOUJvQixNQUFxQyxFQUNwQztFQUNELE1BQU07SUFBRTNCLElBQUk7SUFBRVAsU0FBUztJQUFFRjtFQUFXLENBQUMsR0FBR29DLE1BQU07RUFDOUMsSUFBSSxJQUFBNEMsZ0JBQVEsRUFBQzNFLE1BQU0sQ0FBQ3dCLElBQUksQ0FBQ2IsS0FBSyxDQUFDLEVBQUVQLElBQUksQ0FBQyxFQUFFO0lBQ3ZDLE1BQU13RSxVQUFVLEdBQUcvRSxTQUFTLENBQUNnRixLQUFLLENBQUMsR0FBRyxDQUFDO0lBQ3ZDLE1BQU1DLGNBQWMsR0FBR25GLFVBQVUsQ0FBQ29GLEtBQUssQ0FBQyxDQUFDO0lBQ3pDO0lBQ0FELGNBQWMsQ0FBQ0UsSUFBSSxDQUFDNUUsSUFBSSxDQUFDO0lBQ3pCLElBQUl3RSxVQUFVLENBQUNoRSxNQUFNLEtBQUtrRSxjQUFjLENBQUNsRSxNQUFNLEVBQUU7TUFDaEQsSUFBSXFFLElBQUksR0FBRyxFQUFFO01BQ2JMLFVBQVUsQ0FBQ00sT0FBTyxDQUFDLENBQUM1RCxDQUFDLEVBQUU2RCxDQUFDLEtBQUs7UUFDNUIsSUFBSUEsQ0FBQyxLQUFLLENBQUMsRUFBRTtVQUNaRixJQUFJLElBQUksR0FBRzNELENBQUMsSUFBSXdELGNBQWMsQ0FBQ0ssQ0FBQyxDQUFDLEVBQUU7UUFDcEMsQ0FBQyxNQUFNO1VBQ05GLElBQUksSUFBSSxJQUFJM0QsQ0FBQyxJQUFJd0QsY0FBYyxDQUFDSyxDQUFDLENBQUMsRUFBRTtRQUNyQztNQUNELENBQUMsQ0FBQztNQUNGLElBQUFDLDJDQUE0QixFQUFDO1FBQzVCQyxTQUFTLEVBQUVKO01BQ1osQ0FBQyxDQUFDO0lBQ0g7RUFDRDtBQUNEOztBQUVBIiwiaWdub3JlTGlzdCI6W119
|