@payloadcms/ui 3.0.0-alpha.15 → 3.0.0-alpha.16
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/dist/@types/assets.d.js +0 -1
- package/dist/config.js +2 -12
- package/dist/elements/ArrayAction/index.js +25 -81
- package/dist/elements/ArrayAction/types.js +2 -5
- package/dist/elements/Autosave/index.js +37 -92
- package/dist/elements/Autosave/types.js +2 -5
- package/dist/elements/Banner/index.js +10 -34
- package/dist/elements/Banner/types.js +2 -5
- package/dist/elements/Button/index.js +30 -89
- package/dist/elements/Button/types.js +2 -5
- package/dist/elements/Card/index.js +9 -24
- package/dist/elements/Card/types.js +2 -5
- package/dist/elements/CodeEditor/CodeEditor.js +10 -25
- package/dist/elements/CodeEditor/index.js +8 -59
- package/dist/elements/CodeEditor/types.js +2 -5
- package/dist/elements/Collapsible/index.js +26 -82
- package/dist/elements/Collapsible/provider.js +7 -66
- package/dist/elements/Collapsible/types.js +2 -5
- package/dist/elements/ColumnSelector/index.js +20 -76
- package/dist/elements/ColumnSelector/types.js +2 -5
- package/dist/elements/CopyToClipboard/index.js +14 -65
- package/dist/elements/CopyToClipboard/types.js +2 -5
- package/dist/elements/DatePicker/DatePicker.js +19 -75
- package/dist/elements/DatePicker/index.js +8 -59
- package/dist/elements/DatePicker/types.js +2 -5
- package/dist/elements/DeleteDocument/index.js +36 -86
- package/dist/elements/DeleteDocument/types.js +2 -5
- package/dist/elements/DeleteMany/index.js +38 -102
- package/dist/elements/DeleteMany/types.js +2 -5
- package/dist/elements/DocumentControls/index.js +46 -102
- package/dist/elements/DocumentDrawer/DrawerContent.js +62 -114
- package/dist/elements/DocumentDrawer/index.js +33 -98
- package/dist/elements/DocumentDrawer/types.js +2 -5
- package/dist/elements/DocumentFields/index.js +16 -31
- package/dist/elements/DocumentHeader/Tabs/ShouldRenderTabs.js +4 -14
- package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js +9 -24
- package/dist/elements/DocumentHeader/Tabs/Tab/index.js +9 -68
- package/dist/elements/DocumentHeader/Tabs/getCustomViews.js +5 -15
- package/dist/elements/DocumentHeader/Tabs/getViewConfig.js +2 -12
- package/dist/elements/DocumentHeader/Tabs/index.js +18 -33
- package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.js +8 -23
- package/dist/elements/DocumentHeader/Tabs/tabs/index.js +5 -23
- package/dist/elements/DocumentHeader/index.js +10 -66
- package/dist/elements/DraggableSortable/DraggableSortableItem/index.js +7 -66
- package/dist/elements/DraggableSortable/DraggableSortableItem/types.js +2 -5
- package/dist/elements/DraggableSortable/index.js +15 -66
- package/dist/elements/DraggableSortable/types.js +2 -5
- package/dist/elements/DraggableSortable/useDraggableSortable/index.js +4 -14
- package/dist/elements/DraggableSortable/useDraggableSortable/types.js +2 -5
- package/dist/elements/Drawer/index.js +32 -94
- package/dist/elements/Drawer/types.js +2 -5
- package/dist/elements/Drawer/useDrawerSlug.js +8 -18
- package/dist/elements/Dropzone/index.js +20 -35
- package/dist/elements/DuplicateDocument/index.js +33 -83
- package/dist/elements/DuplicateDocument/types.js +2 -5
- package/dist/elements/EditMany/index.js +72 -128
- package/dist/elements/EditMany/types.js +2 -5
- package/dist/elements/EditUpload/index.js +66 -122
- package/dist/elements/ErrorPill/index.js +7 -22
- package/dist/elements/ErrorPill/types.js +2 -5
- package/dist/elements/FieldSelect/index.js +23 -79
- package/dist/elements/FileDetails/FileMeta/index.js +19 -75
- package/dist/elements/FileDetails/FileMeta/types.js +2 -5
- package/dist/elements/FileDetails/index.js +15 -30
- package/dist/elements/FileDetails/types.js +2 -5
- package/dist/elements/GenerateConfirmation/index.js +22 -37
- package/dist/elements/GenerateConfirmation/types.js +2 -5
- package/dist/elements/GetFilterOptions/index.js +18 -33
- package/dist/elements/Gutter/index.js +5 -56
- package/dist/elements/Hamburger/index.js +18 -33
- package/dist/elements/Header/index.js +39 -95
- package/dist/elements/HydrateClientUser/index.js +6 -16
- package/dist/elements/IDLabel/index.js +5 -20
- package/dist/elements/ListControls/getTextFieldsToBeSearched.js +6 -16
- package/dist/elements/ListControls/index.js +52 -104
- package/dist/elements/ListControls/types.js +2 -5
- package/dist/elements/ListDrawer/DrawerContent.js +72 -128
- package/dist/elements/ListDrawer/index.js +32 -100
- package/dist/elements/ListDrawer/types.js +2 -5
- package/dist/elements/ListSelection/index.js +11 -62
- package/dist/elements/Loading/index.js +25 -51
- package/dist/elements/LoadingOverlay/index.js +17 -79
- package/dist/elements/LoadingOverlay/reducer.js +3 -21
- package/dist/elements/LoadingOverlay/types.js +2 -5
- package/dist/elements/Localizer/LocalizerLabel/index.js +15 -30
- package/dist/elements/Localizer/index.js +24 -80
- package/dist/elements/Logout/index.js +13 -28
- package/dist/elements/Nav/NavHamburger/index.js +8 -23
- package/dist/elements/Nav/NavToggler/index.js +13 -28
- package/dist/elements/Nav/NavWrapper/index.js +8 -23
- package/dist/elements/Nav/context.js +20 -82
- package/dist/elements/Nav/index.js +36 -51
- package/dist/elements/NavGroup/index.js +21 -77
- package/dist/elements/Pagination/ClickableArrow/index.js +7 -22
- package/dist/elements/Pagination/ClickableArrow/types.js +2 -5
- package/dist/elements/Pagination/Page/index.js +4 -19
- package/dist/elements/Pagination/Page/types.js +2 -5
- package/dist/elements/Pagination/Separator/index.js +4 -19
- package/dist/elements/Pagination/index.js +20 -35
- package/dist/elements/Pagination/types.js +2 -5
- package/dist/elements/PerPage/index.js +28 -83
- package/dist/elements/Pill/index.js +16 -40
- package/dist/elements/Pill/types.js +2 -5
- package/dist/elements/Popup/PopupButtonList/index.js +10 -75
- package/dist/elements/Popup/PopupTrigger/index.js +6 -21
- package/dist/elements/Popup/PopupTrigger/types.js +2 -5
- package/dist/elements/Popup/index.js +29 -80
- package/dist/elements/Popup/types.js +2 -5
- package/dist/elements/PreviewButton/index.js +22 -73
- package/dist/elements/PreviewSizes/index.js +24 -80
- package/dist/elements/Publish/index.js +23 -79
- package/dist/elements/PublishMany/index.js +37 -93
- package/dist/elements/PublishMany/types.js +2 -5
- package/dist/elements/ReactSelect/ClearIndicator/index.js +7 -22
- package/dist/elements/ReactSelect/Control/index.js +5 -20
- package/dist/elements/ReactSelect/MultiValue/index.js +8 -23
- package/dist/elements/ReactSelect/MultiValueLabel/index.js +7 -22
- package/dist/elements/ReactSelect/MultiValueRemove/index.js +12 -27
- package/dist/elements/ReactSelect/SingleValue/index.js +5 -20
- package/dist/elements/ReactSelect/ValueContainer/index.js +7 -22
- package/dist/elements/ReactSelect/index.js +45 -60
- package/dist/elements/ReactSelect/types.js +2 -5
- package/dist/elements/RenderCustomComponent/index.js +5 -20
- package/dist/elements/RenderCustomComponent/types.js +2 -5
- package/dist/elements/RenderTitle/index.js +9 -24
- package/dist/elements/RenderTitle/types.js +2 -5
- package/dist/elements/Save/index.js +16 -72
- package/dist/elements/SaveDraft/index.js +24 -80
- package/dist/elements/SearchFilter/index.js +31 -86
- package/dist/elements/SearchFilter/types.js +2 -5
- package/dist/elements/SelectAll/index.js +13 -28
- package/dist/elements/SelectRow/index.js +10 -25
- package/dist/elements/ShimmerEffect/index.js +12 -71
- package/dist/elements/SortColumn/index.js +27 -90
- package/dist/elements/SortColumn/types.js +2 -5
- package/dist/elements/SortComplex/index.js +35 -90
- package/dist/elements/SortComplex/types.js +2 -5
- package/dist/elements/Status/index.js +38 -88
- package/dist/elements/StayLoggedIn/index.js +20 -34
- package/dist/elements/StayLoggedIn/types.js +2 -5
- package/dist/elements/StepNav/SetStepNav.js +6 -16
- package/dist/elements/StepNav/index.js +27 -93
- package/dist/elements/StepNav/types.js +2 -5
- package/dist/elements/Table/TableCellProvider/index.js +7 -30
- package/dist/elements/Table/index.js +15 -38
- package/dist/elements/Table/types.js +2 -5
- package/dist/elements/TableColumns/buildColumns.js +7 -22
- package/dist/elements/TableColumns/columnReducer.js +2 -12
- package/dist/elements/TableColumns/index.js +24 -86
- package/dist/elements/Thumbnail/index.js +12 -68
- package/dist/elements/Thumbnail/types.js +2 -5
- package/dist/elements/ThumbnailCard/index.js +13 -28
- package/dist/elements/ThumbnailCard/types.js +2 -5
- package/dist/elements/Tooltip/index.js +14 -65
- package/dist/elements/Tooltip/types.js +2 -5
- package/dist/elements/Translation/index.js +7 -58
- package/dist/elements/UnpublishMany/index.js +37 -93
- package/dist/elements/UnpublishMany/types.js +2 -5
- package/dist/elements/Upload/index.js +57 -127
- package/dist/elements/Upload/types.js +2 -5
- package/dist/elements/ViewDescription/index.js +12 -27
- package/dist/elements/ViewDescription/types.js +4 -19
- package/dist/elements/WhereBuilder/Condition/Date/index.js +6 -21
- package/dist/elements/WhereBuilder/Condition/Date/types.js +2 -5
- package/dist/elements/WhereBuilder/Condition/Number/index.js +7 -22
- package/dist/elements/WhereBuilder/Condition/Number/types.js +2 -5
- package/dist/elements/WhereBuilder/Condition/Relationship/index.js +28 -84
- package/dist/elements/WhereBuilder/Condition/Relationship/optionsReducer.js +5 -15
- package/dist/elements/WhereBuilder/Condition/Relationship/types.js +2 -5
- package/dist/elements/WhereBuilder/Condition/Select/index.js +15 -30
- package/dist/elements/WhereBuilder/Condition/Select/types.js +2 -5
- package/dist/elements/WhereBuilder/Condition/Text/index.js +7 -22
- package/dist/elements/WhereBuilder/Condition/Text/types.js +2 -5
- package/dist/elements/WhereBuilder/Condition/index.js +37 -93
- package/dist/elements/WhereBuilder/Condition/types.js +2 -5
- package/dist/elements/WhereBuilder/field-types.js +2 -12
- package/dist/elements/WhereBuilder/index.js +43 -98
- package/dist/elements/WhereBuilder/reducer.js +2 -12
- package/dist/elements/WhereBuilder/transformWhereQuery.js +6 -12
- package/dist/elements/WhereBuilder/types.js +2 -5
- package/dist/elements/WhereBuilder/validateWhereQuery.js +4 -14
- package/dist/exports/assets.js +3 -26
- package/dist/exports/elements.js +48 -249
- package/dist/exports/forms.js +38 -173
- package/dist/exports/graphics.js +3 -26
- package/dist/exports/hooks.js +10 -54
- package/dist/exports/icons.js +18 -81
- package/dist/exports/index.js +10 -27
- package/dist/exports/providers.js +24 -118
- package/dist/exports/templates.js +3 -21
- package/dist/exports/types.js +2 -5
- package/dist/exports/utilities.js +11 -61
- package/dist/forms/Error/index.js +11 -26
- package/dist/forms/FieldDescription/index.js +9 -24
- package/dist/forms/FieldDescription/types.js +2 -5
- package/dist/forms/FieldPathProvider/index.js +7 -30
- package/dist/forms/FieldPathProvider/types.js +2 -5
- package/dist/forms/Form/buildFieldSchemaMap.js +14 -14
- package/dist/forms/Form/buildInitialState.js +2 -12
- package/dist/forms/Form/context.js +17 -67
- package/dist/forms/Form/createNestedFieldPath.js +5 -15
- package/dist/forms/Form/errorMessages.js +2 -12
- package/dist/forms/Form/fieldReducer.js +25 -38
- package/dist/forms/Form/getDataByPath.js +4 -14
- package/dist/forms/Form/getSiblingData.js +6 -21
- package/dist/forms/Form/index.js +84 -140
- package/dist/forms/Form/initContextState.js +2 -12
- package/dist/forms/Form/mergeServerFormState.js +4 -14
- package/dist/forms/Form/reduceFieldsToValues.js +4 -14
- package/dist/forms/Form/rows.js +3 -21
- package/dist/forms/Form/types.js +2 -5
- package/dist/forms/Label/index.js +9 -24
- package/dist/forms/NullifyField/index.js +15 -71
- package/dist/forms/RenderFields/RenderField.js +6 -21
- package/dist/forms/RenderFields/index.js +13 -28
- package/dist/forms/RenderFields/types.js +2 -5
- package/dist/forms/RowLabel/index.js +13 -28
- package/dist/forms/RowLabel/types.js +4 -19
- package/dist/forms/Submit/index.js +11 -62
- package/dist/forms/WatchChildErrors/buildPathSegments.js +2 -12
- package/dist/forms/WatchChildErrors/getFieldStateFromPaths.js +2 -12
- package/dist/forms/WatchChildErrors/getNestedFieldState.js +5 -14
- package/dist/forms/WatchChildErrors/index.js +11 -26
- package/dist/forms/fields/Array/ArrayRow.js +24 -39
- package/dist/forms/fields/Array/index.js +59 -115
- package/dist/forms/fields/Array/types.js +2 -5
- package/dist/forms/fields/Blocks/BlockRow.js +27 -42
- package/dist/forms/fields/Blocks/BlocksDrawer/BlockSearch/index.js +10 -25
- package/dist/forms/fields/Blocks/BlocksDrawer/index.js +29 -85
- package/dist/forms/fields/Blocks/BlocksDrawer/types.js +2 -5
- package/dist/forms/fields/Blocks/RowActions.js +12 -27
- package/dist/forms/fields/Blocks/SectionTitle/index.js +10 -25
- package/dist/forms/fields/Blocks/SectionTitle/types.js +2 -5
- package/dist/forms/fields/Blocks/index.js +64 -120
- package/dist/forms/fields/Blocks/types.js +2 -5
- package/dist/forms/fields/Checkbox/Input.js +11 -34
- package/dist/forms/fields/Checkbox/index.js +19 -75
- package/dist/forms/fields/Checkbox/types.js +2 -5
- package/dist/forms/fields/Code/index.js +15 -71
- package/dist/forms/fields/Code/types.js +2 -5
- package/dist/forms/fields/Collapsible/index.js +31 -87
- package/dist/forms/fields/Collapsible/types.js +2 -5
- package/dist/forms/fields/ConfirmPassword/index.js +19 -75
- package/dist/forms/fields/ConfirmPassword/types.js +2 -5
- package/dist/forms/fields/DateTime/index.js +18 -74
- package/dist/forms/fields/DateTime/types.js +2 -5
- package/dist/forms/fields/Email/index.js +19 -83
- package/dist/forms/fields/Email/types.js +2 -5
- package/dist/forms/fields/Group/index.js +32 -88
- package/dist/forms/fields/Group/provider.js +7 -69
- package/dist/forms/fields/Group/types.js +2 -5
- package/dist/forms/fields/HiddenInput/index.js +8 -64
- package/dist/forms/fields/HiddenInput/types.js +2 -5
- package/dist/forms/fields/JSON/index.js +20 -76
- package/dist/forms/fields/JSON/types.js +2 -5
- package/dist/forms/fields/Number/index.js +26 -82
- package/dist/forms/fields/Number/types.js +2 -5
- package/dist/forms/fields/Password/index.js +15 -79
- package/dist/forms/fields/Password/types.js +2 -5
- package/dist/forms/fields/Point/index.js +24 -80
- package/dist/forms/fields/Point/types.js +2 -5
- package/dist/forms/fields/RadioGroup/Radio/index.js +13 -28
- package/dist/forms/fields/RadioGroup/index.js +23 -79
- package/dist/forms/fields/RadioGroup/types.js +2 -5
- package/dist/forms/fields/Relationship/AddNew/index.js +43 -99
- package/dist/forms/fields/Relationship/AddNew/types.js +2 -5
- package/dist/forms/fields/Relationship/AddNew/useRelatedCollections.js +6 -16
- package/dist/forms/fields/Relationship/createRelationMap.js +2 -12
- package/dist/forms/fields/Relationship/findOptionsByValue.js +2 -12
- package/dist/forms/fields/Relationship/index.js +64 -120
- package/dist/forms/fields/Relationship/optionsReducer.js +7 -17
- package/dist/forms/fields/Relationship/select-components/MultiValueLabel/index.js +21 -72
- package/dist/forms/fields/Relationship/select-components/SingleValue/index.js +22 -73
- package/dist/forms/fields/Relationship/types.js +2 -5
- package/dist/forms/fields/RichText/index.js +2 -12
- package/dist/forms/fields/RichText/types.js +2 -5
- package/dist/forms/fields/Row/index.js +11 -26
- package/dist/forms/fields/Row/provider.js +7 -69
- package/dist/forms/fields/Row/types.js +2 -5
- package/dist/forms/fields/Select/index.js +24 -88
- package/dist/forms/fields/Select/types.js +2 -5
- package/dist/forms/fields/Tabs/Tab/index.js +13 -64
- package/dist/forms/fields/Tabs/index.js +35 -91
- package/dist/forms/fields/Tabs/provider.js +7 -69
- package/dist/forms/fields/Tabs/types.js +2 -5
- package/dist/forms/fields/Text/Input.js +14 -29
- package/dist/forms/fields/Text/index.js +23 -79
- package/dist/forms/fields/Text/types.js +2 -5
- package/dist/forms/fields/Textarea/Input.js +15 -30
- package/dist/forms/fields/Textarea/index.js +20 -76
- package/dist/forms/fields/Textarea/types.js +2 -5
- package/dist/forms/fields/UI/index.js +2 -12
- package/dist/forms/fields/Upload/Input.js +35 -91
- package/dist/forms/fields/Upload/index.js +14 -70
- package/dist/forms/fields/Upload/types.js +2 -5
- package/dist/forms/fields/getFilterOptionsQuery.js +2 -12
- package/dist/forms/fields/index.js +50 -65
- package/dist/forms/fields/shared.js +7 -21
- package/dist/forms/useField/index.js +25 -40
- package/dist/forms/useField/types.js +2 -5
- package/dist/forms/utilities/buildStateFromSchema/addFieldStatePromise.js +21 -33
- package/dist/forms/utilities/buildStateFromSchema/buildStateFromSchema.spec.js +5 -14
- package/dist/forms/utilities/buildStateFromSchema/index.js +4 -14
- package/dist/forms/utilities/buildStateFromSchema/iterateFields.js +8 -16
- package/dist/forms/withCondition/WatchCondition.js +7 -57
- package/dist/forms/withCondition/index.js +8 -23
- package/dist/graphics/Account/Default/index.js +7 -22
- package/dist/graphics/Account/Gravatar/index.js +10 -25
- package/dist/graphics/Account/index.js +15 -30
- package/dist/graphics/DefaultBlockImage/index.js +11 -62
- package/dist/graphics/ExternalLink/index.js +5 -20
- package/dist/graphics/File/index.js +7 -22
- package/dist/graphics/Icon/index.js +13 -28
- package/dist/graphics/Logo/index.js +15 -30
- package/dist/graphics/Search/index.js +6 -21
- package/dist/hooks/useAdminThumbnail.js +5 -15
- package/dist/hooks/useDebounce.js +6 -16
- package/dist/hooks/useDebouncedCallback.js +10 -15
- package/dist/hooks/useDebouncedEffect.js +6 -16
- package/dist/hooks/useDelay.js +7 -58
- package/dist/hooks/useDelayedRender.js +11 -62
- package/dist/hooks/useHotkey.js +10 -20
- package/dist/hooks/useIntersect.js +7 -17
- package/dist/hooks/usePayloadAPI.js +17 -32
- package/dist/hooks/useResize.js +5 -15
- package/dist/hooks/useThrottledEffect.js +5 -15
- package/dist/hooks/useThumbnail.js +8 -18
- package/dist/hooks/useUseAsTitle.js +6 -16
- package/dist/icons/Calendar/index.js +8 -23
- package/dist/icons/Check/index.js +6 -21
- package/dist/icons/Chevron/index.js +5 -20
- package/dist/icons/CloseMenu/index.js +6 -21
- package/dist/icons/CodeBlock/index.js +5 -20
- package/dist/icons/Copy/index.js +6 -21
- package/dist/icons/DragHandle/index.js +10 -25
- package/dist/icons/Edit/index.js +7 -22
- package/dist/icons/Line/index.js +5 -20
- package/dist/icons/Link/index.js +6 -21
- package/dist/icons/LogOut/index.js +7 -22
- package/dist/icons/Menu/index.js +7 -22
- package/dist/icons/MinimizeMaximize/index.js +12 -63
- package/dist/icons/More/index.js +7 -22
- package/dist/icons/Plus/index.js +6 -21
- package/dist/icons/Search/index.js +6 -21
- package/dist/icons/Swap/index.js +8 -23
- package/dist/icons/X/index.js +6 -21
- package/dist/index.js +2 -19
- package/dist/providers/ActionsProvider/SetViewActions/index.js +6 -16
- package/dist/providers/ActionsProvider/index.js +11 -70
- package/dist/providers/Auth/HydrateClientUser/index.js +6 -16
- package/dist/providers/Auth/index.js +52 -116
- package/dist/providers/Auth/types.js +2 -5
- package/dist/providers/ClientFunction/index.js +14 -40
- package/dist/providers/ComponentMapProvider/index.js +9 -68
- package/dist/providers/Config/index.js +6 -65
- package/dist/providers/CustomProvider/index.js +9 -24
- package/dist/providers/DocumentEvents/index.js +7 -66
- package/dist/providers/DocumentEvents/types.js +2 -5
- package/dist/providers/DocumentInfo/SetDocumentInfo/index.js +9 -19
- package/dist/providers/DocumentInfo/index.js +42 -100
- package/dist/providers/DocumentInfo/types.js +2 -5
- package/dist/providers/EditDepth/index.js +5 -67
- package/dist/providers/FormQueryParams/index.js +7 -69
- package/dist/providers/ListInfo/index.js +9 -68
- package/dist/providers/ListInfo/types.js +2 -5
- package/dist/providers/Locale/index.js +28 -87
- package/dist/providers/OperationProvider/index.js +5 -67
- package/dist/providers/Params/index.js +9 -67
- package/dist/providers/Portal/index.js +4 -19
- package/dist/providers/Preferences/index.js +25 -89
- package/dist/providers/Root/index.js +31 -82
- package/dist/providers/SearchParams/index.js +14 -77
- package/dist/providers/SearchParams/types.js +2 -5
- package/dist/providers/SelectionProvider/index.js +23 -90
- package/dist/providers/Theme/index.js +11 -73
- package/dist/providers/Theme/types.js +2 -5
- package/dist/providers/Theme/utilities.js +3 -21
- package/dist/providers/Translation/index.js +8 -67
- package/dist/templates/Default/NavHamburger/index.js +7 -22
- package/dist/templates/Default/Wrapper/index.js +7 -22
- package/dist/templates/Default/index.js +17 -68
- package/dist/templates/Default/types.js +2 -5
- package/dist/templates/Minimal/index.js +6 -21
- package/dist/templates/Minimal/types.js +2 -5
- package/dist/utilities/api.js +4 -19
- package/dist/utilities/arraysHaveSameStrings.js +2 -12
- package/dist/utilities/buildComponentMap/index.js +16 -31
- package/dist/utilities/buildComponentMap/mapActions.js +5 -20
- package/dist/utilities/buildComponentMap/mapFields.js +34 -90
- package/dist/utilities/buildComponentMap/types.js +2 -5
- package/dist/utilities/buildFieldSchemaMap/index.js +5 -15
- package/dist/utilities/buildFieldSchemaMap/traverseFields.js +9 -19
- package/dist/utilities/buildFieldSchemaMap/types.js +2 -5
- package/dist/utilities/canUseDOM.js +2 -12
- package/dist/utilities/findLocaleFromCode.js +4 -12
- package/dist/utilities/formatDate/getSupportedDateLocale.js +2 -12
- package/dist/utilities/formatDate/index.js +10 -69
- package/dist/utilities/formatDocTitle.js +6 -16
- package/dist/utilities/formatFields.js +3 -13
- package/dist/utilities/getFormState.js +2 -12
- package/dist/utilities/getOffsetTop.js +2 -12
- package/dist/utilities/getRequestLanguage.js +2 -12
- package/dist/utilities/getSupportedMonacoLocale.js +2 -12
- package/dist/utilities/groupNavItems.js +7 -25
- package/dist/utilities/scrollToID.js +2 -12
- package/dist/utilities/setsAreEqual.js +2 -12
- package/dist/utilities/withMergedProps/index.js +23 -21
- package/dist/views/Global/RenderCustomView.js +0 -1
- package/package.json +4 -4
|
@@ -1,100 +1,36 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
_export(exports, {
|
|
13
|
-
AuthProvider: function() {
|
|
14
|
-
return AuthProvider;
|
|
15
|
-
},
|
|
16
|
-
useAuth: function() {
|
|
17
|
-
return useAuth;
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
const _modal = require("@faceless-ui/modal");
|
|
21
|
-
const _navigation = require("next/navigation");
|
|
22
|
-
const _qs = /*#__PURE__*/ _interop_require_default(require("qs"));
|
|
23
|
-
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
|
|
24
|
-
const _reacttoastify = require("react-toastify");
|
|
25
|
-
const _useDebounce = /*#__PURE__*/ _interop_require_default(require("../../hooks/useDebounce"));
|
|
26
|
-
const _Translation = require("../../providers/Translation");
|
|
27
|
-
const _api = require("../../utilities/api");
|
|
28
|
-
const _Config = require("../Config");
|
|
29
|
-
const _SearchParams = require("../SearchParams");
|
|
30
|
-
function _interop_require_default(obj) {
|
|
31
|
-
return obj && obj.__esModule ? obj : {
|
|
32
|
-
default: obj
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
function _getRequireWildcardCache(nodeInterop) {
|
|
36
|
-
if (typeof WeakMap !== "function") return null;
|
|
37
|
-
var cacheBabelInterop = new WeakMap();
|
|
38
|
-
var cacheNodeInterop = new WeakMap();
|
|
39
|
-
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
40
|
-
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
41
|
-
})(nodeInterop);
|
|
42
|
-
}
|
|
43
|
-
function _interop_require_wildcard(obj, nodeInterop) {
|
|
44
|
-
if (!nodeInterop && obj && obj.__esModule) {
|
|
45
|
-
return obj;
|
|
46
|
-
}
|
|
47
|
-
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
48
|
-
return {
|
|
49
|
-
default: obj
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
var cache = _getRequireWildcardCache(nodeInterop);
|
|
53
|
-
if (cache && cache.has(obj)) {
|
|
54
|
-
return cache.get(obj);
|
|
55
|
-
}
|
|
56
|
-
var newObj = {
|
|
57
|
-
__proto__: null
|
|
58
|
-
};
|
|
59
|
-
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
60
|
-
for(var key in obj){
|
|
61
|
-
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
62
|
-
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
63
|
-
if (desc && (desc.get || desc.set)) {
|
|
64
|
-
Object.defineProperty(newObj, key, desc);
|
|
65
|
-
} else {
|
|
66
|
-
newObj[key] = obj[key];
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
newObj.default = obj;
|
|
71
|
-
if (cache) {
|
|
72
|
-
cache.set(obj, newObj);
|
|
73
|
-
}
|
|
74
|
-
return newObj;
|
|
75
|
-
}
|
|
2
|
+
import { useModal } from '@faceless-ui/modal';
|
|
3
|
+
import { usePathname, useRouter } from 'next/navigation';
|
|
4
|
+
import qs from 'qs';
|
|
5
|
+
import React, { createContext, useCallback, useContext, useEffect, useState } from 'react';
|
|
6
|
+
import { toast } from 'react-toastify';
|
|
7
|
+
import useDebounce from '../../hooks/useDebounce';
|
|
8
|
+
import { useTranslation } from '../../providers/Translation';
|
|
9
|
+
import { requests } from '../../utilities/api';
|
|
10
|
+
import { useConfig } from '../Config';
|
|
11
|
+
import { useSearchParams } from '../SearchParams';
|
|
76
12
|
// import { useLocale } from '../Locale'
|
|
77
|
-
const Context = /*#__PURE__*/
|
|
13
|
+
const Context = /*#__PURE__*/ createContext({});
|
|
78
14
|
const maxTimeoutTime = 2147483647;
|
|
79
|
-
const AuthProvider = ({ children })=>{
|
|
80
|
-
const { searchParams } =
|
|
81
|
-
const [user, setUser] =
|
|
82
|
-
const [tokenInMemory, setTokenInMemory] =
|
|
83
|
-
const [tokenExpiration, setTokenExpiration] =
|
|
84
|
-
const pathname =
|
|
85
|
-
const router =
|
|
15
|
+
export const AuthProvider = ({ children })=>{
|
|
16
|
+
const { searchParams } = useSearchParams();
|
|
17
|
+
const [user, setUser] = useState();
|
|
18
|
+
const [tokenInMemory, setTokenInMemory] = useState();
|
|
19
|
+
const [tokenExpiration, setTokenExpiration] = useState();
|
|
20
|
+
const pathname = usePathname();
|
|
21
|
+
const router = useRouter();
|
|
86
22
|
// const { code } = useLocale()
|
|
87
23
|
const code = 'en' // TODO: re-enable i18n asap
|
|
88
24
|
;
|
|
89
|
-
const config =
|
|
25
|
+
const config = useConfig();
|
|
90
26
|
const { admin: { autoLogin, inactivityRoute: logoutInactivityRoute, user: userSlug }, routes: { admin, api }, serverURL } = config;
|
|
91
|
-
const [permissions, setPermissions] =
|
|
92
|
-
const { i18n } =
|
|
93
|
-
const { closeAllModals, openModal } =
|
|
94
|
-
const [lastLocationChange, setLastLocationChange] =
|
|
95
|
-
const debouncedLocationChange = (
|
|
27
|
+
const [permissions, setPermissions] = useState();
|
|
28
|
+
const { i18n } = useTranslation();
|
|
29
|
+
const { closeAllModals, openModal } = useModal();
|
|
30
|
+
const [lastLocationChange, setLastLocationChange] = useState(0);
|
|
31
|
+
const debouncedLocationChange = useDebounce(lastLocationChange, 10000);
|
|
96
32
|
const id = user?.id;
|
|
97
|
-
const redirectToInactivityRoute =
|
|
33
|
+
const redirectToInactivityRoute = useCallback(()=>{
|
|
98
34
|
if (window.location.pathname.startsWith(admin)) {
|
|
99
35
|
const redirectParam = `?redirect=${encodeURIComponent(window.location.pathname.replace(admin, ''))}`;
|
|
100
36
|
router.replace(`${admin}${logoutInactivityRoute}${redirectParam}`);
|
|
@@ -108,11 +44,11 @@ const AuthProvider = ({ children })=>{
|
|
|
108
44
|
logoutInactivityRoute,
|
|
109
45
|
closeAllModals
|
|
110
46
|
]);
|
|
111
|
-
const revokeTokenAndExpire =
|
|
47
|
+
const revokeTokenAndExpire = useCallback(()=>{
|
|
112
48
|
setTokenInMemory(undefined);
|
|
113
49
|
setTokenExpiration(undefined);
|
|
114
50
|
}, []);
|
|
115
|
-
const setTokenAndExpiration =
|
|
51
|
+
const setTokenAndExpiration = useCallback((json)=>{
|
|
116
52
|
const token = json?.token || json?.refreshedToken;
|
|
117
53
|
if (token && json?.exp) {
|
|
118
54
|
setTokenInMemory(token);
|
|
@@ -123,13 +59,13 @@ const AuthProvider = ({ children })=>{
|
|
|
123
59
|
}, [
|
|
124
60
|
revokeTokenAndExpire
|
|
125
61
|
]);
|
|
126
|
-
const refreshCookie =
|
|
62
|
+
const refreshCookie = useCallback((forceRefresh)=>{
|
|
127
63
|
const now = Math.round(new Date().getTime() / 1000);
|
|
128
64
|
const remainingTime = (typeof tokenExpiration === 'number' ? tokenExpiration : 0) - now;
|
|
129
65
|
if (forceRefresh || tokenExpiration && remainingTime < 120) {
|
|
130
66
|
setTimeout(async ()=>{
|
|
131
67
|
try {
|
|
132
|
-
const request = await
|
|
68
|
+
const request = await requests.post(`${serverURL}${api}/${userSlug}/refresh-token`, {
|
|
133
69
|
headers: {
|
|
134
70
|
'Accept-Language': i18n.language
|
|
135
71
|
}
|
|
@@ -143,7 +79,7 @@ const AuthProvider = ({ children })=>{
|
|
|
143
79
|
redirectToInactivityRoute();
|
|
144
80
|
}
|
|
145
81
|
} catch (e) {
|
|
146
|
-
|
|
82
|
+
toast.error(e.message);
|
|
147
83
|
}
|
|
148
84
|
}, 1000);
|
|
149
85
|
}
|
|
@@ -156,9 +92,9 @@ const AuthProvider = ({ children })=>{
|
|
|
156
92
|
redirectToInactivityRoute,
|
|
157
93
|
setTokenAndExpiration
|
|
158
94
|
]);
|
|
159
|
-
const refreshCookieAsync =
|
|
95
|
+
const refreshCookieAsync = useCallback(async (skipSetUser)=>{
|
|
160
96
|
try {
|
|
161
|
-
const request = await
|
|
97
|
+
const request = await requests.post(`${serverURL}${api}/${userSlug}/refresh-token`, {
|
|
162
98
|
headers: {
|
|
163
99
|
'Accept-Language': i18n.language
|
|
164
100
|
}
|
|
@@ -175,7 +111,7 @@ const AuthProvider = ({ children })=>{
|
|
|
175
111
|
redirectToInactivityRoute();
|
|
176
112
|
return null;
|
|
177
113
|
} catch (e) {
|
|
178
|
-
|
|
114
|
+
toast.error(`Refreshing token failed: ${e.message}`);
|
|
179
115
|
return null;
|
|
180
116
|
}
|
|
181
117
|
}, [
|
|
@@ -186,13 +122,13 @@ const AuthProvider = ({ children })=>{
|
|
|
186
122
|
redirectToInactivityRoute,
|
|
187
123
|
setTokenAndExpiration
|
|
188
124
|
]);
|
|
189
|
-
const logOut =
|
|
125
|
+
const logOut = useCallback(()=>{
|
|
190
126
|
setUser(null);
|
|
191
127
|
revokeTokenAndExpire();
|
|
192
128
|
try {
|
|
193
|
-
|
|
129
|
+
requests.post(`${serverURL}${api}/${userSlug}/logout`);
|
|
194
130
|
} catch (e) {
|
|
195
|
-
|
|
131
|
+
toast.error(`Logging out failed: ${e.message}`);
|
|
196
132
|
}
|
|
197
133
|
}, [
|
|
198
134
|
serverURL,
|
|
@@ -200,12 +136,12 @@ const AuthProvider = ({ children })=>{
|
|
|
200
136
|
userSlug,
|
|
201
137
|
revokeTokenAndExpire
|
|
202
138
|
]);
|
|
203
|
-
const refreshPermissions =
|
|
139
|
+
const refreshPermissions = useCallback(async ()=>{
|
|
204
140
|
const params = {
|
|
205
141
|
locale: code
|
|
206
142
|
};
|
|
207
143
|
try {
|
|
208
|
-
const request = await
|
|
144
|
+
const request = await requests.get(`${serverURL}${api}/access?${qs.stringify(params)}`, {
|
|
209
145
|
headers: {
|
|
210
146
|
'Accept-Language': i18n.language
|
|
211
147
|
}
|
|
@@ -217,7 +153,7 @@ const AuthProvider = ({ children })=>{
|
|
|
217
153
|
throw new Error(`Fetching permissions failed with status code ${request.status}`);
|
|
218
154
|
}
|
|
219
155
|
} catch (e) {
|
|
220
|
-
|
|
156
|
+
toast.error(`Refreshing permissions failed: ${e.message}`);
|
|
221
157
|
}
|
|
222
158
|
}, [
|
|
223
159
|
serverURL,
|
|
@@ -225,9 +161,9 @@ const AuthProvider = ({ children })=>{
|
|
|
225
161
|
i18n,
|
|
226
162
|
code
|
|
227
163
|
]);
|
|
228
|
-
const fetchFullUser =
|
|
164
|
+
const fetchFullUser = React.useCallback(async ()=>{
|
|
229
165
|
try {
|
|
230
|
-
const request = await
|
|
166
|
+
const request = await requests.get(`${serverURL}${api}/${userSlug}/me`, {
|
|
231
167
|
headers: {
|
|
232
168
|
'Accept-Language': i18n.language
|
|
233
169
|
}
|
|
@@ -242,7 +178,7 @@ const AuthProvider = ({ children })=>{
|
|
|
242
178
|
} else if (autoLogin && autoLogin.prefillOnly !== true) {
|
|
243
179
|
// auto log-in with the provided autoLogin credentials. This is used in dev mode
|
|
244
180
|
// so you don't have to log in over and over again
|
|
245
|
-
const autoLoginResult = await
|
|
181
|
+
const autoLoginResult = await requests.post(`${serverURL}${api}/${userSlug}/login`, {
|
|
246
182
|
body: JSON.stringify({
|
|
247
183
|
email: autoLogin.email,
|
|
248
184
|
password: autoLogin.password
|
|
@@ -269,7 +205,7 @@ const AuthProvider = ({ children })=>{
|
|
|
269
205
|
}
|
|
270
206
|
}
|
|
271
207
|
} catch (e) {
|
|
272
|
-
|
|
208
|
+
toast.error(`Fetching user failed: ${e.message}`);
|
|
273
209
|
}
|
|
274
210
|
}, [
|
|
275
211
|
serverURL,
|
|
@@ -284,13 +220,13 @@ const AuthProvider = ({ children })=>{
|
|
|
284
220
|
revokeTokenAndExpire
|
|
285
221
|
]);
|
|
286
222
|
// On mount, get user and set
|
|
287
|
-
|
|
223
|
+
useEffect(()=>{
|
|
288
224
|
fetchFullUser();
|
|
289
225
|
}, [
|
|
290
226
|
fetchFullUser
|
|
291
227
|
]);
|
|
292
228
|
// When location changes, refresh cookie
|
|
293
|
-
|
|
229
|
+
useEffect(()=>{
|
|
294
230
|
if (id) {
|
|
295
231
|
refreshCookie();
|
|
296
232
|
}
|
|
@@ -299,13 +235,13 @@ const AuthProvider = ({ children })=>{
|
|
|
299
235
|
refreshCookie,
|
|
300
236
|
id
|
|
301
237
|
]);
|
|
302
|
-
|
|
238
|
+
useEffect(()=>{
|
|
303
239
|
setLastLocationChange(Date.now());
|
|
304
240
|
}, [
|
|
305
241
|
pathname
|
|
306
242
|
]);
|
|
307
243
|
// When user changes, get new access
|
|
308
|
-
|
|
244
|
+
useEffect(()=>{
|
|
309
245
|
if (id) {
|
|
310
246
|
refreshPermissions();
|
|
311
247
|
}
|
|
@@ -316,7 +252,7 @@ const AuthProvider = ({ children })=>{
|
|
|
316
252
|
serverURL,
|
|
317
253
|
refreshPermissions
|
|
318
254
|
]);
|
|
319
|
-
|
|
255
|
+
useEffect(()=>{
|
|
320
256
|
let reminder;
|
|
321
257
|
const now = Math.round(new Date().getTime() / 1000);
|
|
322
258
|
const remainingTime = typeof tokenExpiration === 'number' ? tokenExpiration - now : 0;
|
|
@@ -332,7 +268,7 @@ const AuthProvider = ({ children })=>{
|
|
|
332
268
|
tokenExpiration,
|
|
333
269
|
openModal
|
|
334
270
|
]);
|
|
335
|
-
|
|
271
|
+
useEffect(()=>{
|
|
336
272
|
let forceLogOut;
|
|
337
273
|
const now = Math.round(new Date().getTime() / 1000);
|
|
338
274
|
const remainingTime = typeof tokenExpiration === 'number' ? tokenExpiration - now : 0;
|
|
@@ -353,7 +289,7 @@ const AuthProvider = ({ children })=>{
|
|
|
353
289
|
redirectToInactivityRoute,
|
|
354
290
|
revokeTokenAndExpire
|
|
355
291
|
]);
|
|
356
|
-
return /*#__PURE__*/
|
|
292
|
+
return /*#__PURE__*/ React.createElement(Context.Provider, {
|
|
357
293
|
value: {
|
|
358
294
|
fetchFullUser,
|
|
359
295
|
logOut,
|
|
@@ -368,6 +304,6 @@ const AuthProvider = ({ children })=>{
|
|
|
368
304
|
}
|
|
369
305
|
}, children);
|
|
370
306
|
};
|
|
371
|
-
const useAuth = ()=>
|
|
307
|
+
export const useAuth = ()=>useContext(Context);
|
|
372
308
|
|
|
373
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wcm92aWRlcnMvQXV0aC9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IFBlcm1pc3Npb25zLCBVc2VyIH0gZnJvbSAncGF5bG9hZC9hdXRoJ1xuXG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJ0BmYWNlbGVzcy11aS9tb2RhbCdcbmltcG9ydCB7IHVzZVBhdGhuYW1lLCB1c2VSb3V0ZXIgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXG5pbXBvcnQgcXMgZnJvbSAncXMnXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHRvYXN0IH0gZnJvbSAncmVhY3QtdG9hc3RpZnknXG5cbmltcG9ydCB0eXBlIHsgQXV0aENvbnRleHQgfSBmcm9tICcuL3R5cGVzJ1xuXG5pbXBvcnQgdXNlRGVib3VuY2UgZnJvbSAnLi4vLi4vaG9va3MvdXNlRGVib3VuY2UnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbidcbmltcG9ydCB7IHJlcXVlc3RzIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2FwaSdcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uL0NvbmZpZydcbmltcG9ydCB7IHVzZVNlYXJjaFBhcmFtcyB9IGZyb20gJy4uL1NlYXJjaFBhcmFtcydcbi8vIGltcG9ydCB7IHVzZUxvY2FsZSB9IGZyb20gJy4uL0xvY2FsZSdcblxuY29uc3QgQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe30gYXMgQXV0aENvbnRleHQpXG5cbmNvbnN0IG1heFRpbWVvdXRUaW1lID0gMjE0NzQ4MzY0N1xuXG5leHBvcnQgY29uc3QgQXV0aFByb3ZpZGVyOiBSZWFjdC5GQzx7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfT4gPSAoeyBjaGlsZHJlbiB9KSA9PiB7XG4gIGNvbnN0IHsgc2VhcmNoUGFyYW1zIH0gPSB1c2VTZWFyY2hQYXJhbXMoKVxuICBjb25zdCBbdXNlciwgc2V0VXNlcl0gPSB1c2VTdGF0ZTxVc2VyIHwgbnVsbD4oKVxuICBjb25zdCBbdG9rZW5Jbk1lbW9yeSwgc2V0VG9rZW5Jbk1lbW9yeV0gPSB1c2VTdGF0ZTxzdHJpbmc+KClcbiAgY29uc3QgW3Rva2VuRXhwaXJhdGlvbiwgc2V0VG9rZW5FeHBpcmF0aW9uXSA9IHVzZVN0YXRlPG51bWJlcj4oKVxuICBjb25zdCBwYXRobmFtZSA9IHVzZVBhdGhuYW1lKClcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcbiAgLy8gY29uc3QgeyBjb2RlIH0gPSB1c2VMb2NhbGUoKVxuICBjb25zdCBjb2RlID0gJ2VuJyAvLyBUT0RPOiByZS1lbmFibGUgaTE4biBhc2FwXG5cbiAgY29uc3QgY29uZmlnID0gdXNlQ29uZmlnKClcblxuICBjb25zdCB7XG4gICAgYWRtaW46IHsgYXV0b0xvZ2luLCBpbmFjdGl2aXR5Um91dGU6IGxvZ291dEluYWN0aXZpdHlSb3V0ZSwgdXNlcjogdXNlclNsdWcgfSxcbiAgICByb3V0ZXM6IHsgYWRtaW4sIGFwaSB9LFxuICAgIHNlcnZlclVSTCxcbiAgfSA9IGNvbmZpZ1xuXG4gIGNvbnN0IFtwZXJtaXNzaW9ucywgc2V0UGVybWlzc2lvbnNdID0gdXNlU3RhdGU8UGVybWlzc2lvbnM+KClcblxuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyBjbG9zZUFsbE1vZGFscywgb3Blbk1vZGFsIH0gPSB1c2VNb2RhbCgpXG4gIGNvbnN0IFtsYXN0TG9jYXRpb25DaGFuZ2UsIHNldExhc3RMb2NhdGlvbkNoYW5nZV0gPSB1c2VTdGF0ZSgwKVxuICBjb25zdCBkZWJvdW5jZWRMb2NhdGlvbkNoYW5nZSA9IHVzZURlYm91bmNlKGxhc3RMb2NhdGlvbkNoYW5nZSwgMTAwMDApXG5cbiAgY29uc3QgaWQgPSB1c2VyPy5pZFxuXG4gIGNvbnN0IHJlZGlyZWN0VG9JbmFjdGl2aXR5Um91dGUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKGFkbWluKSkge1xuICAgICAgY29uc3QgcmVkaXJlY3RQYXJhbSA9IGA/cmVkaXJlY3Q9JHtlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKGFkbWluLCAnJyksXG4gICAgICApfWBcbiAgICAgIHJvdXRlci5yZXBsYWNlKGAke2FkbWlufSR7bG9nb3V0SW5hY3Rpdml0eVJvdXRlfSR7cmVkaXJlY3RQYXJhbX1gKVxuICAgIH0gZWxzZSB7XG4gICAgICByb3V0ZXIucmVwbGFjZShgJHthZG1pbn0ke2xvZ291dEluYWN0aXZpdHlSb3V0ZX1gKVxuICAgIH1cbiAgICBjbG9zZUFsbE1vZGFscygpXG4gIH0sIFtyb3V0ZXIsIGFkbWluLCBsb2dvdXRJbmFjdGl2aXR5Um91dGUsIGNsb3NlQWxsTW9kYWxzXSlcblxuICBjb25zdCByZXZva2VUb2tlbkFuZEV4cGlyZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRUb2tlbkluTWVtb3J5KHVuZGVmaW5lZClcbiAgICBzZXRUb2tlbkV4cGlyYXRpb24odW5kZWZpbmVkKVxuICB9LCBbXSlcblxuICBjb25zdCBzZXRUb2tlbkFuZEV4cGlyYXRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAoanNvbikgPT4ge1xuICAgICAgY29uc3QgdG9rZW4gPSBqc29uPy50b2tlbiB8fCBqc29uPy5yZWZyZXNoZWRUb2tlblxuICAgICAgaWYgKHRva2VuICYmIGpzb24/LmV4cCkge1xuICAgICAgICBzZXRUb2tlbkluTWVtb3J5KHRva2VuKVxuICAgICAgICBzZXRUb2tlbkV4cGlyYXRpb24oanNvbi5leHApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXZva2VUb2tlbkFuZEV4cGlyZSgpXG4gICAgICB9XG4gICAgfSxcbiAgICBbcmV2b2tlVG9rZW5BbmRFeHBpcmVdLFxuICApXG5cbiAgY29uc3QgcmVmcmVzaENvb2tpZSA9IHVzZUNhbGxiYWNrKFxuICAgIChmb3JjZVJlZnJlc2g/OiBib29sZWFuKSA9PiB7XG4gICAgICBjb25zdCBub3cgPSBNYXRoLnJvdW5kKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMClcbiAgICAgIGNvbnN0IHJlbWFpbmluZ1RpbWUgPSAodHlwZW9mIHRva2VuRXhwaXJhdGlvbiA9PT0gJ251bWJlcicgPyB0b2tlbkV4cGlyYXRpb24gOiAwKSAtIG5vd1xuXG4gICAgICBpZiAoZm9yY2VSZWZyZXNoIHx8ICh0b2tlbkV4cGlyYXRpb24gJiYgcmVtYWluaW5nVGltZSA8IDEyMCkpIHtcbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBhd2FpdCByZXF1ZXN0cy5wb3N0KGAke3NlcnZlclVSTH0ke2FwaX0vJHt1c2VyU2x1Z30vcmVmcmVzaC10b2tlbmAsIHtcbiAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBpMThuLmxhbmd1YWdlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlcXVlc3QuanNvbigpXG4gICAgICAgICAgICAgIHNldFVzZXIoanNvbi51c2VyKVxuICAgICAgICAgICAgICBzZXRUb2tlbkFuZEV4cGlyYXRpb24oanNvbilcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNldFVzZXIobnVsbClcbiAgICAgICAgICAgICAgcmVkaXJlY3RUb0luYWN0aXZpdHlSb3V0ZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdG9hc3QuZXJyb3IoZS5tZXNzYWdlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwMClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIHRva2VuRXhwaXJhdGlvbixcbiAgICAgIHNlcnZlclVSTCxcbiAgICAgIGFwaSxcbiAgICAgIHVzZXJTbHVnLFxuICAgICAgaTE4bixcbiAgICAgIHJlZGlyZWN0VG9JbmFjdGl2aXR5Um91dGUsXG4gICAgICBzZXRUb2tlbkFuZEV4cGlyYXRpb24sXG4gICAgXSxcbiAgKVxuXG4gIGNvbnN0IHJlZnJlc2hDb29raWVBc3luYyA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChza2lwU2V0VXNlcj86IGJvb2xlYW4pOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBhd2FpdCByZXF1ZXN0cy5wb3N0KGAke3NlcnZlclVSTH0ke2FwaX0vJHt1c2VyU2x1Z30vcmVmcmVzaC10b2tlbmAsIHtcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogaTE4bi5sYW5ndWFnZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlcXVlc3QuanNvbigpXG4gICAgICAgICAgaWYgKCFza2lwU2V0VXNlcikge1xuICAgICAgICAgICAgc2V0VXNlcihqc29uLnVzZXIpXG4gICAgICAgICAgICBzZXRUb2tlbkFuZEV4cGlyYXRpb24oanNvbilcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGpzb24udXNlclxuICAgICAgICB9XG5cbiAgICAgICAgc2V0VXNlcihudWxsKVxuICAgICAgICByZWRpcmVjdFRvSW5hY3Rpdml0eVJvdXRlKClcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdG9hc3QuZXJyb3IoYFJlZnJlc2hpbmcgdG9rZW4gZmFpbGVkOiAke2UubWVzc2FnZX1gKVxuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgIH0sXG4gICAgW3NlcnZlclVSTCwgYXBpLCB1c2VyU2x1ZywgaTE4biwgcmVkaXJlY3RUb0luYWN0aXZpdHlSb3V0ZSwgc2V0VG9rZW5BbmRFeHBpcmF0aW9uXSxcbiAgKVxuXG4gIGNvbnN0IGxvZ091dCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRVc2VyKG51bGwpXG4gICAgcmV2b2tlVG9rZW5BbmRFeHBpcmUoKVxuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0cy5wb3N0KGAke3NlcnZlclVSTH0ke2FwaX0vJHt1c2VyU2x1Z30vbG9nb3V0YClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0b2FzdC5lcnJvcihgTG9nZ2luZyBvdXQgZmFpbGVkOiAke2UubWVzc2FnZX1gKVxuICAgIH1cbiAgfSwgW3NlcnZlclVSTCwgYXBpLCB1c2VyU2x1ZywgcmV2b2tlVG9rZW5BbmRFeHBpcmVdKVxuXG4gIGNvbnN0IHJlZnJlc2hQZXJtaXNzaW9ucyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBsb2NhbGU6IGNvZGUsXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gYXdhaXQgcmVxdWVzdHMuZ2V0KGAke3NlcnZlclVSTH0ke2FwaX0vYWNjZXNzPyR7cXMuc3RyaW5naWZ5KHBhcmFtcyl9YCwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IGkxOG4ubGFuZ3VhZ2UsXG4gICAgICAgIH0sXG4gICAgICB9KVxuXG4gICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICBjb25zdCBqc29uOiBQZXJtaXNzaW9ucyA9IGF3YWl0IHJlcXVlc3QuanNvbigpXG4gICAgICAgIHNldFBlcm1pc3Npb25zKGpzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZldGNoaW5nIHBlcm1pc3Npb25zIGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICR7cmVxdWVzdC5zdGF0dXN9YClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0b2FzdC5lcnJvcihgUmVmcmVzaGluZyBwZXJtaXNzaW9ucyBmYWlsZWQ6ICR7ZS5tZXNzYWdlfWApXG4gICAgfVxuICB9LCBbc2VydmVyVVJMLCBhcGksIGkxOG4sIGNvZGVdKVxuXG4gIGNvbnN0IGZldGNoRnVsbFVzZXIgPSBSZWFjdC51c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBhd2FpdCByZXF1ZXN0cy5nZXQoYCR7c2VydmVyVVJMfSR7YXBpfS8ke3VzZXJTbHVnfS9tZWAsIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBpMThuLmxhbmd1YWdlLFxuICAgICAgICB9LFxuICAgICAgfSlcblxuICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlcXVlc3QuanNvbigpXG5cbiAgICAgICAgaWYgKGpzb24/LnVzZXIpIHtcbiAgICAgICAgICBzZXRVc2VyKGpzb24udXNlcilcbiAgICAgICAgICBpZiAoanNvbj8udG9rZW4pIHtcbiAgICAgICAgICAgIHNldFRva2VuQW5kRXhwaXJhdGlvbihqc29uKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChhdXRvTG9naW4gJiYgYXV0b0xvZ2luLnByZWZpbGxPbmx5ICE9PSB0cnVlKSB7XG4gICAgICAgICAgLy8gYXV0byBsb2ctaW4gd2l0aCB0aGUgcHJvdmlkZWQgYXV0b0xvZ2luIGNyZWRlbnRpYWxzLiBUaGlzIGlzIHVzZWQgaW4gZGV2IG1vZGVcbiAgICAgICAgICAvLyBzbyB5b3UgZG9uJ3QgaGF2ZSB0byBsb2cgaW4gb3ZlciBhbmQgb3ZlciBhZ2FpblxuICAgICAgICAgIGNvbnN0IGF1dG9Mb2dpblJlc3VsdCA9IGF3YWl0IHJlcXVlc3RzLnBvc3QoYCR7c2VydmVyVVJMfSR7YXBpfS8ke3VzZXJTbHVnfS9sb2dpbmAsIHtcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgZW1haWw6IGF1dG9Mb2dpbi5lbWFpbCxcbiAgICAgICAgICAgICAgcGFzc3dvcmQ6IGF1dG9Mb2dpbi5wYXNzd29yZCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogaTE4bi5sYW5ndWFnZSxcbiAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoYXV0b0xvZ2luUmVzdWx0LnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICBjb25zdCBhdXRvTG9naW5Kc29uID0gYXdhaXQgYXV0b0xvZ2luUmVzdWx0Lmpzb24oKVxuICAgICAgICAgICAgc2V0VXNlcihhdXRvTG9naW5Kc29uLnVzZXIpXG4gICAgICAgICAgICBpZiAoYXV0b0xvZ2luSnNvbj8udG9rZW4pIHtcbiAgICAgICAgICAgICAgc2V0VG9rZW5BbmRFeHBpcmF0aW9uKGF1dG9Mb2dpbkpzb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3V0ZXIucHVzaChcbiAgICAgICAgICAgICAgdHlwZW9mIHNlYXJjaFBhcmFtc1sncmVkaXJlY3QnXSA9PT0gJ3N0cmluZycgPyBzZWFyY2hQYXJhbXNbJ3JlZGlyZWN0J10gOiBhZG1pbixcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VXNlcihudWxsKVxuICAgICAgICAgICAgcmV2b2tlVG9rZW5BbmRFeHBpcmUoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRVc2VyKG51bGwpXG4gICAgICAgICAgcmV2b2tlVG9rZW5BbmRFeHBpcmUoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdG9hc3QuZXJyb3IoYEZldGNoaW5nIHVzZXIgZmFpbGVkOiAke2UubWVzc2FnZX1gKVxuICAgIH1cbiAgfSwgW1xuICAgIHNlcnZlclVSTCxcbiAgICBhcGksXG4gICAgdXNlclNsdWcsXG4gICAgaTE4bi5sYW5ndWFnZSxcbiAgICBhdXRvTG9naW4sXG4gICAgc2V0VG9rZW5BbmRFeHBpcmF0aW9uLFxuICAgIHJvdXRlcixcbiAgICBzZWFyY2hQYXJhbXMsXG4gICAgYWRtaW4sXG4gICAgcmV2b2tlVG9rZW5BbmRFeHBpcmUsXG4gIF0pXG5cbiAgLy8gT24gbW91bnQsIGdldCB1c2VyIGFuZCBzZXRcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmZXRjaEZ1bGxVc2VyKClcbiAgfSwgW2ZldGNoRnVsbFVzZXJdKVxuXG4gIC8vIFdoZW4gbG9jYXRpb24gY2hhbmdlcywgcmVmcmVzaCBjb29raWVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaWQpIHtcbiAgICAgIHJlZnJlc2hDb29raWUoKVxuICAgIH1cbiAgfSwgW2RlYm91bmNlZExvY2F0aW9uQ2hhbmdlLCByZWZyZXNoQ29va2llLCBpZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRMYXN0TG9jYXRpb25DaGFuZ2UoRGF0ZS5ub3coKSlcbiAgfSwgW3BhdGhuYW1lXSlcblxuICAvLyBXaGVuIHVzZXIgY2hhbmdlcywgZ2V0IG5ldyBhY2Nlc3NcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaWQpIHtcbiAgICAgIHJlZnJlc2hQZXJtaXNzaW9ucygpXG4gICAgfVxuICB9LCBbaTE4biwgaWQsIGFwaSwgc2VydmVyVVJMLCByZWZyZXNoUGVybWlzc2lvbnNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IHJlbWluZGVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PlxuICAgIGNvbnN0IG5vdyA9IE1hdGgucm91bmQobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKVxuICAgIGNvbnN0IHJlbWFpbmluZ1RpbWUgPSB0eXBlb2YgdG9rZW5FeHBpcmF0aW9uID09PSAnbnVtYmVyJyA/IHRva2VuRXhwaXJhdGlvbiAtIG5vdyA6IDBcblxuICAgIGlmIChyZW1haW5pbmdUaW1lID4gMCkge1xuICAgICAgcmVtaW5kZXIgPSBzZXRUaW1lb3V0KFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgb3Blbk1vZGFsKCdzdGF5LWxvZ2dlZC1pbicpXG4gICAgICAgIH0sXG4gICAgICAgIE1hdGgubWF4KE1hdGgubWluKChyZW1haW5pbmdUaW1lIC0gNjApICogMTAwMCwgbWF4VGltZW91dFRpbWUpKSxcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJlbWluZGVyKSBjbGVhclRpbWVvdXQocmVtaW5kZXIpXG4gICAgfVxuICB9LCBbdG9rZW5FeHBpcmF0aW9uLCBvcGVuTW9kYWxdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGZvcmNlTG9nT3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PlxuICAgIGNvbnN0IG5vdyA9IE1hdGgucm91bmQobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKVxuICAgIGNvbnN0IHJlbWFpbmluZ1RpbWUgPSB0eXBlb2YgdG9rZW5FeHBpcmF0aW9uID09PSAnbnVtYmVyJyA/IHRva2VuRXhwaXJhdGlvbiAtIG5vdyA6IDBcblxuICAgIGlmIChyZW1haW5pbmdUaW1lID4gMCkge1xuICAgICAgZm9yY2VMb2dPdXQgPSBzZXRUaW1lb3V0KFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgc2V0VXNlcihudWxsKVxuICAgICAgICAgIHJldm9rZVRva2VuQW5kRXhwaXJlKClcbiAgICAgICAgICByZWRpcmVjdFRvSW5hY3Rpdml0eVJvdXRlKClcbiAgICAgICAgfSxcbiAgICAgICAgTWF0aC5tYXgoTWF0aC5taW4ocmVtYWluaW5nVGltZSAqIDEwMDAsIG1heFRpbWVvdXRUaW1lKSwgMCksXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChmb3JjZUxvZ091dCkgY2xlYXJUaW1lb3V0KGZvcmNlTG9nT3V0KVxuICAgIH1cbiAgfSwgW3Rva2VuRXhwaXJhdGlvbiwgY2xvc2VBbGxNb2RhbHMsIGkxOG4sIHJlZGlyZWN0VG9JbmFjdGl2aXR5Um91dGUsIHJldm9rZVRva2VuQW5kRXhwaXJlXSlcblxuICByZXR1cm4gKFxuICAgIDxDb250ZXh0LlByb3ZpZGVyXG4gICAgICB2YWx1ZT17e1xuICAgICAgICBmZXRjaEZ1bGxVc2VyLFxuICAgICAgICBsb2dPdXQsXG4gICAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgICByZWZyZXNoQ29va2llLFxuICAgICAgICByZWZyZXNoQ29va2llQXN5bmMsXG4gICAgICAgIHJlZnJlc2hQZXJtaXNzaW9ucyxcbiAgICAgICAgc2V0UGVybWlzc2lvbnMsXG4gICAgICAgIHNldFVzZXIsXG4gICAgICAgIHRva2VuOiB0b2tlbkluTWVtb3J5LFxuICAgICAgICB1c2VyLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Db250ZXh0LlByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCB1c2VBdXRoID0gPFQgPSBVc2VyLD4oKTogQXV0aENvbnRleHQ8VD4gPT4gdXNlQ29udGV4dChDb250ZXh0KSBhcyBBdXRoQ29udGV4dDxUPlxuIl0sIm5hbWVzIjpbIkF1dGhQcm92aWRlciIsInVzZUF1dGgiLCJDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsIm1heFRpbWVvdXRUaW1lIiwiY2hpbGRyZW4iLCJzZWFyY2hQYXJhbXMiLCJ1c2VTZWFyY2hQYXJhbXMiLCJ1c2VyIiwic2V0VXNlciIsInVzZVN0YXRlIiwidG9rZW5Jbk1lbW9yeSIsInNldFRva2VuSW5NZW1vcnkiLCJ0b2tlbkV4cGlyYXRpb24iLCJzZXRUb2tlbkV4cGlyYXRpb24iLCJwYXRobmFtZSIsInVzZVBhdGhuYW1lIiwicm91dGVyIiwidXNlUm91dGVyIiwiY29kZSIsImNvbmZpZyIsInVzZUNvbmZpZyIsImFkbWluIiwiYXV0b0xvZ2luIiwiaW5hY3Rpdml0eVJvdXRlIiwibG9nb3V0SW5hY3Rpdml0eVJvdXRlIiwidXNlclNsdWciLCJyb3V0ZXMiLCJhcGkiLCJzZXJ2ZXJVUkwiLCJwZXJtaXNzaW9ucyIsInNldFBlcm1pc3Npb25zIiwiaTE4biIsInVzZVRyYW5zbGF0aW9uIiwiY2xvc2VBbGxNb2RhbHMiLCJvcGVuTW9kYWwiLCJ1c2VNb2RhbCIsImxhc3RMb2NhdGlvbkNoYW5nZSIsInNldExhc3RMb2NhdGlvbkNoYW5nZSIsImRlYm91bmNlZExvY2F0aW9uQ2hhbmdlIiwidXNlRGVib3VuY2UiLCJpZCIsInJlZGlyZWN0VG9JbmFjdGl2aXR5Um91dGUiLCJ1c2VDYWxsYmFjayIsIndpbmRvdyIsImxvY2F0aW9uIiwic3RhcnRzV2l0aCIsInJlZGlyZWN0UGFyYW0iLCJlbmNvZGVVUklDb21wb25lbnQiLCJyZXBsYWNlIiwicmV2b2tlVG9rZW5BbmRFeHBpcmUiLCJ1bmRlZmluZWQiLCJzZXRUb2tlbkFuZEV4cGlyYXRpb24iLCJqc29uIiwidG9rZW4iLCJyZWZyZXNoZWRUb2tlbiIsImV4cCIsInJlZnJlc2hDb29raWUiLCJmb3JjZVJlZnJlc2giLCJub3ciLCJNYXRoIiwicm91bmQiLCJEYXRlIiwiZ2V0VGltZSIsInJlbWFpbmluZ1RpbWUiLCJzZXRUaW1lb3V0IiwicmVxdWVzdCIsInJlcXVlc3RzIiwicG9zdCIsImhlYWRlcnMiLCJsYW5ndWFnZSIsInN0YXR1cyIsImUiLCJ0b2FzdCIsImVycm9yIiwibWVzc2FnZSIsInJlZnJlc2hDb29raWVBc3luYyIsInNraXBTZXRVc2VyIiwibG9nT3V0IiwicmVmcmVzaFBlcm1pc3Npb25zIiwicGFyYW1zIiwibG9jYWxlIiwiZ2V0IiwicXMiLCJzdHJpbmdpZnkiLCJFcnJvciIsImZldGNoRnVsbFVzZXIiLCJSZWFjdCIsInByZWZpbGxPbmx5IiwiYXV0b0xvZ2luUmVzdWx0IiwiYm9keSIsIkpTT04iLCJlbWFpbCIsInBhc3N3b3JkIiwiYXV0b0xvZ2luSnNvbiIsInB1c2giLCJ1c2VFZmZlY3QiLCJyZW1pbmRlciIsIm1heCIsIm1pbiIsImNsZWFyVGltZW91dCIsImZvcmNlTG9nT3V0IiwiUHJvdmlkZXIiLCJ2YWx1ZSIsInVzZUNvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7SUFzQmFBLFlBQVk7ZUFBWkE7O0lBK1NBQyxPQUFPO2VBQVBBOzs7dUJBbFVZOzRCQUNjOzJEQUN4QjsrREFDb0U7K0JBQzdEO29FQUlFOzZCQUNPO3FCQUNOO3dCQUNDOzhCQUNNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNoQyx3Q0FBd0M7QUFFeEMsTUFBTUMsd0JBQVVDLElBQUFBLG9CQUFhLEVBQUMsQ0FBQztBQUUvQixNQUFNQyxpQkFBaUI7QUFFaEIsTUFBTUosZUFBd0QsQ0FBQyxFQUFFSyxRQUFRLEVBQUU7SUFDaEYsTUFBTSxFQUFFQyxZQUFZLEVBQUUsR0FBR0MsSUFBQUEsNkJBQWU7SUFDeEMsTUFBTSxDQUFDQyxNQUFNQyxRQUFRLEdBQUdDLElBQUFBLGVBQVE7SUFDaEMsTUFBTSxDQUFDQyxlQUFlQyxpQkFBaUIsR0FBR0YsSUFBQUEsZUFBUTtJQUNsRCxNQUFNLENBQUNHLGlCQUFpQkMsbUJBQW1CLEdBQUdKLElBQUFBLGVBQVE7SUFDdEQsTUFBTUssV0FBV0MsSUFBQUEsdUJBQVc7SUFDNUIsTUFBTUMsU0FBU0MsSUFBQUEscUJBQVM7SUFDeEIsK0JBQStCO0lBQy9CLE1BQU1DLE9BQU8sS0FBSyw0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
|
|
309
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wcm92aWRlcnMvQXV0aC9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IFBlcm1pc3Npb25zLCBVc2VyIH0gZnJvbSAncGF5bG9hZC9hdXRoJ1xuXG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJ0BmYWNlbGVzcy11aS9tb2RhbCdcbmltcG9ydCB7IHVzZVBhdGhuYW1lLCB1c2VSb3V0ZXIgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXG5pbXBvcnQgcXMgZnJvbSAncXMnXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHRvYXN0IH0gZnJvbSAncmVhY3QtdG9hc3RpZnknXG5cbmltcG9ydCB0eXBlIHsgQXV0aENvbnRleHQgfSBmcm9tICcuL3R5cGVzJ1xuXG5pbXBvcnQgdXNlRGVib3VuY2UgZnJvbSAnLi4vLi4vaG9va3MvdXNlRGVib3VuY2UnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbidcbmltcG9ydCB7IHJlcXVlc3RzIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2FwaSdcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uL0NvbmZpZydcbmltcG9ydCB7IHVzZVNlYXJjaFBhcmFtcyB9IGZyb20gJy4uL1NlYXJjaFBhcmFtcydcbi8vIGltcG9ydCB7IHVzZUxvY2FsZSB9IGZyb20gJy4uL0xvY2FsZSdcblxuY29uc3QgQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe30gYXMgQXV0aENvbnRleHQpXG5cbmNvbnN0IG1heFRpbWVvdXRUaW1lID0gMjE0NzQ4MzY0N1xuXG5leHBvcnQgY29uc3QgQXV0aFByb3ZpZGVyOiBSZWFjdC5GQzx7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfT4gPSAoeyBjaGlsZHJlbiB9KSA9PiB7XG4gIGNvbnN0IHsgc2VhcmNoUGFyYW1zIH0gPSB1c2VTZWFyY2hQYXJhbXMoKVxuICBjb25zdCBbdXNlciwgc2V0VXNlcl0gPSB1c2VTdGF0ZTxVc2VyIHwgbnVsbD4oKVxuICBjb25zdCBbdG9rZW5Jbk1lbW9yeSwgc2V0VG9rZW5Jbk1lbW9yeV0gPSB1c2VTdGF0ZTxzdHJpbmc+KClcbiAgY29uc3QgW3Rva2VuRXhwaXJhdGlvbiwgc2V0VG9rZW5FeHBpcmF0aW9uXSA9IHVzZVN0YXRlPG51bWJlcj4oKVxuICBjb25zdCBwYXRobmFtZSA9IHVzZVBhdGhuYW1lKClcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcbiAgLy8gY29uc3QgeyBjb2RlIH0gPSB1c2VMb2NhbGUoKVxuICBjb25zdCBjb2RlID0gJ2VuJyAvLyBUT0RPOiByZS1lbmFibGUgaTE4biBhc2FwXG5cbiAgY29uc3QgY29uZmlnID0gdXNlQ29uZmlnKClcblxuICBjb25zdCB7XG4gICAgYWRtaW46IHsgYXV0b0xvZ2luLCBpbmFjdGl2aXR5Um91dGU6IGxvZ291dEluYWN0aXZpdHlSb3V0ZSwgdXNlcjogdXNlclNsdWcgfSxcbiAgICByb3V0ZXM6IHsgYWRtaW4sIGFwaSB9LFxuICAgIHNlcnZlclVSTCxcbiAgfSA9IGNvbmZpZ1xuXG4gIGNvbnN0IFtwZXJtaXNzaW9ucywgc2V0UGVybWlzc2lvbnNdID0gdXNlU3RhdGU8UGVybWlzc2lvbnM+KClcblxuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyBjbG9zZUFsbE1vZGFscywgb3Blbk1vZGFsIH0gPSB1c2VNb2RhbCgpXG4gIGNvbnN0IFtsYXN0TG9jYXRpb25DaGFuZ2UsIHNldExhc3RMb2NhdGlvbkNoYW5nZV0gPSB1c2VTdGF0ZSgwKVxuICBjb25zdCBkZWJvdW5jZWRMb2NhdGlvbkNoYW5nZSA9IHVzZURlYm91bmNlKGxhc3RMb2NhdGlvbkNoYW5nZSwgMTAwMDApXG5cbiAgY29uc3QgaWQgPSB1c2VyPy5pZFxuXG4gIGNvbnN0IHJlZGlyZWN0VG9JbmFjdGl2aXR5Um91dGUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKGFkbWluKSkge1xuICAgICAgY29uc3QgcmVkaXJlY3RQYXJhbSA9IGA/cmVkaXJlY3Q9JHtlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKGFkbWluLCAnJyksXG4gICAgICApfWBcbiAgICAgIHJvdXRlci5yZXBsYWNlKGAke2FkbWlufSR7bG9nb3V0SW5hY3Rpdml0eVJvdXRlfSR7cmVkaXJlY3RQYXJhbX1gKVxuICAgIH0gZWxzZSB7XG4gICAgICByb3V0ZXIucmVwbGFjZShgJHthZG1pbn0ke2xvZ291dEluYWN0aXZpdHlSb3V0ZX1gKVxuICAgIH1cbiAgICBjbG9zZUFsbE1vZGFscygpXG4gIH0sIFtyb3V0ZXIsIGFkbWluLCBsb2dvdXRJbmFjdGl2aXR5Um91dGUsIGNsb3NlQWxsTW9kYWxzXSlcblxuICBjb25zdCByZXZva2VUb2tlbkFuZEV4cGlyZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRUb2tlbkluTWVtb3J5KHVuZGVmaW5lZClcbiAgICBzZXRUb2tlbkV4cGlyYXRpb24odW5kZWZpbmVkKVxuICB9LCBbXSlcblxuICBjb25zdCBzZXRUb2tlbkFuZEV4cGlyYXRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAoanNvbikgPT4ge1xuICAgICAgY29uc3QgdG9rZW4gPSBqc29uPy50b2tlbiB8fCBqc29uPy5yZWZyZXNoZWRUb2tlblxuICAgICAgaWYgKHRva2VuICYmIGpzb24/LmV4cCkge1xuICAgICAgICBzZXRUb2tlbkluTWVtb3J5KHRva2VuKVxuICAgICAgICBzZXRUb2tlbkV4cGlyYXRpb24oanNvbi5leHApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXZva2VUb2tlbkFuZEV4cGlyZSgpXG4gICAgICB9XG4gICAgfSxcbiAgICBbcmV2b2tlVG9rZW5BbmRFeHBpcmVdLFxuICApXG5cbiAgY29uc3QgcmVmcmVzaENvb2tpZSA9IHVzZUNhbGxiYWNrKFxuICAgIChmb3JjZVJlZnJlc2g/OiBib29sZWFuKSA9PiB7XG4gICAgICBjb25zdCBub3cgPSBNYXRoLnJvdW5kKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMClcbiAgICAgIGNvbnN0IHJlbWFpbmluZ1RpbWUgPSAodHlwZW9mIHRva2VuRXhwaXJhdGlvbiA9PT0gJ251bWJlcicgPyB0b2tlbkV4cGlyYXRpb24gOiAwKSAtIG5vd1xuXG4gICAgICBpZiAoZm9yY2VSZWZyZXNoIHx8ICh0b2tlbkV4cGlyYXRpb24gJiYgcmVtYWluaW5nVGltZSA8IDEyMCkpIHtcbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBhd2FpdCByZXF1ZXN0cy5wb3N0KGAke3NlcnZlclVSTH0ke2FwaX0vJHt1c2VyU2x1Z30vcmVmcmVzaC10b2tlbmAsIHtcbiAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBpMThuLmxhbmd1YWdlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlcXVlc3QuanNvbigpXG4gICAgICAgICAgICAgIHNldFVzZXIoanNvbi51c2VyKVxuICAgICAgICAgICAgICBzZXRUb2tlbkFuZEV4cGlyYXRpb24oanNvbilcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNldFVzZXIobnVsbClcbiAgICAgICAgICAgICAgcmVkaXJlY3RUb0luYWN0aXZpdHlSb3V0ZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdG9hc3QuZXJyb3IoZS5tZXNzYWdlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwMClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIHRva2VuRXhwaXJhdGlvbixcbiAgICAgIHNlcnZlclVSTCxcbiAgICAgIGFwaSxcbiAgICAgIHVzZXJTbHVnLFxuICAgICAgaTE4bixcbiAgICAgIHJlZGlyZWN0VG9JbmFjdGl2aXR5Um91dGUsXG4gICAgICBzZXRUb2tlbkFuZEV4cGlyYXRpb24sXG4gICAgXSxcbiAgKVxuXG4gIGNvbnN0IHJlZnJlc2hDb29raWVBc3luYyA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChza2lwU2V0VXNlcj86IGJvb2xlYW4pOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBhd2FpdCByZXF1ZXN0cy5wb3N0KGAke3NlcnZlclVSTH0ke2FwaX0vJHt1c2VyU2x1Z30vcmVmcmVzaC10b2tlbmAsIHtcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogaTE4bi5sYW5ndWFnZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlcXVlc3QuanNvbigpXG4gICAgICAgICAgaWYgKCFza2lwU2V0VXNlcikge1xuICAgICAgICAgICAgc2V0VXNlcihqc29uLnVzZXIpXG4gICAgICAgICAgICBzZXRUb2tlbkFuZEV4cGlyYXRpb24oanNvbilcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGpzb24udXNlclxuICAgICAgICB9XG5cbiAgICAgICAgc2V0VXNlcihudWxsKVxuICAgICAgICByZWRpcmVjdFRvSW5hY3Rpdml0eVJvdXRlKClcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdG9hc3QuZXJyb3IoYFJlZnJlc2hpbmcgdG9rZW4gZmFpbGVkOiAke2UubWVzc2FnZX1gKVxuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgIH0sXG4gICAgW3NlcnZlclVSTCwgYXBpLCB1c2VyU2x1ZywgaTE4biwgcmVkaXJlY3RUb0luYWN0aXZpdHlSb3V0ZSwgc2V0VG9rZW5BbmRFeHBpcmF0aW9uXSxcbiAgKVxuXG4gIGNvbnN0IGxvZ091dCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRVc2VyKG51bGwpXG4gICAgcmV2b2tlVG9rZW5BbmRFeHBpcmUoKVxuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0cy5wb3N0KGAke3NlcnZlclVSTH0ke2FwaX0vJHt1c2VyU2x1Z30vbG9nb3V0YClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0b2FzdC5lcnJvcihgTG9nZ2luZyBvdXQgZmFpbGVkOiAke2UubWVzc2FnZX1gKVxuICAgIH1cbiAgfSwgW3NlcnZlclVSTCwgYXBpLCB1c2VyU2x1ZywgcmV2b2tlVG9rZW5BbmRFeHBpcmVdKVxuXG4gIGNvbnN0IHJlZnJlc2hQZXJtaXNzaW9ucyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBsb2NhbGU6IGNvZGUsXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gYXdhaXQgcmVxdWVzdHMuZ2V0KGAke3NlcnZlclVSTH0ke2FwaX0vYWNjZXNzPyR7cXMuc3RyaW5naWZ5KHBhcmFtcyl9YCwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IGkxOG4ubGFuZ3VhZ2UsXG4gICAgICAgIH0sXG4gICAgICB9KVxuXG4gICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICBjb25zdCBqc29uOiBQZXJtaXNzaW9ucyA9IGF3YWl0IHJlcXVlc3QuanNvbigpXG4gICAgICAgIHNldFBlcm1pc3Npb25zKGpzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZldGNoaW5nIHBlcm1pc3Npb25zIGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICR7cmVxdWVzdC5zdGF0dXN9YClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0b2FzdC5lcnJvcihgUmVmcmVzaGluZyBwZXJtaXNzaW9ucyBmYWlsZWQ6ICR7ZS5tZXNzYWdlfWApXG4gICAgfVxuICB9LCBbc2VydmVyVVJMLCBhcGksIGkxOG4sIGNvZGVdKVxuXG4gIGNvbnN0IGZldGNoRnVsbFVzZXIgPSBSZWFjdC51c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBhd2FpdCByZXF1ZXN0cy5nZXQoYCR7c2VydmVyVVJMfSR7YXBpfS8ke3VzZXJTbHVnfS9tZWAsIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBpMThuLmxhbmd1YWdlLFxuICAgICAgICB9LFxuICAgICAgfSlcblxuICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlcXVlc3QuanNvbigpXG5cbiAgICAgICAgaWYgKGpzb24/LnVzZXIpIHtcbiAgICAgICAgICBzZXRVc2VyKGpzb24udXNlcilcbiAgICAgICAgICBpZiAoanNvbj8udG9rZW4pIHtcbiAgICAgICAgICAgIHNldFRva2VuQW5kRXhwaXJhdGlvbihqc29uKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChhdXRvTG9naW4gJiYgYXV0b0xvZ2luLnByZWZpbGxPbmx5ICE9PSB0cnVlKSB7XG4gICAgICAgICAgLy8gYXV0byBsb2ctaW4gd2l0aCB0aGUgcHJvdmlkZWQgYXV0b0xvZ2luIGNyZWRlbnRpYWxzLiBUaGlzIGlzIHVzZWQgaW4gZGV2IG1vZGVcbiAgICAgICAgICAvLyBzbyB5b3UgZG9uJ3QgaGF2ZSB0byBsb2cgaW4gb3ZlciBhbmQgb3ZlciBhZ2FpblxuICAgICAgICAgIGNvbnN0IGF1dG9Mb2dpblJlc3VsdCA9IGF3YWl0IHJlcXVlc3RzLnBvc3QoYCR7c2VydmVyVVJMfSR7YXBpfS8ke3VzZXJTbHVnfS9sb2dpbmAsIHtcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgZW1haWw6IGF1dG9Mb2dpbi5lbWFpbCxcbiAgICAgICAgICAgICAgcGFzc3dvcmQ6IGF1dG9Mb2dpbi5wYXNzd29yZCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogaTE4bi5sYW5ndWFnZSxcbiAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoYXV0b0xvZ2luUmVzdWx0LnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICBjb25zdCBhdXRvTG9naW5Kc29uID0gYXdhaXQgYXV0b0xvZ2luUmVzdWx0Lmpzb24oKVxuICAgICAgICAgICAgc2V0VXNlcihhdXRvTG9naW5Kc29uLnVzZXIpXG4gICAgICAgICAgICBpZiAoYXV0b0xvZ2luSnNvbj8udG9rZW4pIHtcbiAgICAgICAgICAgICAgc2V0VG9rZW5BbmRFeHBpcmF0aW9uKGF1dG9Mb2dpbkpzb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3V0ZXIucHVzaChcbiAgICAgICAgICAgICAgdHlwZW9mIHNlYXJjaFBhcmFtc1sncmVkaXJlY3QnXSA9PT0gJ3N0cmluZycgPyBzZWFyY2hQYXJhbXNbJ3JlZGlyZWN0J10gOiBhZG1pbixcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VXNlcihudWxsKVxuICAgICAgICAgICAgcmV2b2tlVG9rZW5BbmRFeHBpcmUoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRVc2VyKG51bGwpXG4gICAgICAgICAgcmV2b2tlVG9rZW5BbmRFeHBpcmUoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdG9hc3QuZXJyb3IoYEZldGNoaW5nIHVzZXIgZmFpbGVkOiAke2UubWVzc2FnZX1gKVxuICAgIH1cbiAgfSwgW1xuICAgIHNlcnZlclVSTCxcbiAgICBhcGksXG4gICAgdXNlclNsdWcsXG4gICAgaTE4bi5sYW5ndWFnZSxcbiAgICBhdXRvTG9naW4sXG4gICAgc2V0VG9rZW5BbmRFeHBpcmF0aW9uLFxuICAgIHJvdXRlcixcbiAgICBzZWFyY2hQYXJhbXMsXG4gICAgYWRtaW4sXG4gICAgcmV2b2tlVG9rZW5BbmRFeHBpcmUsXG4gIF0pXG5cbiAgLy8gT24gbW91bnQsIGdldCB1c2VyIGFuZCBzZXRcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmZXRjaEZ1bGxVc2VyKClcbiAgfSwgW2ZldGNoRnVsbFVzZXJdKVxuXG4gIC8vIFdoZW4gbG9jYXRpb24gY2hhbmdlcywgcmVmcmVzaCBjb29raWVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaWQpIHtcbiAgICAgIHJlZnJlc2hDb29raWUoKVxuICAgIH1cbiAgfSwgW2RlYm91bmNlZExvY2F0aW9uQ2hhbmdlLCByZWZyZXNoQ29va2llLCBpZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRMYXN0TG9jYXRpb25DaGFuZ2UoRGF0ZS5ub3coKSlcbiAgfSwgW3BhdGhuYW1lXSlcblxuICAvLyBXaGVuIHVzZXIgY2hhbmdlcywgZ2V0IG5ldyBhY2Nlc3NcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaWQpIHtcbiAgICAgIHJlZnJlc2hQZXJtaXNzaW9ucygpXG4gICAgfVxuICB9LCBbaTE4biwgaWQsIGFwaSwgc2VydmVyVVJMLCByZWZyZXNoUGVybWlzc2lvbnNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IHJlbWluZGVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PlxuICAgIGNvbnN0IG5vdyA9IE1hdGgucm91bmQobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKVxuICAgIGNvbnN0IHJlbWFpbmluZ1RpbWUgPSB0eXBlb2YgdG9rZW5FeHBpcmF0aW9uID09PSAnbnVtYmVyJyA/IHRva2VuRXhwaXJhdGlvbiAtIG5vdyA6IDBcblxuICAgIGlmIChyZW1haW5pbmdUaW1lID4gMCkge1xuICAgICAgcmVtaW5kZXIgPSBzZXRUaW1lb3V0KFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgb3Blbk1vZGFsKCdzdGF5LWxvZ2dlZC1pbicpXG4gICAgICAgIH0sXG4gICAgICAgIE1hdGgubWF4KE1hdGgubWluKChyZW1haW5pbmdUaW1lIC0gNjApICogMTAwMCwgbWF4VGltZW91dFRpbWUpKSxcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJlbWluZGVyKSBjbGVhclRpbWVvdXQocmVtaW5kZXIpXG4gICAgfVxuICB9LCBbdG9rZW5FeHBpcmF0aW9uLCBvcGVuTW9kYWxdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGZvcmNlTG9nT3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PlxuICAgIGNvbnN0IG5vdyA9IE1hdGgucm91bmQobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKVxuICAgIGNvbnN0IHJlbWFpbmluZ1RpbWUgPSB0eXBlb2YgdG9rZW5FeHBpcmF0aW9uID09PSAnbnVtYmVyJyA/IHRva2VuRXhwaXJhdGlvbiAtIG5vdyA6IDBcblxuICAgIGlmIChyZW1haW5pbmdUaW1lID4gMCkge1xuICAgICAgZm9yY2VMb2dPdXQgPSBzZXRUaW1lb3V0KFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgc2V0VXNlcihudWxsKVxuICAgICAgICAgIHJldm9rZVRva2VuQW5kRXhwaXJlKClcbiAgICAgICAgICByZWRpcmVjdFRvSW5hY3Rpdml0eVJvdXRlKClcbiAgICAgICAgfSxcbiAgICAgICAgTWF0aC5tYXgoTWF0aC5taW4ocmVtYWluaW5nVGltZSAqIDEwMDAsIG1heFRpbWVvdXRUaW1lKSwgMCksXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChmb3JjZUxvZ091dCkgY2xlYXJUaW1lb3V0KGZvcmNlTG9nT3V0KVxuICAgIH1cbiAgfSwgW3Rva2VuRXhwaXJhdGlvbiwgY2xvc2VBbGxNb2RhbHMsIGkxOG4sIHJlZGlyZWN0VG9JbmFjdGl2aXR5Um91dGUsIHJldm9rZVRva2VuQW5kRXhwaXJlXSlcblxuICByZXR1cm4gKFxuICAgIDxDb250ZXh0LlByb3ZpZGVyXG4gICAgICB2YWx1ZT17e1xuICAgICAgICBmZXRjaEZ1bGxVc2VyLFxuICAgICAgICBsb2dPdXQsXG4gICAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgICByZWZyZXNoQ29va2llLFxuICAgICAgICByZWZyZXNoQ29va2llQXN5bmMsXG4gICAgICAgIHJlZnJlc2hQZXJtaXNzaW9ucyxcbiAgICAgICAgc2V0UGVybWlzc2lvbnMsXG4gICAgICAgIHNldFVzZXIsXG4gICAgICAgIHRva2VuOiB0b2tlbkluTWVtb3J5LFxuICAgICAgICB1c2VyLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Db250ZXh0LlByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCB1c2VBdXRoID0gPFQgPSBVc2VyLD4oKTogQXV0aENvbnRleHQ8VD4gPT4gdXNlQ29udGV4dChDb250ZXh0KSBhcyBBdXRoQ29udGV4dDxUPlxuIl0sIm5hbWVzIjpbInVzZU1vZGFsIiwidXNlUGF0aG5hbWUiLCJ1c2VSb3V0ZXIiLCJxcyIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsInVzZUNhbGxiYWNrIiwidXNlQ29udGV4dCIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidG9hc3QiLCJ1c2VEZWJvdW5jZSIsInVzZVRyYW5zbGF0aW9uIiwicmVxdWVzdHMiLCJ1c2VDb25maWciLCJ1c2VTZWFyY2hQYXJhbXMiLCJDb250ZXh0IiwibWF4VGltZW91dFRpbWUiLCJBdXRoUHJvdmlkZXIiLCJjaGlsZHJlbiIsInNlYXJjaFBhcmFtcyIsInVzZXIiLCJzZXRVc2VyIiwidG9rZW5Jbk1lbW9yeSIsInNldFRva2VuSW5NZW1vcnkiLCJ0b2tlbkV4cGlyYXRpb24iLCJzZXRUb2tlbkV4cGlyYXRpb24iLCJwYXRobmFtZSIsInJvdXRlciIsImNvZGUiLCJjb25maWciLCJhZG1pbiIsImF1dG9Mb2dpbiIsImluYWN0aXZpdHlSb3V0ZSIsImxvZ291dEluYWN0aXZpdHlSb3V0ZSIsInVzZXJTbHVnIiwicm91dGVzIiwiYXBpIiwic2VydmVyVVJMIiwicGVybWlzc2lvbnMiLCJzZXRQZXJtaXNzaW9ucyIsImkxOG4iLCJjbG9zZUFsbE1vZGFscyIsIm9wZW5Nb2RhbCIsImxhc3RMb2NhdGlvbkNoYW5nZSIsInNldExhc3RMb2NhdGlvbkNoYW5nZSIsImRlYm91bmNlZExvY2F0aW9uQ2hhbmdlIiwiaWQiLCJyZWRpcmVjdFRvSW5hY3Rpdml0eVJvdXRlIiwid2luZG93IiwibG9jYXRpb24iLCJzdGFydHNXaXRoIiwicmVkaXJlY3RQYXJhbSIsImVuY29kZVVSSUNvbXBvbmVudCIsInJlcGxhY2UiLCJyZXZva2VUb2tlbkFuZEV4cGlyZSIsInVuZGVmaW5lZCIsInNldFRva2VuQW5kRXhwaXJhdGlvbiIsImpzb24iLCJ0b2tlbiIsInJlZnJlc2hlZFRva2VuIiwiZXhwIiwicmVmcmVzaENvb2tpZSIsImZvcmNlUmVmcmVzaCIsIm5vdyIsIk1hdGgiLCJyb3VuZCIsIkRhdGUiLCJnZXRUaW1lIiwicmVtYWluaW5nVGltZSIsInNldFRpbWVvdXQiLCJyZXF1ZXN0IiwicG9zdCIsImhlYWRlcnMiLCJsYW5ndWFnZSIsInN0YXR1cyIsImUiLCJlcnJvciIsIm1lc3NhZ2UiLCJyZWZyZXNoQ29va2llQXN5bmMiLCJza2lwU2V0VXNlciIsImxvZ091dCIsInJlZnJlc2hQZXJtaXNzaW9ucyIsInBhcmFtcyIsImxvY2FsZSIsImdldCIsInN0cmluZ2lmeSIsIkVycm9yIiwiZmV0Y2hGdWxsVXNlciIsInByZWZpbGxPbmx5IiwiYXV0b0xvZ2luUmVzdWx0IiwiYm9keSIsIkpTT04iLCJlbWFpbCIsInBhc3N3b3JkIiwiYXV0b0xvZ2luSnNvbiIsInB1c2giLCJyZW1pbmRlciIsIm1heCIsIm1pbiIsImNsZWFyVGltZW91dCIsImZvcmNlTG9nT3V0IiwiUHJvdmlkZXIiLCJ2YWx1ZSIsInVzZUF1dGgiXSwibWFwcGluZ3MiOiJBQUFBO0FBR0EsU0FBU0EsUUFBUSxRQUFRLHFCQUFvQjtBQUM3QyxTQUFTQyxXQUFXLEVBQUVDLFNBQVMsUUFBUSxrQkFBaUI7QUFDeEQsT0FBT0MsUUFBUSxLQUFJO0FBQ25CLE9BQU9DLFNBQVNDLGFBQWEsRUFBRUMsV0FBVyxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsUUFBUSxRQUFRLFFBQU87QUFDMUYsU0FBU0MsS0FBSyxRQUFRLGlCQUFnQjtBQUl0QyxPQUFPQyxpQkFBaUIsMEJBQXlCO0FBQ2pELFNBQVNDLGNBQWMsUUFBUSw4QkFBNkI7QUFDNUQsU0FBU0MsUUFBUSxRQUFRLHNCQUFxQjtBQUM5QyxTQUFTQyxTQUFTLFFBQVEsWUFBVztBQUNyQyxTQUFTQyxlQUFlLFFBQVEsa0JBQWlCO0FBQ2pELHdDQUF3QztBQUV4QyxNQUFNQyx3QkFBVVgsY0FBYyxDQUFDO0FBRS9CLE1BQU1ZLGlCQUFpQjtBQUV2QixPQUFPLE1BQU1DLGVBQXdELENBQUMsRUFBRUMsUUFBUSxFQUFFO0lBQ2hGLE1BQU0sRUFBRUMsWUFBWSxFQUFFLEdBQUdMO0lBQ3pCLE1BQU0sQ0FBQ00sTUFBTUMsUUFBUSxHQUFHYjtJQUN4QixNQUFNLENBQUNjLGVBQWVDLGlCQUFpQixHQUFHZjtJQUMxQyxNQUFN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
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
1
|
+
export { };
|
|
5
2
|
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wcm92aWRlcnMvQXV0aC90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBlcm1pc3Npb25zLCBVc2VyIH0gZnJvbSAncGF5bG9hZC9hdXRoJ1xuXG5leHBvcnQgdHlwZSBBdXRoQ29udGV4dDxUID0gVXNlcj4gPSB7XG4gIGZldGNoRnVsbFVzZXI6ICgpID0+IFByb21pc2U8dm9pZD5cbiAgbG9nT3V0OiAoKSA9PiB2b2lkXG4gIHBlcm1pc3Npb25zPzogUGVybWlzc2lvbnNcbiAgcmVmcmVzaENvb2tpZTogKGZvcmNlUmVmcmVzaD86IGJvb2xlYW4pID0+IHZvaWRcbiAgcmVmcmVzaENvb2tpZUFzeW5jOiAoKSA9PiBQcm9taXNlPFVzZXI+XG4gIHJlZnJlc2hQZXJtaXNzaW9uczogKCkgPT4gUHJvbWlzZTx2b2lkPlxuICBzZXRQZXJtaXNzaW9uczogKHBlcm1pc3Npb25zOiBQZXJtaXNzaW9ucykgPT4gdm9pZFxuICBzZXRVc2VyOiAodXNlcjogVCkgPT4gdm9pZFxuICB0b2tlbj86IHN0cmluZ1xuICB1c2VyPzogVCB8IG51bGxcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxXQVdDIn0=
|
|
@@ -1,36 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
})
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
enumerable: true,
|
|
9
|
-
get: all[name]
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
_export(exports, {
|
|
13
|
-
ClientFunctionProvider: function() {
|
|
14
|
-
return ClientFunctionProvider;
|
|
15
|
-
},
|
|
16
|
-
useAddClientFunction: function() {
|
|
17
|
-
return useAddClientFunction;
|
|
18
|
-
},
|
|
19
|
-
useClientFunctions: function() {
|
|
20
|
-
return useClientFunctions;
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
const _react = /*#__PURE__*/ _interop_require_default(require("react"));
|
|
24
|
-
function _interop_require_default(obj) {
|
|
25
|
-
return obj && obj.__esModule ? obj : {
|
|
26
|
-
default: obj
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
const AddClientFunctionContext = /*#__PURE__*/ _react.default.createContext(()=>null);
|
|
30
|
-
const ClientFunctionsContext = /*#__PURE__*/ _react.default.createContext({});
|
|
31
|
-
const ClientFunctionProvider = ({ children })=>{
|
|
32
|
-
const [clientFunctions, setClientFunctions] = _react.default.useState({});
|
|
33
|
-
const addClientFunction = _react.default.useCallback((args)=>{
|
|
2
|
+
import React from 'react';
|
|
3
|
+
const AddClientFunctionContext = /*#__PURE__*/ React.createContext(()=>null);
|
|
4
|
+
const ClientFunctionsContext = /*#__PURE__*/ React.createContext({});
|
|
5
|
+
export const ClientFunctionProvider = ({ children })=>{
|
|
6
|
+
const [clientFunctions, setClientFunctions] = React.useState({});
|
|
7
|
+
const addClientFunction = React.useCallback((args)=>{
|
|
34
8
|
setClientFunctions((state)=>{
|
|
35
9
|
const newState = {
|
|
36
10
|
...state
|
|
@@ -39,15 +13,15 @@ const ClientFunctionProvider = ({ children })=>{
|
|
|
39
13
|
return newState;
|
|
40
14
|
});
|
|
41
15
|
}, []);
|
|
42
|
-
return /*#__PURE__*/
|
|
16
|
+
return /*#__PURE__*/ React.createElement(AddClientFunctionContext.Provider, {
|
|
43
17
|
value: addClientFunction
|
|
44
|
-
}, /*#__PURE__*/
|
|
18
|
+
}, /*#__PURE__*/ React.createElement(ClientFunctionsContext.Provider, {
|
|
45
19
|
value: clientFunctions
|
|
46
20
|
}, children));
|
|
47
21
|
};
|
|
48
|
-
const useAddClientFunction = (key, func)=>{
|
|
49
|
-
const addClientFunction =
|
|
50
|
-
|
|
22
|
+
export const useAddClientFunction = (key, func)=>{
|
|
23
|
+
const addClientFunction = React.useContext(AddClientFunctionContext);
|
|
24
|
+
React.useEffect(()=>{
|
|
51
25
|
addClientFunction({
|
|
52
26
|
func,
|
|
53
27
|
key
|
|
@@ -58,8 +32,8 @@ const useAddClientFunction = (key, func)=>{
|
|
|
58
32
|
addClientFunction
|
|
59
33
|
]);
|
|
60
34
|
};
|
|
61
|
-
const useClientFunctions = ()=>{
|
|
62
|
-
return
|
|
35
|
+
export const useClientFunctions = ()=>{
|
|
36
|
+
return React.useContext(ClientFunctionsContext);
|
|
63
37
|
};
|
|
64
38
|
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wcm92aWRlcnMvQ2xpZW50RnVuY3Rpb24vaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG50eXBlIEFkZENsaWVudEZ1bmN0aW9uQ29udGV4dFR5cGUgPSAoZnVuYzogYW55KSA9PiB2b2lkXG50eXBlIENsaWVudEZ1bmN0aW9uc0NvbnRleHRUeXBlID0gUmVjb3JkPHN0cmluZywgYW55PlxuXG5jb25zdCBBZGRDbGllbnRGdW5jdGlvbkNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PEFkZENsaWVudEZ1bmN0aW9uQ29udGV4dFR5cGU+KCgpID0+IG51bGwpXG5jb25zdCBDbGllbnRGdW5jdGlvbnNDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxDbGllbnRGdW5jdGlvbnNDb250ZXh0VHlwZT4oe30pXG5cbnR5cGUgQWRkRnVuY3Rpb25BcmdzID0geyBmdW5jOiBhbnk7IGtleTogc3RyaW5nIH1cblxuZXhwb3J0IGNvbnN0IENsaWVudEZ1bmN0aW9uUHJvdmlkZXI6IFJlYWN0LkZDPHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB9PiA9ICh7IGNoaWxkcmVuIH0pID0+IHtcbiAgY29uc3QgW2NsaWVudEZ1bmN0aW9ucywgc2V0Q2xpZW50RnVuY3Rpb25zXSA9IFJlYWN0LnVzZVN0YXRlKHt9KVxuXG4gIGNvbnN0IGFkZENsaWVudEZ1bmN0aW9uID0gUmVhY3QudXNlQ2FsbGJhY2soKGFyZ3M6IEFkZEZ1bmN0aW9uQXJncykgPT4ge1xuICAgIHNldENsaWVudEZ1bmN0aW9ucygoc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0geyAuLi5zdGF0ZSB9XG4gICAgICBuZXdTdGF0ZVthcmdzLmtleV0gPSBhcmdzLmZ1bmNcbiAgICAgIHJldHVybiBuZXdTdGF0ZVxuICAgIH0pXG4gIH0sIFtdKVxuXG4gIHJldHVybiAoXG4gICAgPEFkZENsaWVudEZ1bmN0aW9uQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17YWRkQ2xpZW50RnVuY3Rpb259PlxuICAgICAgPENsaWVudEZ1bmN0aW9uc0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NsaWVudEZ1bmN0aW9uc30+
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wcm92aWRlcnMvQ2xpZW50RnVuY3Rpb24vaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG50eXBlIEFkZENsaWVudEZ1bmN0aW9uQ29udGV4dFR5cGUgPSAoZnVuYzogYW55KSA9PiB2b2lkXG50eXBlIENsaWVudEZ1bmN0aW9uc0NvbnRleHRUeXBlID0gUmVjb3JkPHN0cmluZywgYW55PlxuXG5jb25zdCBBZGRDbGllbnRGdW5jdGlvbkNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PEFkZENsaWVudEZ1bmN0aW9uQ29udGV4dFR5cGU+KCgpID0+IG51bGwpXG5jb25zdCBDbGllbnRGdW5jdGlvbnNDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxDbGllbnRGdW5jdGlvbnNDb250ZXh0VHlwZT4oe30pXG5cbnR5cGUgQWRkRnVuY3Rpb25BcmdzID0geyBmdW5jOiBhbnk7IGtleTogc3RyaW5nIH1cblxuZXhwb3J0IGNvbnN0IENsaWVudEZ1bmN0aW9uUHJvdmlkZXI6IFJlYWN0LkZDPHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB9PiA9ICh7IGNoaWxkcmVuIH0pID0+IHtcbiAgY29uc3QgW2NsaWVudEZ1bmN0aW9ucywgc2V0Q2xpZW50RnVuY3Rpb25zXSA9IFJlYWN0LnVzZVN0YXRlKHt9KVxuXG4gIGNvbnN0IGFkZENsaWVudEZ1bmN0aW9uID0gUmVhY3QudXNlQ2FsbGJhY2soKGFyZ3M6IEFkZEZ1bmN0aW9uQXJncykgPT4ge1xuICAgIHNldENsaWVudEZ1bmN0aW9ucygoc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0geyAuLi5zdGF0ZSB9XG4gICAgICBuZXdTdGF0ZVthcmdzLmtleV0gPSBhcmdzLmZ1bmNcbiAgICAgIHJldHVybiBuZXdTdGF0ZVxuICAgIH0pXG4gIH0sIFtdKVxuXG4gIHJldHVybiAoXG4gICAgPEFkZENsaWVudEZ1bmN0aW9uQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17YWRkQ2xpZW50RnVuY3Rpb259PlxuICAgICAgPENsaWVudEZ1bmN0aW9uc0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NsaWVudEZ1bmN0aW9uc30+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvQ2xpZW50RnVuY3Rpb25zQ29udGV4dC5Qcm92aWRlcj5cbiAgICA8L0FkZENsaWVudEZ1bmN0aW9uQ29udGV4dC5Qcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgdXNlQWRkQ2xpZW50RnVuY3Rpb24gPSAoa2V5OiBzdHJpbmcsIGZ1bmM6IGFueSkgPT4ge1xuICBjb25zdCBhZGRDbGllbnRGdW5jdGlvbiA9IFJlYWN0LnVzZUNvbnRleHQoQWRkQ2xpZW50RnVuY3Rpb25Db250ZXh0KVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkQ2xpZW50RnVuY3Rpb24oe1xuICAgICAgZnVuYyxcbiAgICAgIGtleSxcbiAgICB9KVxuICB9LCBbZnVuYywga2V5LCBhZGRDbGllbnRGdW5jdGlvbl0pXG59XG5cbmV4cG9ydCBjb25zdCB1c2VDbGllbnRGdW5jdGlvbnMgPSAoKSA9PiB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KENsaWVudEZ1bmN0aW9uc0NvbnRleHQpXG59XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJBZGRDbGllbnRGdW5jdGlvbkNvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiQ2xpZW50RnVuY3Rpb25zQ29udGV4dCIsIkNsaWVudEZ1bmN0aW9uUHJvdmlkZXIiLCJjaGlsZHJlbiIsImNsaWVudEZ1bmN0aW9ucyIsInNldENsaWVudEZ1bmN0aW9ucyIsInVzZVN0YXRlIiwiYWRkQ2xpZW50RnVuY3Rpb24iLCJ1c2VDYWxsYmFjayIsImFyZ3MiLCJzdGF0ZSIsIm5ld1N0YXRlIiwia2V5IiwiZnVuYyIsIlByb3ZpZGVyIiwidmFsdWUiLCJ1c2VBZGRDbGllbnRGdW5jdGlvbiIsInVzZUNvbnRleHQiLCJ1c2VFZmZlY3QiLCJ1c2VDbGllbnRGdW5jdGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsT0FBT0EsV0FBVyxRQUFPO0FBS3pCLE1BQU1DLHlDQUEyQkQsTUFBTUUsYUFBYSxDQUErQixJQUFNO0FBQ3pGLE1BQU1DLHVDQUF5QkgsTUFBTUUsYUFBYSxDQUE2QixDQUFDO0FBSWhGLE9BQU8sTUFBTUUseUJBQWtFLENBQUMsRUFBRUMsUUFBUSxFQUFFO0lBQzFGLE1BQU0sQ0FBQ0MsaUJBQWlCQyxtQkFBbUIsR0FBR1AsTUFBTVEsUUFBUSxDQUFDLENBQUM7SUFFOUQsTUFBTUMsb0JBQW9CVCxNQUFNVSxXQUFXLENBQUMsQ0FBQ0M7UUFDM0NKLG1CQUFtQixDQUFDSztZQUNsQixNQUFNQyxXQUFXO2dCQUFFLEdBQUdELEtBQUs7WUFBQztZQUM1QkMsUUFBUSxDQUFDRixLQUFLRyxHQUFHLENBQUMsR0FBR0gsS0FBS0ksSUFBSTtZQUM5QixPQUFPRjtRQUNUO0lBQ0YsR0FBRyxFQUFFO0lBRUwscUJBQ0Usb0JBQUNaLHlCQUF5QmUsUUFBUTtRQUFDQyxPQUFPUjtxQkFDeEMsb0JBQUNOLHVCQUF1QmEsUUFBUTtRQUFDQyxPQUFPWDtPQUNyQ0Q7QUFJVCxFQUFDO0FBRUQsT0FBTyxNQUFNYSx1QkFBdUIsQ0FBQ0osS0FBYUM7SUFDaEQsTUFBTU4sb0JBQW9CVCxNQUFNbUIsVUFBVSxDQUFDbEI7SUFFM0NELE1BQU1vQixTQUFTLENBQUM7UUFDZFgsa0JBQWtCO1lBQ2hCTTtZQUNBRDtRQUNGO0lBQ0YsR0FBRztRQUFDQztRQUFNRDtRQUFLTDtLQUFrQjtBQUNuQyxFQUFDO0FBRUQsT0FBTyxNQUFNWSxxQkFBcUI7SUFDaEMsT0FBT3JCLE1BQU1tQixVQUFVLENBQUNoQjtBQUMxQixFQUFDIn0=
|