{"version":3,"file":"js/914-1953f0b337005e1a1efa.js","mappings":"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","sources":["webpack://app/./node_modules/@mui/material/LinearProgress/linearProgressClasses.js","webpack://app/./node_modules/@mui/material/LinearProgress/LinearProgress.js","webpack://app/./node_modules/@rest-hooks/use-enhanced-reducer/lib/usePromisifiedDispatch.js","webpack://app/./node_modules/@rest-hooks/use-enhanced-reducer/lib/useEnhancedReducer.js","webpack://app/./node_modules/@react-dnd/invariant/dist/index.js","webpack://app/./node_modules/@rest-hooks/core/lib/actionTypes.js","webpack://app/./node_modules/@rest-hooks/normalizr/lib/WeakListMap.js","webpack://app/./node_modules/@rest-hooks/normalizr/lib/denormalize.js","webpack://app/./node_modules/@rest-hooks/normalizr/lib/inferResults.js","webpack://app/./node_modules/@rest-hooks/core/lib/controller/createReceive.js","webpack://app/./node_modules/@rest-hooks/core/lib/state/selectors/selectMeta.js","webpack://app/./node_modules/@rest-hooks/core/lib/controller/Controller.js","webpack://app/./node_modules/@rest-hooks/core/lib/controller/createFetch.js","webpack://app/./node_modules/@rest-hooks/core/lib/controller/createInvalidate.js","webpack://app/./node_modules/@rest-hooks/core/lib/controller/createReset.js","webpack://app/./node_modules/@rest-hooks/core/lib/controller/createSubscription.js","webpack://app/./node_modules/@rest-hooks/core/lib/react-integration/context.js","webpack://app/./node_modules/@rest-hooks/core/lib/state/actions/createReceive.js","webpack://app/./node_modules/@rest-hooks/normalizr/lib/normalize.js","webpack://app/./node_modules/@rest-hooks/endpoint/lib/AbortOptimistic.js","webpack://app/./node_modules/@rest-hooks/core/lib/state/createReducer.js","webpack://app/./node_modules/@rest-hooks/core/lib/controller/createOptimistic.js","webpack://app/./node_modules/@rest-hooks/core/lib/state/applyUpdatersToResults.js","webpack://app/./node_modules/@rest-hooks/endpoint/lib/Expiry.js","webpack://app/./node_modules/@rest-hooks/normalizr/lib/entities/Entity.js","webpack://app/./node_modules/@rest-hooks/normalizr/lib/schemas/Polymorphic.js","webpack://app/./node_modules/@rest-hooks/normalizr/lib/schemas/Array.js","webpack://app/./node_modules/@rest-hooks/normalizr/lib/schemas/ImmutableUtils.js","webpack://app/./node_modules/@rest-hooks/normalizr/lib/schemas/Object.js","webpack://app/./node_modules/@rest-hooks/normalizr/lib/special.js","webpack://app/./node_modules/react-dnd-html5-backend/dist/utils/js_utils.js","webpack://app/./node_modules/react-dnd-html5-backend/dist/EnterLeaveCounter.js","webpack://app/./node_modules/react-dnd-html5-backend/dist/NativeDragSources/NativeDragSource.js","webpack://app/./node_modules/react-dnd-html5-backend/dist/NativeTypes.js","webpack://app/./node_modules/react-dnd-html5-backend/dist/NativeDragSources/getDataFromDataTransfer.js","webpack://app/./node_modules/react-dnd-html5-backend/dist/NativeDragSources/nativeTypesConfig.js","webpack://app/./node_modules/react-dnd-html5-backend/dist/NativeDragSources/index.js","webpack://app/./node_modules/react-dnd-html5-backend/dist/BrowserDetector.js","webpack://app/./node_modules/react-dnd-html5-backend/dist/MonotonicInterpolant.js","webpack://app/./node_modules/react-dnd-html5-backend/dist/OffsetUtils.js","webpack://app/./node_modules/react-dnd-html5-backend/dist/OptionsReader.js","webpack://app/./node_modules/react-dnd-html5-backend/dist/HTML5BackendImpl.js","webpack://app/./node_modules/react-dnd-html5-backend/dist/index.js","webpack://app/./node_modules/react-dnd/dist/core/DndContext.js","webpack://app/./node_modules/redux/es/redux.js","webpack://app/./node_modules/dnd-core/dist/utils/js_utils.js","webpack://app/./node_modules/dnd-core/dist/actions/dragDrop/types.js","webpack://app/./node_modules/dnd-core/dist/actions/dragDrop/local/setClientOffset.js","webpack://app/./node_modules/dnd-core/dist/actions/dragDrop/beginDrag.js","webpack://app/./node_modules/dnd-core/dist/actions/dragDrop/drop.js","webpack://app/./node_modules/dnd-core/dist/actions/dragDrop/endDrag.js","webpack://app/./node_modules/dnd-core/dist/utils/matchesType.js","webpack://app/./node_modules/dnd-core/dist/actions/dragDrop/hover.js","webpack://app/./node_modules/dnd-core/dist/actions/dragDrop/publishDragSource.js","webpack://app/./node_modules/dnd-core/dist/classes/DragDropManagerImpl.js","webpack://app/./node_modules/dnd-core/dist/actions/dragDrop/index.js","webpack://app/./node_modules/dnd-core/dist/utils/coords.js","webpack://app/./node_modules/dnd-core/dist/utils/dirtiness.js","webpack://app/./node_modules/dnd-core/dist/classes/DragDropMonitorImpl.js","webpack://app/./node_modules/@react-dnd/asap/dist/makeRequestCall.js","webpack://app/./node_modules/@react-dnd/asap/dist/RawTask.js","webpack://app/./node_modules/@react-dnd/asap/dist/asap.js","webpack://app/./node_modules/@react-dnd/asap/dist/AsapQueue.js","webpack://app/./node_modules/@react-dnd/asap/dist/TaskFactory.js","webpack://app/./node_modules/dnd-core/dist/actions/registry.js","webpack://app/./node_modules/dnd-core/dist/contracts.js","webpack://app/./node_modules/dnd-core/dist/interfaces.js","webpack://app/./node_modules/dnd-core/dist/utils/getNextUniqueId.js","webpack://app/./node_modules/dnd-core/dist/classes/HandlerRegistryImpl.js","webpack://app/./node_modules/dnd-core/dist/utils/equality.js","webpack://app/./node_modules/dnd-core/dist/reducers/dirtyHandlerIds.js","webpack://app/./node_modules/dnd-core/dist/reducers/dragOffset.js","webpack://app/./node_modules/dnd-core/dist/reducers/dragOperation.js","webpack://app/./node_modules/dnd-core/dist/reducers/refCount.js","webpack://app/./node_modules/dnd-core/dist/reducers/stateId.js","webpack://app/./node_modules/dnd-core/dist/reducers/index.js","webpack://app/./node_modules/dnd-core/dist/createDragDropManager.js","webpack://app/./node_modules/react-dnd/dist/core/DndProvider.js","webpack://app/./node_modules/rest-hooks/node_modules/@babel/runtime/helpers/esm/jsx.js","webpack://app/./node_modules/rest-hooks/lib/react-integration/NetworkErrorBoundary.js","webpack://app/./node_modules/@rest-hooks/core/node_modules/@babel/runtime/helpers/esm/jsx.js","webpack://app/./node_modules/@rest-hooks/core/lib/state/RIC.js","webpack://app/./node_modules/@rest-hooks/core/lib/state/actions/createReceiveError.js","webpack://app/./node_modules/@rest-hooks/core/lib/state/NetworkManager.js","webpack://app/./node_modules/@rest-hooks/core/lib/react-integration/provider/BackupBoundary.js","webpack://app/./node_modules/@rest-hooks/use-enhanced-reducer/lib/index.js","webpack://app/./node_modules/@rest-hooks/core/lib/react-integration/provider/CacheStore.js","webpack://app/./node_modules/@rest-hooks/core/lib/react-integration/provider/CacheProvider.js","webpack://app/./node_modules/@rest-hooks/core/lib/state/applyManager.js","webpack://app/./node_modules/rest-hooks/lib/manager/SubscriptionManager.js","webpack://app/./node_modules/rest-hooks/lib/manager/DefaultConnectionListener.js","webpack://app/./node_modules/rest-hooks/lib/manager/PollingSubscription.js","webpack://app/./node_modules/rest-hooks/lib/react-integration/provider/index.js"],"sourcesContent":["import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getLinearProgressUtilityClass(slot) {\n return generateUtilityClass('MuiLinearProgress', slot);\n}\nconst linearProgressClasses = generateUtilityClasses('MuiLinearProgress', ['root', 'colorPrimary', 'colorSecondary', 'determinate', 'indeterminate', 'buffer', 'query', 'dashed', 'dashedColorPrimary', 'dashedColorSecondary', 'bar', 'barColorPrimary', 'barColorSecondary', 'bar1Indeterminate', 'bar1Determinate', 'bar1Buffer', 'bar2Indeterminate', 'bar2Buffer']);\nexport default linearProgressClasses;","'use client';\n\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"className\", \"color\", \"value\", \"valueBuffer\", \"variant\"];\nlet _ = t => t,\n _t,\n _t2,\n _t3,\n _t4,\n _t5,\n _t6;\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { keyframes, css } from '@mui/system';\nimport { darken, lighten } from '@mui/system/colorManipulator';\nimport { useRtl } from '@mui/system/RtlProvider';\nimport capitalize from '../utils/capitalize';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport { getLinearProgressUtilityClass } from './linearProgressClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst TRANSITION_DURATION = 4; // seconds\nconst indeterminate1Keyframe = keyframes(_t || (_t = _`\n 0% {\n left: -35%;\n right: 100%;\n }\n\n 60% {\n left: 100%;\n right: -90%;\n }\n\n 100% {\n left: 100%;\n right: -90%;\n }\n`));\nconst indeterminate2Keyframe = keyframes(_t2 || (_t2 = _`\n 0% {\n left: -200%;\n right: 100%;\n }\n\n 60% {\n left: 107%;\n right: -8%;\n }\n\n 100% {\n left: 107%;\n right: -8%;\n }\n`));\nconst bufferKeyframe = keyframes(_t3 || (_t3 = _`\n 0% {\n opacity: 1;\n background-position: 0 -23px;\n }\n\n 60% {\n opacity: 0;\n background-position: 0 -23px;\n }\n\n 100% {\n opacity: 1;\n background-position: -200px -23px;\n }\n`));\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n variant,\n color\n } = ownerState;\n const slots = {\n root: ['root', `color${capitalize(color)}`, variant],\n dashed: ['dashed', `dashedColor${capitalize(color)}`],\n bar1: ['bar', `barColor${capitalize(color)}`, (variant === 'indeterminate' || variant === 'query') && 'bar1Indeterminate', variant === 'determinate' && 'bar1Determinate', variant === 'buffer' && 'bar1Buffer'],\n bar2: ['bar', variant !== 'buffer' && `barColor${capitalize(color)}`, variant === 'buffer' && `color${capitalize(color)}`, (variant === 'indeterminate' || variant === 'query') && 'bar2Indeterminate', variant === 'buffer' && 'bar2Buffer']\n };\n return composeClasses(slots, getLinearProgressUtilityClass, classes);\n};\nconst getColorShade = (theme, color) => {\n if (color === 'inherit') {\n return 'currentColor';\n }\n if (theme.vars) {\n return theme.vars.palette.LinearProgress[`${color}Bg`];\n }\n return theme.palette.mode === 'light' ? lighten(theme.palette[color].main, 0.62) : darken(theme.palette[color].main, 0.5);\n};\nconst LinearProgressRoot = styled('span', {\n name: 'MuiLinearProgress',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, styles[`color${capitalize(ownerState.color)}`], styles[ownerState.variant]];\n }\n})(({\n ownerState,\n theme\n}) => _extends({\n position: 'relative',\n overflow: 'hidden',\n display: 'block',\n height: 4,\n zIndex: 0,\n // Fix Safari's bug during composition of different paint.\n '@media print': {\n colorAdjust: 'exact'\n },\n backgroundColor: getColorShade(theme, ownerState.color)\n}, ownerState.color === 'inherit' && ownerState.variant !== 'buffer' && {\n backgroundColor: 'none',\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'currentColor',\n opacity: 0.3\n }\n}, ownerState.variant === 'buffer' && {\n backgroundColor: 'transparent'\n}, ownerState.variant === 'query' && {\n transform: 'rotate(180deg)'\n}));\nconst LinearProgressDashed = styled('span', {\n name: 'MuiLinearProgress',\n slot: 'Dashed',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.dashed, styles[`dashedColor${capitalize(ownerState.color)}`]];\n }\n})(({\n ownerState,\n theme\n}) => {\n const backgroundColor = getColorShade(theme, ownerState.color);\n return _extends({\n position: 'absolute',\n marginTop: 0,\n height: '100%',\n width: '100%'\n }, ownerState.color === 'inherit' && {\n opacity: 0.3\n }, {\n backgroundImage: `radial-gradient(${backgroundColor} 0%, ${backgroundColor} 16%, transparent 42%)`,\n backgroundSize: '10px 10px',\n backgroundPosition: '0 -23px'\n });\n}, css(_t4 || (_t4 = _`\n animation: ${0} 3s infinite linear;\n `), bufferKeyframe));\nconst LinearProgressBar1 = styled('span', {\n name: 'MuiLinearProgress',\n slot: 'Bar1',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.bar, styles[`barColor${capitalize(ownerState.color)}`], (ownerState.variant === 'indeterminate' || ownerState.variant === 'query') && styles.bar1Indeterminate, ownerState.variant === 'determinate' && styles.bar1Determinate, ownerState.variant === 'buffer' && styles.bar1Buffer];\n }\n})(({\n ownerState,\n theme\n}) => _extends({\n width: '100%',\n position: 'absolute',\n left: 0,\n bottom: 0,\n top: 0,\n transition: 'transform 0.2s linear',\n transformOrigin: 'left',\n backgroundColor: ownerState.color === 'inherit' ? 'currentColor' : (theme.vars || theme).palette[ownerState.color].main\n}, ownerState.variant === 'determinate' && {\n transition: `transform .${TRANSITION_DURATION}s linear`\n}, ownerState.variant === 'buffer' && {\n zIndex: 1,\n transition: `transform .${TRANSITION_DURATION}s linear`\n}), ({\n ownerState\n}) => (ownerState.variant === 'indeterminate' || ownerState.variant === 'query') && css(_t5 || (_t5 = _`\n width: auto;\n animation: ${0} 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;\n `), indeterminate1Keyframe));\nconst LinearProgressBar2 = styled('span', {\n name: 'MuiLinearProgress',\n slot: 'Bar2',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.bar, styles[`barColor${capitalize(ownerState.color)}`], (ownerState.variant === 'indeterminate' || ownerState.variant === 'query') && styles.bar2Indeterminate, ownerState.variant === 'buffer' && styles.bar2Buffer];\n }\n})(({\n ownerState,\n theme\n}) => _extends({\n width: '100%',\n position: 'absolute',\n left: 0,\n bottom: 0,\n top: 0,\n transition: 'transform 0.2s linear',\n transformOrigin: 'left'\n}, ownerState.variant !== 'buffer' && {\n backgroundColor: ownerState.color === 'inherit' ? 'currentColor' : (theme.vars || theme).palette[ownerState.color].main\n}, ownerState.color === 'inherit' && {\n opacity: 0.3\n}, ownerState.variant === 'buffer' && {\n backgroundColor: getColorShade(theme, ownerState.color),\n transition: `transform .${TRANSITION_DURATION}s linear`\n}), ({\n ownerState\n}) => (ownerState.variant === 'indeterminate' || ownerState.variant === 'query') && css(_t6 || (_t6 = _`\n width: auto;\n animation: ${0} 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.15s infinite;\n `), indeterminate2Keyframe));\n\n/**\n * ## ARIA\n *\n * If the progress bar is describing the loading progress of a particular region of a page,\n * you should use `aria-describedby` to point to the progress bar, and set the `aria-busy`\n * attribute to `true` on that region until it has finished loading.\n */\nconst LinearProgress = /*#__PURE__*/React.forwardRef(function LinearProgress(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiLinearProgress'\n });\n const {\n className,\n color = 'primary',\n value,\n valueBuffer,\n variant = 'indeterminate'\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const ownerState = _extends({}, props, {\n color,\n variant\n });\n const classes = useUtilityClasses(ownerState);\n const isRtl = useRtl();\n const rootProps = {};\n const inlineStyles = {\n bar1: {},\n bar2: {}\n };\n if (variant === 'determinate' || variant === 'buffer') {\n if (value !== undefined) {\n rootProps['aria-valuenow'] = Math.round(value);\n rootProps['aria-valuemin'] = 0;\n rootProps['aria-valuemax'] = 100;\n let transform = value - 100;\n if (isRtl) {\n transform = -transform;\n }\n inlineStyles.bar1.transform = `translateX(${transform}%)`;\n } else if (process.env.NODE_ENV !== 'production') {\n console.error('MUI: You need to provide a value prop ' + 'when using the determinate or buffer variant of LinearProgress .');\n }\n }\n if (variant === 'buffer') {\n if (valueBuffer !== undefined) {\n let transform = (valueBuffer || 0) - 100;\n if (isRtl) {\n transform = -transform;\n }\n inlineStyles.bar2.transform = `translateX(${transform}%)`;\n } else if (process.env.NODE_ENV !== 'production') {\n console.error('MUI: You need to provide a valueBuffer prop ' + 'when using the buffer variant of LinearProgress.');\n }\n }\n return /*#__PURE__*/_jsxs(LinearProgressRoot, _extends({\n className: clsx(classes.root, className),\n ownerState: ownerState,\n role: \"progressbar\"\n }, rootProps, {\n ref: ref\n }, other, {\n children: [variant === 'buffer' ? /*#__PURE__*/_jsx(LinearProgressDashed, {\n className: classes.dashed,\n ownerState: ownerState\n }) : null, /*#__PURE__*/_jsx(LinearProgressBar1, {\n className: classes.bar1,\n ownerState: ownerState,\n style: inlineStyles.bar1\n }), variant === 'determinate' ? null : /*#__PURE__*/_jsx(LinearProgressBar2, {\n className: classes.bar2,\n ownerState: ownerState,\n style: inlineStyles.bar2\n })]\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? LinearProgress.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the d.ts file and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The color of the component.\n * It supports both default and custom theme colors, which can be added as shown in the\n * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n * @default 'primary'\n */\n color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'primary', 'secondary']), PropTypes.string]),\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * The value of the progress indicator for the determinate and buffer variants.\n * Value between 0 and 100.\n */\n value: PropTypes.number,\n /**\n * The value for the buffer variant.\n * Value between 0 and 100.\n */\n valueBuffer: PropTypes.number,\n /**\n * The variant to use.\n * Use indeterminate or query when there is no progress value.\n * @default 'indeterminate'\n */\n variant: PropTypes.oneOf(['buffer', 'determinate', 'indeterminate', 'query'])\n} : void 0;\nexport default LinearProgress;","import { useRef, useCallback, useEffect } from 'react';\n\n/** Turns a dispatch function into one that resolves once its been commited */\nexport default function usePromisifiedDispatch(dispatch, state) {\n const dispatchPromiseRef = useRef(null);\n useEffect(() => {\n if (dispatchPromiseRef.current) {\n dispatchPromiseRef.current.resolve();\n dispatchPromiseRef.current = null;\n }\n }, [state]);\n return useCallback(action => {\n if (!dispatchPromiseRef.current) {\n dispatchPromiseRef.current = NewPromiseHolder();\n } // we use the promise before dispatch so we know it will be resolved\n // however that can also make the ref clear, so we need to make sure we have to promise before\n // dispatching so we can return it even if the ref changes.\n\n\n const promise = dispatchPromiseRef.current.promise;\n dispatch(action);\n return promise;\n }, [dispatch]);\n}\n\nfunction NewPromiseHolder() {\n // any so we can build it\n const promiseHolder = {};\n promiseHolder.promise = new Promise(resolve => {\n promiseHolder.resolve = resolve;\n });\n return promiseHolder;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91c2VQcm9taXNpZmllZERpc3BhdGNoLnRzIl0sIm5hbWVzIjpbInVzZVJlZiIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlUHJvbWlzaWZpZWREaXNwYXRjaCIsImRpc3BhdGNoIiwic3RhdGUiLCJkaXNwYXRjaFByb21pc2VSZWYiLCJjdXJyZW50IiwicmVzb2x2ZSIsImFjdGlvbiIsIk5ld1Byb21pc2VIb2xkZXIiLCJwcm9taXNlIiwicHJvbWlzZUhvbGRlciIsIlByb21pc2UiXSwibWFwcGluZ3MiOiJBQUFBLFNBQWdCQSxNQUFoQixFQUF3QkMsV0FBeEIsRUFBcUNDLFNBQXJDLFFBQXNELE9BQXREOztBQUlBO0FBQ0EsZUFBZSxTQUFTQyxzQkFBVCxDQUdiQyxRQUhhLEVBSWJDLEtBSmEsRUFLYjtBQUNBLFFBQU1DLGtCQUFrQixHQUFHTixNQUFNLENBQXVCLElBQXZCLENBQWpDO0FBQ0FFLEVBQUFBLFNBQVMsQ0FBQyxNQUFNO0FBQ2QsUUFBSUksa0JBQWtCLENBQUNDLE9BQXZCLEVBQWdDO0FBQzlCRCxNQUFBQSxrQkFBa0IsQ0FBQ0MsT0FBbkIsQ0FBMkJDLE9BQTNCO0FBQ0FGLE1BQUFBLGtCQUFrQixDQUFDQyxPQUFuQixHQUE2QixJQUE3QjtBQUNEO0FBQ0YsR0FMUSxFQUtOLENBQUNGLEtBQUQsQ0FMTSxDQUFUO0FBT0EsU0FBT0osV0FBVyxDQUNmUSxNQUFELElBQW9DO0FBQ2xDLFFBQUksQ0FBQ0gsa0JBQWtCLENBQUNDLE9BQXhCLEVBQWlDO0FBQy9CRCxNQUFBQSxrQkFBa0IsQ0FBQ0MsT0FBbkIsR0FBNkJHLGdCQUFnQixFQUE3QztBQUNELEtBSGlDLENBSWxDO0FBQ0E7QUFDQTs7O0FBQ0EsVUFBTUMsT0FBTyxHQUFHTCxrQkFBa0IsQ0FBQ0MsT0FBbkIsQ0FBMkJJLE9BQTNDO0FBQ0FQLElBQUFBLFFBQVEsQ0FBQ0ssTUFBRCxDQUFSO0FBQ0EsV0FBT0UsT0FBUDtBQUNELEdBWGUsRUFZaEIsQ0FBQ1AsUUFBRCxDQVpnQixDQUFsQjtBQWNEOztBQUVELFNBQVNNLGdCQUFULEdBQTJDO0FBQ3pDO0FBQ0EsUUFBTUUsYUFBa0IsR0FBRyxFQUEzQjtBQUNBQSxFQUFBQSxhQUFhLENBQUNELE9BQWQsR0FBd0IsSUFBSUUsT0FBSixDQUFZTCxPQUFPLElBQUk7QUFDN0NJLElBQUFBLGFBQWEsQ0FBQ0osT0FBZCxHQUF3QkEsT0FBeEI7QUFDRCxHQUZ1QixDQUF4QjtBQUdBLFNBQU9JLGFBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VSZWYsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbnR5cGUgUHJvbWlzZUhvbGRlciA9IHsgcHJvbWlzZTogUHJvbWlzZTx2b2lkPjsgcmVzb2x2ZTogKCkgPT4gdm9pZCB9O1xuXG4vKiogVHVybnMgYSBkaXNwYXRjaCBmdW5jdGlvbiBpbnRvIG9uZSB0aGF0IHJlc29sdmVzIG9uY2UgaXRzIGJlZW4gY29tbWl0ZWQgKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVByb21pc2lmaWVkRGlzcGF0Y2g8XG4gIFIgZXh0ZW5kcyBSZWFjdC5SZWR1Y2VyPGFueSwgYW55Pixcbj4oXG4gIGRpc3BhdGNoOiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5SZWR1Y2VyQWN0aW9uPFI+PixcbiAgc3RhdGU6IFJlYWN0LlJlZHVjZXJTdGF0ZTxSPixcbikge1xuICBjb25zdCBkaXNwYXRjaFByb21pc2VSZWYgPSB1c2VSZWY8bnVsbCB8IFByb21pc2VIb2xkZXI+KG51bGwpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkaXNwYXRjaFByb21pc2VSZWYuY3VycmVudCkge1xuICAgICAgZGlzcGF0Y2hQcm9taXNlUmVmLmN1cnJlbnQucmVzb2x2ZSgpO1xuICAgICAgZGlzcGF0Y2hQcm9taXNlUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfSwgW3N0YXRlXSk7XG5cbiAgcmV0dXJuIHVzZUNhbGxiYWNrKFxuICAgIChhY3Rpb246IFJlYWN0LlJlZHVjZXJBY3Rpb248Uj4pID0+IHtcbiAgICAgIGlmICghZGlzcGF0Y2hQcm9taXNlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgZGlzcGF0Y2hQcm9taXNlUmVmLmN1cnJlbnQgPSBOZXdQcm9taXNlSG9sZGVyKCk7XG4gICAgICB9XG4gICAgICAvLyB3ZSB1c2UgdGhlIHByb21pc2UgYmVmb3JlIGRpc3BhdGNoIHNvIHdlIGtub3cgaXQgd2lsbCBiZSByZXNvbHZlZFxuICAgICAgLy8gaG93ZXZlciB0aGF0IGNhbiBhbHNvIG1ha2UgdGhlIHJlZiBjbGVhciwgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZSB0byBwcm9taXNlIGJlZm9yZVxuICAgICAgLy8gZGlzcGF0Y2hpbmcgc28gd2UgY2FuIHJldHVybiBpdCBldmVuIGlmIHRoZSByZWYgY2hhbmdlcy5cbiAgICAgIGNvbnN0IHByb21pc2UgPSBkaXNwYXRjaFByb21pc2VSZWYuY3VycmVudC5wcm9taXNlO1xuICAgICAgZGlzcGF0Y2goYWN0aW9uKTtcbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH0sXG4gICAgW2Rpc3BhdGNoXSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gTmV3UHJvbWlzZUhvbGRlcigpOiBQcm9taXNlSG9sZGVyIHtcbiAgLy8gYW55IHNvIHdlIGNhbiBidWlsZCBpdFxuICBjb25zdCBwcm9taXNlSG9sZGVyOiBhbnkgPSB7fTtcbiAgcHJvbWlzZUhvbGRlci5wcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgcHJvbWlzZUhvbGRlci5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgfSk7XG4gIHJldHVybiBwcm9taXNlSG9sZGVyO1xufVxuIl19","import { useReducer, useMemo, useRef, useEffect } from 'react';\nimport usePromisifiedDispatch from './usePromisifiedDispatch';\nexport const unsetDispatch = () => {\n throw new Error(`Dispatching while constructing your middleware is not allowed. ` + `Other middleware would not be applied to this dispatch.`);\n};\n/** Similar to useReducer(), but with redux-like middleware\n *\n * Supports async operations in concurrent mode by returning a promise on dispatch\n * Promise resolves when results are committed\n */\n\nexport default function useEnhancedReducer(reducer, startingState, middlewares) {\n const stateRef = useRef(startingState);\n const [state, realDispatch] = useReducer(reducer, startingState);\n useEffect(() => {\n stateRef.current = state;\n }, [state]);\n const dispatchWithPromise = usePromisifiedDispatch(realDispatch, state);\n const outerDispatch = useMemo(() => {\n let dispatch = unsetDispatch; // closure here around dispatch allows us to change it after middleware is constructed\n\n const middlewareAPI = {\n getState: () => stateRef.current,\n dispatch: action => dispatch(action)\n };\n const chain = middlewares.map(middleware => middleware(middlewareAPI));\n dispatch = compose(chain)(dispatchWithPromise);\n return dispatch; // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dispatchWithPromise, ...middlewares]);\n return [state, outerDispatch];\n}\n\nconst compose = fns => initial => fns.reduceRight((v, f) => f(v), initial);\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91c2VFbmhhbmNlZFJlZHVjZXIudHMiXSwibmFtZXMiOlsidXNlUmVkdWNlciIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJ1c2VQcm9taXNpZmllZERpc3BhdGNoIiwidW5zZXREaXNwYXRjaCIsIkVycm9yIiwidXNlRW5oYW5jZWRSZWR1Y2VyIiwicmVkdWNlciIsInN0YXJ0aW5nU3RhdGUiLCJtaWRkbGV3YXJlcyIsInN0YXRlUmVmIiwic3RhdGUiLCJyZWFsRGlzcGF0Y2giLCJjdXJyZW50IiwiZGlzcGF0Y2hXaXRoUHJvbWlzZSIsIm91dGVyRGlzcGF0Y2giLCJkaXNwYXRjaCIsIm1pZGRsZXdhcmVBUEkiLCJnZXRTdGF0ZSIsImFjdGlvbiIsImNoYWluIiwibWFwIiwibWlkZGxld2FyZSIsImNvbXBvc2UiLCJmbnMiLCJpbml0aWFsIiwicmVkdWNlUmlnaHQiLCJ2IiwiZiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBZ0JBLFVBQWhCLEVBQTRCQyxPQUE1QixFQUFxQ0MsTUFBckMsRUFBNkNDLFNBQTdDLFFBQThELE9BQTlEO0FBR0EsT0FBT0Msc0JBQVAsTUFBbUMsMEJBQW5DO0FBRUEsT0FBTyxNQUFNQyxhQUFhLEdBQUcsTUFBTTtBQUNqQyxRQUFNLElBQUlDLEtBQUosQ0FDSCxpRUFBRCxHQUNHLHlEQUZDLENBQU47QUFJRCxDQUxNO0FBT1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxlQUFlLFNBQVNDLGtCQUFULENBQ2JDLE9BRGEsRUFFYkMsYUFGYSxFQUdiQyxXQUhhLEVBSTZEO0FBQzFFLFFBQU1DLFFBQVEsR0FBR1QsTUFBTSxDQUFDTyxhQUFELENBQXZCO0FBQ0EsUUFBTSxDQUFDRyxLQUFELEVBQVFDLFlBQVIsSUFBd0JiLFVBQVUsQ0FBQ1EsT0FBRCxFQUFVQyxhQUFWLENBQXhDO0FBRUFOLEVBQUFBLFNBQVMsQ0FBQyxNQUFNO0FBQ2RRLElBQUFBLFFBQVEsQ0FBQ0csT0FBVCxHQUFtQkYsS0FBbkI7QUFDRCxHQUZRLEVBRU4sQ0FBQ0EsS0FBRCxDQUZNLENBQVQ7QUFJQSxRQUFNRyxtQkFBbUIsR0FBR1gsc0JBQXNCLENBQUNTLFlBQUQsRUFBZUQsS0FBZixDQUFsRDtBQUVBLFFBQU1JLGFBQWEsR0FBR2YsT0FBTyxDQUFDLE1BQU07QUFDbEMsUUFBSWdCLFFBQXFCLEdBQUdaLGFBQTVCLENBRGtDLENBRWxDOztBQUNBLFVBQU1hLGFBQWEsR0FBRztBQUNwQkMsTUFBQUEsUUFBUSxFQUFFLE1BQU1SLFFBQVEsQ0FBQ0csT0FETDtBQUVwQkcsTUFBQUEsUUFBUSxFQUFHRyxNQUFELElBQW9DSCxRQUFRLENBQUNHLE1BQUQ7QUFGbEMsS0FBdEI7QUFJQSxVQUFNQyxLQUFLLEdBQUdYLFdBQVcsQ0FBQ1ksR0FBWixDQUFnQkMsVUFBVSxJQUFJQSxVQUFVLENBQUNMLGFBQUQsQ0FBeEMsQ0FBZDtBQUNBRCxJQUFBQSxRQUFRLEdBQUdPLE9BQU8sQ0FBQ0gsS0FBRCxDQUFQLENBQWVOLG1CQUFmLENBQVg7QUFDQSxXQUFPRSxRQUFQLENBVGtDLENBVWxDO0FBQ0QsR0FYNEIsRUFXMUIsQ0FBQ0YsbUJBQUQsRUFBc0IsR0FBR0wsV0FBekIsQ0FYMEIsQ0FBN0I7QUFZQSxTQUFPLENBQUNFLEtBQUQsRUFBUUksYUFBUixDQUFQO0FBQ0Q7O0FBRUQsTUFBTVEsT0FBTyxHQUFJQyxHQUFELElBQXFDQyxPQUFELElBQ2xERCxHQUFHLENBQUNFLFdBQUosQ0FBZ0IsQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKLEtBQVVBLENBQUMsQ0FBQ0QsQ0FBRCxDQUEzQixFQUFnQ0YsT0FBaEMsQ0FERiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VSZWR1Y2VyLCB1c2VNZW1vLCB1c2VSZWYsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHsgTWlkZGxld2FyZSwgRGlzcGF0Y2ggfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB1c2VQcm9taXNpZmllZERpc3BhdGNoIGZyb20gJy4vdXNlUHJvbWlzaWZpZWREaXNwYXRjaCc7XG5cbmV4cG9ydCBjb25zdCB1bnNldERpc3BhdGNoID0gKCkgPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYERpc3BhdGNoaW5nIHdoaWxlIGNvbnN0cnVjdGluZyB5b3VyIG1pZGRsZXdhcmUgaXMgbm90IGFsbG93ZWQuIGAgK1xuICAgICAgYE90aGVyIG1pZGRsZXdhcmUgd291bGQgbm90IGJlIGFwcGxpZWQgdG8gdGhpcyBkaXNwYXRjaC5gLFxuICApO1xufTtcblxuLyoqIFNpbWlsYXIgdG8gdXNlUmVkdWNlcigpLCBidXQgd2l0aCByZWR1eC1saWtlIG1pZGRsZXdhcmVcbiAqXG4gKiBTdXBwb3J0cyBhc3luYyBvcGVyYXRpb25zIGluIGNvbmN1cnJlbnQgbW9kZSBieSByZXR1cm5pbmcgYSBwcm9taXNlIG9uIGRpc3BhdGNoXG4gKiBQcm9taXNlIHJlc29sdmVzIHdoZW4gcmVzdWx0cyBhcmUgY29tbWl0dGVkXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUVuaGFuY2VkUmVkdWNlcjxSIGV4dGVuZHMgUmVhY3QuUmVkdWNlcjxhbnksIGFueT4+KFxuICByZWR1Y2VyOiBSLFxuICBzdGFydGluZ1N0YXRlOiBSZWFjdC5SZWR1Y2VyU3RhdGU8Uj4sXG4gIG1pZGRsZXdhcmVzOiBNaWRkbGV3YXJlW10sXG4pOiBbUmVhY3QuUmVkdWNlclN0YXRlPFI+LCAodmFsdWU6IFJlYWN0LlJlZHVjZXJBY3Rpb248Uj4pID0+IFByb21pc2U8YW55Pl0ge1xuICBjb25zdCBzdGF0ZVJlZiA9IHVzZVJlZihzdGFydGluZ1N0YXRlKTtcbiAgY29uc3QgW3N0YXRlLCByZWFsRGlzcGF0Y2hdID0gdXNlUmVkdWNlcihyZWR1Y2VyLCBzdGFydGluZ1N0YXRlKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHN0YXRlUmVmLmN1cnJlbnQgPSBzdGF0ZTtcbiAgfSwgW3N0YXRlXSk7XG5cbiAgY29uc3QgZGlzcGF0Y2hXaXRoUHJvbWlzZSA9IHVzZVByb21pc2lmaWVkRGlzcGF0Y2gocmVhbERpc3BhdGNoLCBzdGF0ZSk7XG5cbiAgY29uc3Qgb3V0ZXJEaXNwYXRjaCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCBkaXNwYXRjaDogRGlzcGF0Y2g8Uj4gPSB1bnNldERpc3BhdGNoO1xuICAgIC8vIGNsb3N1cmUgaGVyZSBhcm91bmQgZGlzcGF0Y2ggYWxsb3dzIHVzIHRvIGNoYW5nZSBpdCBhZnRlciBtaWRkbGV3YXJlIGlzIGNvbnN0cnVjdGVkXG4gICAgY29uc3QgbWlkZGxld2FyZUFQSSA9IHtcbiAgICAgIGdldFN0YXRlOiAoKSA9PiBzdGF0ZVJlZi5jdXJyZW50LFxuICAgICAgZGlzcGF0Y2g6IChhY3Rpb246IFJlYWN0LlJlZHVjZXJBY3Rpb248Uj4pID0+IGRpc3BhdGNoKGFjdGlvbiksXG4gICAgfTtcbiAgICBjb25zdCBjaGFpbiA9IG1pZGRsZXdhcmVzLm1hcChtaWRkbGV3YXJlID0+IG1pZGRsZXdhcmUobWlkZGxld2FyZUFQSSkpO1xuICAgIGRpc3BhdGNoID0gY29tcG9zZShjaGFpbikoZGlzcGF0Y2hXaXRoUHJvbWlzZSk7XG4gICAgcmV0dXJuIGRpc3BhdGNoO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW2Rpc3BhdGNoV2l0aFByb21pc2UsIC4uLm1pZGRsZXdhcmVzXSk7XG4gIHJldHVybiBbc3RhdGUsIG91dGVyRGlzcGF0Y2hdO1xufVxuXG5jb25zdCBjb21wb3NlID0gKGZuczogKCguLi5hcmdzOiBhbnkpID0+IGFueSlbXSkgPT4gKGluaXRpYWw6IGFueSkgPT5cbiAgZm5zLnJlZHVjZVJpZ2h0KCh2LCBmKSA9PiBmKHYpLCBpbml0aWFsKTtcbiJdfQ==","/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */ export function invariant(condition, format, ...args) {\n if (isProduction()) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n if (!condition) {\n let error;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n let argIndex = 0;\n error = new Error(format.replace(/%s/g, function() {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n error.framesToPop = 1 // we don't care about invariant's own frame\n ;\n throw error;\n }\n}\nfunction isProduction() {\n return typeof process !== 'undefined' && process.env['NODE_ENV'] === 'production';\n}\n\n//# sourceMappingURL=index.js.map","export const FETCH_TYPE = 'rest-hooks/fetch';\nexport const RECEIVE_TYPE = 'rest-hooks/receive';\nexport const OPTIMISTIC_TYPE = 'rest-hooks/optimistic';\nexport const RESET_TYPE = 'rest-hooks/reset';\nexport const SUBSCRIBE_TYPE = 'rest-hooks/subscribe';\nexport const UNSUBSCRIBE_TYPE = 'rest-hook/unsubscribe';\nexport const INVALIDATE_TYPE = 'rest-hooks/invalidate';\nexport const GC_TYPE = 'rest-hooks/gc';\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGRVRDSF9UWVBFIiwiUkVDRUlWRV9UWVBFIiwiT1BUSU1JU1RJQ19UWVBFIiwiUkVTRVRfVFlQRSIsIlNVQlNDUklCRV9UWVBFIiwiVU5TVUJTQ1JJQkVfVFlQRSIsIklOVkFMSURBVEVfVFlQRSIsIkdDX1RZUEUiXSwic291cmNlcyI6WyIuLi9zcmMvYWN0aW9uVHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEZFVENIX1RZUEUgPSAncmVzdC1ob29rcy9mZXRjaCcgYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgUkVDRUlWRV9UWVBFID0gJ3Jlc3QtaG9va3MvcmVjZWl2ZScgYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgT1BUSU1JU1RJQ19UWVBFID0gJ3Jlc3QtaG9va3Mvb3B0aW1pc3RpYycgYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgUkVTRVRfVFlQRSA9ICdyZXN0LWhvb2tzL3Jlc2V0JyBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBTVUJTQ1JJQkVfVFlQRSA9ICdyZXN0LWhvb2tzL3N1YnNjcmliZScgYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgVU5TVUJTQ1JJQkVfVFlQRSA9ICdyZXN0LWhvb2svdW5zdWJzY3JpYmUnIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IElOVkFMSURBVEVfVFlQRSA9ICdyZXN0LWhvb2tzL2ludmFsaWRhdGUnIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IEdDX1RZUEUgPSAncmVzdC1ob29rcy9nYycgYXMgY29uc3Q7XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTUEsVUFBVSxHQUFHLGtCQUFuQjtBQUNQLE9BQU8sTUFBTUMsWUFBWSxHQUFHLG9CQUFyQjtBQUNQLE9BQU8sTUFBTUMsZUFBZSxHQUFHLHVCQUF4QjtBQUNQLE9BQU8sTUFBTUMsVUFBVSxHQUFHLGtCQUFuQjtBQUNQLE9BQU8sTUFBTUMsY0FBYyxHQUFHLHNCQUF2QjtBQUNQLE9BQU8sTUFBTUMsZ0JBQWdCLEdBQUcsdUJBQXpCO0FBQ1AsT0FBTyxNQUFNQyxlQUFlLEdBQUcsdUJBQXhCO0FBQ1AsT0FBTyxNQUFNQyxPQUFPLEdBQUcsZUFBaEIifQ==","/** Link in a chain */\nclass Link {\n constructor() {\n this.children = new WeakMap();\n }\n\n}\n\nclass KeySize extends Error {\n constructor(...args) {\n super(...args);\n this.message = 'Keys must include at least one member';\n }\n\n}\n/** Maps from a list of objects (referentially) to any value\n *\n * If *any* members of the list get claned up, so does that key/value pair get removed.\n */\n\n\nexport default class WeakListMap {\n constructor() {\n this.first = new WeakMap();\n }\n\n delete(key) {\n const link = this.traverse(key);\n link == null ? true : delete link.value;\n return !!link;\n }\n\n get(key) {\n const link = this.traverse(key);\n return link == null ? void 0 : link.value;\n }\n\n has(key) {\n const link = this.traverse(key);\n if (!link) return false;\n return Object.prototype.hasOwnProperty.call(link, 'value');\n }\n\n set(key, value) {\n if (key.length < 1) throw new KeySize();\n let cur = this.first;\n let link;\n\n for (let i = 0; i < key.length; i++) {\n if (!cur.has(key[i])) {\n link = new Link();\n cur.set(key[i], link);\n } else {\n link = cur.get(key[i]);\n }\n\n cur = link.children; // do on later iteration of loop. this makes typescript happy rather than putting after loop\n\n if (i === key.length - 1) {\n link.value = value;\n }\n }\n\n return this;\n }\n\n traverse(key) {\n let cur = this.first;\n let link;\n\n for (let i = 0; i < key.length; i++) {\n link = cur.get(key[i]);\n if (!link) return;\n cur = link.children;\n }\n\n return link;\n }\n\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMaW5rIiwiY2hpbGRyZW4iLCJXZWFrTWFwIiwiS2V5U2l6ZSIsIkVycm9yIiwibWVzc2FnZSIsIldlYWtMaXN0TWFwIiwiZmlyc3QiLCJkZWxldGUiLCJrZXkiLCJsaW5rIiwidHJhdmVyc2UiLCJ2YWx1ZSIsImdldCIsImhhcyIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInNldCIsImxlbmd0aCIsImN1ciIsImkiXSwic291cmNlcyI6WyIuLi9zcmMvV2Vha0xpc3RNYXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIExpbmsgaW4gYSBjaGFpbiAqL1xuY2xhc3MgTGluazxLIGV4dGVuZHMgb2JqZWN0LCBWPiB7XG4gIGNoaWxkcmVuID0gbmV3IFdlYWtNYXA8SywgTGluazxLLCBWPj4oKTtcbiAgZGVjbGFyZSB2YWx1ZT86IFY7XG59XG5cbmNsYXNzIEtleVNpemUgZXh0ZW5kcyBFcnJvciB7XG4gIG1lc3NhZ2UgPSAnS2V5cyBtdXN0IGluY2x1ZGUgYXQgbGVhc3Qgb25lIG1lbWJlcic7XG59XG5cbi8qKiBNYXBzIGZyb20gYSBsaXN0IG9mIG9iamVjdHMgKHJlZmVyZW50aWFsbHkpIHRvIGFueSB2YWx1ZVxuICpcbiAqIElmICphbnkqIG1lbWJlcnMgb2YgdGhlIGxpc3QgZ2V0IGNsYW5lZCB1cCwgc28gZG9lcyB0aGF0IGtleS92YWx1ZSBwYWlyIGdldCByZW1vdmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWFrTGlzdE1hcDxLIGV4dGVuZHMgb2JqZWN0LCBWPiB7XG4gIHJlYWRvbmx5IGZpcnN0ID0gbmV3IFdlYWtNYXA8SywgTGluazxLLCBWPj4oKTtcblxuICBkZWxldGUoa2V5OiBLW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBsaW5rID0gdGhpcy50cmF2ZXJzZShrZXkpO1xuICAgIGRlbGV0ZSBsaW5rPy52YWx1ZTtcbiAgICByZXR1cm4gISFsaW5rO1xuICB9XG5cbiAgZ2V0KGtleTogS1tdKTogViB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbGluayA9IHRoaXMudHJhdmVyc2Uoa2V5KTtcbiAgICByZXR1cm4gbGluaz8udmFsdWU7XG4gIH1cblxuICBoYXMoa2V5OiBLW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBsaW5rID0gdGhpcy50cmF2ZXJzZShrZXkpO1xuICAgIGlmICghbGluaykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGluaywgJ3ZhbHVlJyk7XG4gIH1cblxuICBzZXQoa2V5OiBLW10sIHZhbHVlOiBWKTogV2Vha0xpc3RNYXA8SywgVj4ge1xuICAgIGlmIChrZXkubGVuZ3RoIDwgMSkgdGhyb3cgbmV3IEtleVNpemUoKTtcbiAgICBsZXQgY3VyID0gdGhpcy5maXJzdDtcbiAgICBsZXQgbGluazogTGluazxLLCBWPjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFjdXIuaGFzKGtleVtpXSkpIHtcbiAgICAgICAgbGluayA9IG5ldyBMaW5rPEssIFY+KCk7XG4gICAgICAgIGN1ci5zZXQoa2V5W2ldLCBsaW5rKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpbmsgPSBjdXIuZ2V0KGtleVtpXSkgYXMgTGluazxLLCBWPjtcbiAgICAgIH1cbiAgICAgIGN1ciA9IGxpbmsuY2hpbGRyZW47XG4gICAgICAvLyBkbyBvbiBsYXRlciBpdGVyYXRpb24gb2YgbG9vcC4gdGhpcyBtYWtlcyB0eXBlc2NyaXB0IGhhcHB5IHJhdGhlciB0aGFuIHB1dHRpbmcgYWZ0ZXIgbG9vcFxuICAgICAgaWYgKGkgPT09IGtleS5sZW5ndGggLSAxKSB7XG4gICAgICAgIGxpbmsudmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhdmVyc2Uoa2V5OiBLW10pOiBMaW5rPEssIFY+IHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgY3VyID0gdGhpcy5maXJzdDtcbiAgICBsZXQgbGluazogTGluazxLLCBWPiB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKykge1xuICAgICAgbGluayA9IGN1ci5nZXQoa2V5W2ldKTtcbiAgICAgIGlmICghbGluaykgcmV0dXJuO1xuICAgICAgY3VyID0gbGluay5jaGlsZHJlbjtcbiAgICB9XG4gICAgcmV0dXJuIGxpbms7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxNQUFNQSxJQUFOLENBQWdDO0VBQUE7SUFBQSxLQUM5QkMsUUFEOEIsR0FDbkIsSUFBSUMsT0FBSixFQURtQjtFQUFBOztBQUFBOztBQUtoQyxNQUFNQyxPQUFOLFNBQXNCQyxLQUF0QixDQUE0QjtFQUFBO0lBQUE7SUFBQSxLQUMxQkMsT0FEMEIsR0FDaEIsdUNBRGdCO0VBQUE7O0FBQUE7QUFJNUI7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLGVBQWUsTUFBTUMsV0FBTixDQUF1QztFQUFBO0lBQUEsS0FDM0NDLEtBRDJDLEdBQ25DLElBQUlMLE9BQUosRUFEbUM7RUFBQTs7RUFHcERNLE1BQU0sQ0FBQ0MsR0FBRCxFQUFvQjtJQUN4QixNQUFNQyxJQUFJLEdBQUcsS0FBS0MsUUFBTCxDQUFjRixHQUFkLENBQWI7SUFDT0MsSUFBUCx5QkFBT0EsSUFBSSxDQUFFRSxLQUFiO0lBQ0EsT0FBTyxDQUFDLENBQUNGLElBQVQ7RUFDRDs7RUFFREcsR0FBRyxDQUFDSixHQUFELEVBQTBCO0lBQzNCLE1BQU1DLElBQUksR0FBRyxLQUFLQyxRQUFMLENBQWNGLEdBQWQsQ0FBYjtJQUNBLE9BQU9DLElBQVAsb0JBQU9BLElBQUksQ0FBRUUsS0FBYjtFQUNEOztFQUVERSxHQUFHLENBQUNMLEdBQUQsRUFBb0I7SUFDckIsTUFBTUMsSUFBSSxHQUFHLEtBQUtDLFFBQUwsQ0FBY0YsR0FBZCxDQUFiO0lBQ0EsSUFBSSxDQUFDQyxJQUFMLEVBQVcsT0FBTyxLQUFQO0lBQ1gsT0FBT0ssTUFBTSxDQUFDQyxTQUFQLENBQWlCQyxjQUFqQixDQUFnQ0MsSUFBaEMsQ0FBcUNSLElBQXJDLEVBQTJDLE9BQTNDLENBQVA7RUFDRDs7RUFFRFMsR0FBRyxDQUFDVixHQUFELEVBQVdHLEtBQVgsRUFBd0M7SUFDekMsSUFBSUgsR0FBRyxDQUFDVyxNQUFKLEdBQWEsQ0FBakIsRUFBb0IsTUFBTSxJQUFJakIsT0FBSixFQUFOO0lBQ3BCLElBQUlrQixHQUFHLEdBQUcsS0FBS2QsS0FBZjtJQUNBLElBQUlHLElBQUo7O0lBQ0EsS0FBSyxJQUFJWSxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHYixHQUFHLENBQUNXLE1BQXhCLEVBQWdDRSxDQUFDLEVBQWpDLEVBQXFDO01BQ25DLElBQUksQ0FBQ0QsR0FBRyxDQUFDUCxHQUFKLENBQVFMLEdBQUcsQ0FBQ2EsQ0FBRCxDQUFYLENBQUwsRUFBc0I7UUFDcEJaLElBQUksR0FBRyxJQUFJVixJQUFKLEVBQVA7UUFDQXFCLEdBQUcsQ0FBQ0YsR0FBSixDQUFRVixHQUFHLENBQUNhLENBQUQsQ0FBWCxFQUFnQlosSUFBaEI7TUFDRCxDQUhELE1BR087UUFDTEEsSUFBSSxHQUFHVyxHQUFHLENBQUNSLEdBQUosQ0FBUUosR0FBRyxDQUFDYSxDQUFELENBQVgsQ0FBUDtNQUNEOztNQUNERCxHQUFHLEdBQUdYLElBQUksQ0FBQ1QsUUFBWCxDQVBtQyxDQVFuQzs7TUFDQSxJQUFJcUIsQ0FBQyxLQUFLYixHQUFHLENBQUNXLE1BQUosR0FBYSxDQUF2QixFQUEwQjtRQUN4QlYsSUFBSSxDQUFDRSxLQUFMLEdBQWFBLEtBQWI7TUFDRDtJQUNGOztJQUNELE9BQU8sSUFBUDtFQUNEOztFQUVTRCxRQUFRLENBQUNGLEdBQUQsRUFBbUM7SUFDbkQsSUFBSVksR0FBRyxHQUFHLEtBQUtkLEtBQWY7SUFDQSxJQUFJRyxJQUFKOztJQUNBLEtBQUssSUFBSVksQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR2IsR0FBRyxDQUFDVyxNQUF4QixFQUFnQ0UsQ0FBQyxFQUFqQyxFQUFxQztNQUNuQ1osSUFBSSxHQUFHVyxHQUFHLENBQUNSLEdBQUosQ0FBUUosR0FBRyxDQUFDYSxDQUFELENBQVgsQ0FBUDtNQUNBLElBQUksQ0FBQ1osSUFBTCxFQUFXO01BQ1hXLEdBQUcsR0FBR1gsSUFBSSxDQUFDVCxRQUFYO0lBQ0Q7O0lBQ0QsT0FBT1MsSUFBUDtFQUNEOztBQWpEbUQifQ==","import { isEntity } from './entities/Entity.js';\nimport { DELETED } from './special.js';\nimport WeakListMap from './WeakListMap.js';\nimport { denormalize as arrayDenormalize } from './schemas/Array.js';\nimport { denormalize as objectDenormalize } from './schemas/Object.js';\nimport { isImmutable } from './schemas/ImmutableUtils.js';\nconst DRAFT = Symbol('draft');\n\nconst unvisitEntity = (entityOrId, schema, unvisit, getEntity, localCache, entityCache, dependencies, cycleIndex) => {\n const entity = getEntity(entityOrId, schema);\n\n if (entity === DELETED) {\n return [undefined, true, true];\n }\n\n if (process.env.NODE_ENV !== 'production' && typeof entity === 'symbol' && entity.toString().includes('DELETED')) {\n throw new Error(`Unrecognized symbol detected.\nMake sure you do not have multiple versions of @rest-hooks/normalizr installed.`);\n }\n\n if (typeof entity !== 'object' || entity === null) {\n return [entity, false, false];\n }\n\n const pk = typeof entityOrId === 'string' ? entityOrId : schema.pk(isImmutable(entity) ? entity.toJS() : entity);\n\n if (pk === undefined || pk === '') {\n return [entity, false, false];\n }\n\n if (localCache[schema.key] === undefined) {\n localCache[schema.key] = Object.create(null);\n }\n\n let found = true;\n let deleted = false;\n\n if (!localCache[schema.key][pk]) {\n const trackingIndex = dependencies.length;\n dependencies.push(entity);\n const wrappedUnvisit = withTrackedEntities(unvisit); // { [DRAFT] } means we are still processing - which if found indicates a cycle\n\n wrappedUnvisit.setLocal = entityCopy => localCache[schema.key][pk] = {\n [DRAFT]: entityCopy,\n i: trackingIndex\n };\n\n const globalCacheEntry = getGlobalCacheEntry(entityCache, schema, pk);\n [localCache[schema.key][pk], found, deleted] = schema.denormalize(entity, wrappedUnvisit); // if in cycle, use the start of the cycle to track all deps\n // otherwise, we use our own trackingIndex\n\n const localKey = dependencies.slice(cycleIndex.i === -1 ? trackingIndex : cycleIndex.i);\n\n if (!globalCacheEntry.has(localKey)) {\n globalCacheEntry.set(localKey, localCache[schema.key][pk]);\n } else {\n localCache[schema.key][pk] = globalCacheEntry.get(localKey);\n } // start of cycle - reset cycle detection\n\n\n if (cycleIndex.i === trackingIndex) {\n cycleIndex.i = -1;\n }\n } else {\n // cycle detected\n if (Object.prototype.hasOwnProperty.call(localCache[schema.key][pk], DRAFT)) {\n cycleIndex.i = localCache[schema.key][pk].i;\n return [localCache[schema.key][pk][DRAFT], found, deleted];\n } else {\n // with no cycle, globalCacheEntry will have already been set\n dependencies.push(entity);\n }\n }\n\n return [localCache[schema.key][pk], found, deleted];\n};\n\nconst getUnvisit = (entities, entityCache, resultCache, localCache) => {\n const getEntity = getEntities(entities);\n const dependencies = [];\n const cycleIndex = {\n i: -1\n };\n\n function unvisit(input, schema) {\n if (!schema) return [input, true, false]; // null is considered intentional, thus always 'found' as true\n\n if (input === null) {\n return [input, true, false];\n }\n\n const hasDenormalize = typeof schema.denormalize === 'function';\n\n if (!hasDenormalize && typeof schema === 'function') {\n if (input instanceof schema) return [input, true, false]; // field deserialization should never count against 'found' (whether to used inferred results)\n\n if (input === undefined) return [input, true, false];\n return [new schema(input), true, false];\n }\n\n if (input === undefined) {\n return [input, false, false];\n }\n\n if (!hasDenormalize && typeof schema === 'object') {\n const method = Array.isArray(schema) ? arrayDenormalize : objectDenormalize;\n return method(schema, input, unvisit);\n }\n\n if (isEntity(schema)) {\n return unvisitEntity(input, schema, unvisit, getEntity, localCache, entityCache, dependencies, cycleIndex);\n }\n\n if (hasDenormalize) {\n return schema.denormalize(input, unvisit);\n }\n\n return [input, true, false];\n } //const wrappedUnvisit = withTrackedEntities(unvisit, globalKey);\n\n\n return (input, schema) => {\n const ret = unvisit(input, schema); // in the case where WeakMap cannot be used\n // this test ensures null is properly excluded from WeakMap\n\n if (Object(input) !== input) return ret;\n dependencies.push(input);\n\n if (!resultCache.has(dependencies)) {\n resultCache.set(dependencies, ret[0]);\n return ret;\n } else {\n return [resultCache.get(dependencies), ret[1], ret[2]];\n }\n };\n};\n\nconst getEntities = entities => {\n const entityIsImmutable = isImmutable(entities);\n return (entityOrId, schema) => {\n var _entities$schemaKey;\n\n const schemaKey = schema.key;\n\n if (typeof entityOrId === 'object') {\n return entityOrId;\n }\n\n if (entityIsImmutable) {\n return entities.getIn([schemaKey, entityOrId]);\n }\n\n return (_entities$schemaKey = entities[schemaKey]) == null ? void 0 : _entities$schemaKey[entityOrId];\n };\n};\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const denormalize = (input, schema, entities, entityCache = {}, resultCache = new WeakListMap()) => {\n // undefined mean don't do anything\n if (schema === undefined) {\n return [input, true, false, {}];\n }\n\n if (input === undefined) {\n return [undefined, false, false, {}];\n }\n\n const resolvedEntities = {};\n const unvisit = getUnvisit(entities, entityCache, resultCache, resolvedEntities);\n return [...unvisit(input, schema), resolvedEntities];\n};\nexport const denormalizeSimple = (input, schema, entities, entityCache = {}, resultCache = new WeakListMap()) => denormalize(input, schema, entities, entityCache, resultCache).slice(0, 3);\n\nfunction getGlobalCacheEntry(entityCache, schema, id) {\n if (!entityCache[schema.key]) entityCache[schema.key] = {};\n if (!entityCache[schema.key][id]) entityCache[schema.key][id] = new WeakListMap();\n return entityCache[schema.key][id];\n}\n\nfunction withTrackedEntities(unvisit) {\n // every time we nest, we want to unwrap back to the top.\n // this is due to only needed the next level of nested entities for lookup\n const originalUnvisit = unvisit.og || unvisit;\n\n const wrappedUnvisit = (input, schema) => originalUnvisit(input, schema);\n\n wrappedUnvisit.og = unvisit;\n return wrappedUnvisit;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0VudGl0eSIsIkRFTEVURUQiLCJXZWFrTGlzdE1hcCIsImRlbm9ybWFsaXplIiwiYXJyYXlEZW5vcm1hbGl6ZSIsIm9iamVjdERlbm9ybWFsaXplIiwiaXNJbW11dGFibGUiLCJEUkFGVCIsIlN5bWJvbCIsInVudmlzaXRFbnRpdHkiLCJlbnRpdHlPcklkIiwic2NoZW1hIiwidW52aXNpdCIsImdldEVudGl0eSIsImxvY2FsQ2FjaGUiLCJlbnRpdHlDYWNoZSIsImRlcGVuZGVuY2llcyIsImN5Y2xlSW5kZXgiLCJlbnRpdHkiLCJ1bmRlZmluZWQiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJ0b1N0cmluZyIsImluY2x1ZGVzIiwiRXJyb3IiLCJwayIsInRvSlMiLCJrZXkiLCJPYmplY3QiLCJjcmVhdGUiLCJmb3VuZCIsImRlbGV0ZWQiLCJ0cmFja2luZ0luZGV4IiwibGVuZ3RoIiwicHVzaCIsIndyYXBwZWRVbnZpc2l0Iiwid2l0aFRyYWNrZWRFbnRpdGllcyIsInNldExvY2FsIiwiZW50aXR5Q29weSIsImkiLCJnbG9iYWxDYWNoZUVudHJ5IiwiZ2V0R2xvYmFsQ2FjaGVFbnRyeSIsImxvY2FsS2V5Iiwic2xpY2UiLCJoYXMiLCJzZXQiLCJnZXQiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJnZXRVbnZpc2l0IiwiZW50aXRpZXMiLCJyZXN1bHRDYWNoZSIsImdldEVudGl0aWVzIiwiaW5wdXQiLCJoYXNEZW5vcm1hbGl6ZSIsIm1ldGhvZCIsIkFycmF5IiwiaXNBcnJheSIsInJldCIsImVudGl0eUlzSW1tdXRhYmxlIiwic2NoZW1hS2V5IiwiZ2V0SW4iLCJyZXNvbHZlZEVudGl0aWVzIiwiZGVub3JtYWxpemVTaW1wbGUiLCJpZCIsIm9yaWdpbmFsVW52aXNpdCIsIm9nIl0sInNvdXJjZXMiOlsiLi4vc3JjL2Rlbm9ybWFsaXplLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eUludGVyZmFjZSB9IGZyb20gJy4vc2NoZW1hLmpzJztcbmltcG9ydCAqIGFzIHNjaGVtYSBmcm9tICcuL3NjaGVtYS5qcyc7XG5pbXBvcnQge1xuICBEZW5vcm1hbGl6ZSxcbiAgRGVub3JtYWxpemVOdWxsYWJsZSxcbiAgU2NoZW1hLFxuICBEZW5vcm1hbGl6ZUNhY2hlLFxuICBVbnZpc2l0RnVuY3Rpb24sXG59IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgaXNFbnRpdHkgfSBmcm9tICcuL2VudGl0aWVzL0VudGl0eS5qcyc7XG5pbXBvcnQgeyBERUxFVEVEIH0gZnJvbSAnLi9zcGVjaWFsLmpzJztcbmltcG9ydCBXZWFrTGlzdE1hcCBmcm9tICcuL1dlYWtMaXN0TWFwLmpzJztcbmltcG9ydCB7IGRlbm9ybWFsaXplIGFzIGFycmF5RGVub3JtYWxpemUgfSBmcm9tICcuL3NjaGVtYXMvQXJyYXkuanMnO1xuaW1wb3J0IHsgZGVub3JtYWxpemUgYXMgb2JqZWN0RGVub3JtYWxpemUgfSBmcm9tICcuL3NjaGVtYXMvT2JqZWN0LmpzJztcbmltcG9ydCB7IGlzSW1tdXRhYmxlIH0gZnJvbSAnLi9zY2hlbWFzL0ltbXV0YWJsZVV0aWxzLmpzJztcblxuY29uc3QgRFJBRlQgPSBTeW1ib2woJ2RyYWZ0Jyk7XG5cbmNvbnN0IHVudmlzaXRFbnRpdHkgPSAoXG4gIGVudGl0eU9ySWQ6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBzdHJpbmcsXG4gIHNjaGVtYTogRW50aXR5SW50ZXJmYWNlLFxuICB1bnZpc2l0OiBVbnZpc2l0RnVuY3Rpb24sXG4gIGdldEVudGl0eTogKFxuICAgIGVudGl0eU9ySWQ6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBzdHJpbmcsXG4gICAgc2NoZW1hOiBFbnRpdHlJbnRlcmZhY2UsXG4gICkgPT4gb2JqZWN0IHwgdHlwZW9mIERFTEVURUQsXG4gIGxvY2FsQ2FjaGU6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+LFxuICBlbnRpdHlDYWNoZTogRGVub3JtYWxpemVDYWNoZVsnZW50aXRpZXMnXSxcbiAgZGVwZW5kZW5jaWVzOiBvYmplY3RbXSxcbiAgY3ljbGVJbmRleDogeyBpOiBudW1iZXIgfSxcbik6IFtkZW5vcm1hbGl6ZWQ6IG9iamVjdCB8IHVuZGVmaW5lZCwgZm91bmQ6IGJvb2xlYW4sIGRlbGV0ZWQ6IGJvb2xlYW5dID0+IHtcbiAgY29uc3QgZW50aXR5ID0gZ2V0RW50aXR5KGVudGl0eU9ySWQsIHNjaGVtYSk7XG4gIGlmIChlbnRpdHkgPT09IERFTEVURUQpIHtcbiAgICByZXR1cm4gW3VuZGVmaW5lZCwgdHJ1ZSwgdHJ1ZV07XG4gIH1cbiAgaWYgKFxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICB0eXBlb2YgZW50aXR5ID09PSAnc3ltYm9sJyAmJlxuICAgIChlbnRpdHkgYXMgc3ltYm9sKS50b1N0cmluZygpLmluY2x1ZGVzKCdERUxFVEVEJylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFVucmVjb2duaXplZCBzeW1ib2wgZGV0ZWN0ZWQuXG5NYWtlIHN1cmUgeW91IGRvIG5vdCBoYXZlIG11bHRpcGxlIHZlcnNpb25zIG9mIEByZXN0LWhvb2tzL25vcm1hbGl6ciBpbnN0YWxsZWQuYCxcbiAgICApO1xuICB9XG4gIGlmICh0eXBlb2YgZW50aXR5ICE9PSAnb2JqZWN0JyB8fCBlbnRpdHkgPT09IG51bGwpIHtcbiAgICByZXR1cm4gW2VudGl0eSwgZmFsc2UsIGZhbHNlXTtcbiAgfVxuXG4gIGNvbnN0IHBrID1cbiAgICB0eXBlb2YgZW50aXR5T3JJZCA9PT0gJ3N0cmluZydcbiAgICAgID8gZW50aXR5T3JJZFxuICAgICAgOiBzY2hlbWEucGsoaXNJbW11dGFibGUoZW50aXR5KSA/IChlbnRpdHkgYXMgYW55KS50b0pTKCkgOiBlbnRpdHkpO1xuICBpZiAocGsgPT09IHVuZGVmaW5lZCB8fCBwayA9PT0gJycpIHtcbiAgICByZXR1cm4gW2VudGl0eSwgZmFsc2UsIGZhbHNlXTtcbiAgfVxuXG4gIGlmIChsb2NhbENhY2hlW3NjaGVtYS5rZXldID09PSB1bmRlZmluZWQpIHtcbiAgICBsb2NhbENhY2hlW3NjaGVtYS5rZXldID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgfVxuXG4gIGxldCBmb3VuZCA9IHRydWU7XG4gIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgaWYgKCFsb2NhbENhY2hlW3NjaGVtYS5rZXldW3BrXSkge1xuICAgIGNvbnN0IHRyYWNraW5nSW5kZXggPSBkZXBlbmRlbmNpZXMubGVuZ3RoO1xuICAgIGRlcGVuZGVuY2llcy5wdXNoKGVudGl0eSk7XG5cbiAgICBjb25zdCB3cmFwcGVkVW52aXNpdCA9IHdpdGhUcmFja2VkRW50aXRpZXModW52aXNpdCk7XG4gICAgLy8geyBbRFJBRlRdIH0gbWVhbnMgd2UgYXJlIHN0aWxsIHByb2Nlc3NpbmcgLSB3aGljaCBpZiBmb3VuZCBpbmRpY2F0ZXMgYSBjeWNsZVxuICAgIHdyYXBwZWRVbnZpc2l0LnNldExvY2FsID0gZW50aXR5Q29weSA9PlxuICAgICAgKGxvY2FsQ2FjaGVbc2NoZW1hLmtleV1bcGtdID0geyBbRFJBRlRdOiBlbnRpdHlDb3B5LCBpOiB0cmFja2luZ0luZGV4IH0pO1xuXG4gICAgY29uc3QgZ2xvYmFsQ2FjaGVFbnRyeSA9IGdldEdsb2JhbENhY2hlRW50cnkoZW50aXR5Q2FjaGUsIHNjaGVtYSwgcGspO1xuXG4gICAgW2xvY2FsQ2FjaGVbc2NoZW1hLmtleV1bcGtdLCBmb3VuZCwgZGVsZXRlZF0gPSBzY2hlbWEuZGVub3JtYWxpemUoXG4gICAgICBlbnRpdHksXG4gICAgICB3cmFwcGVkVW52aXNpdCxcbiAgICApO1xuXG4gICAgLy8gaWYgaW4gY3ljbGUsIHVzZSB0aGUgc3RhcnQgb2YgdGhlIGN5Y2xlIHRvIHRyYWNrIGFsbCBkZXBzXG4gICAgLy8gb3RoZXJ3aXNlLCB3ZSB1c2Ugb3VyIG93biB0cmFja2luZ0luZGV4XG4gICAgY29uc3QgbG9jYWxLZXkgPSBkZXBlbmRlbmNpZXMuc2xpY2UoXG4gICAgICBjeWNsZUluZGV4LmkgPT09IC0xID8gdHJhY2tpbmdJbmRleCA6IGN5Y2xlSW5kZXguaSxcbiAgICApO1xuXG4gICAgaWYgKCFnbG9iYWxDYWNoZUVudHJ5Lmhhcyhsb2NhbEtleSkpIHtcbiAgICAgIGdsb2JhbENhY2hlRW50cnkuc2V0KGxvY2FsS2V5LCBsb2NhbENhY2hlW3NjaGVtYS5rZXldW3BrXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvY2FsQ2FjaGVbc2NoZW1hLmtleV1bcGtdID0gZ2xvYmFsQ2FjaGVFbnRyeS5nZXQobG9jYWxLZXkpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IG9mIGN5Y2xlIC0gcmVzZXQgY3ljbGUgZGV0ZWN0aW9uXG4gICAgaWYgKGN5Y2xlSW5kZXguaSA9PT0gdHJhY2tpbmdJbmRleCkge1xuICAgICAgY3ljbGVJbmRleC5pID0gLTE7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGN5Y2xlIGRldGVjdGVkXG4gICAgaWYgKFxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxvY2FsQ2FjaGVbc2NoZW1hLmtleV1bcGtdLCBEUkFGVClcbiAgICApIHtcbiAgICAgIGN5Y2xlSW5kZXguaSA9IGxvY2FsQ2FjaGVbc2NoZW1hLmtleV1bcGtdLmk7XG4gICAgICByZXR1cm4gW2xvY2FsQ2FjaGVbc2NoZW1hLmtleV1bcGtdW0RSQUZUXSwgZm91bmQsIGRlbGV0ZWRdO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB3aXRoIG5vIGN5Y2xlLCBnbG9iYWxDYWNoZUVudHJ5IHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0XG4gICAgICBkZXBlbmRlbmNpZXMucHVzaChlbnRpdHkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbbG9jYWxDYWNoZVtzY2hlbWEua2V5XVtwa10sIGZvdW5kLCBkZWxldGVkXTtcbn07XG5cbmNvbnN0IGdldFVudmlzaXQgPSAoXG4gIGVudGl0aWVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBhbnk+PixcbiAgZW50aXR5Q2FjaGU6IERlbm9ybWFsaXplQ2FjaGVbJ2VudGl0aWVzJ10sXG4gIHJlc3VsdENhY2hlOiBXZWFrTGlzdE1hcDxvYmplY3QsIGFueT4sXG4gIGxvY2FsQ2FjaGU6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+LFxuKSA9PiB7XG4gIGNvbnN0IGdldEVudGl0eSA9IGdldEVudGl0aWVzKGVudGl0aWVzKTtcbiAgY29uc3QgZGVwZW5kZW5jaWVzOiBvYmplY3RbXSA9IFtdO1xuICBjb25zdCBjeWNsZUluZGV4ID0geyBpOiAtMSB9O1xuXG4gIGZ1bmN0aW9uIHVudmlzaXQoXG4gICAgaW5wdXQ6IGFueSxcbiAgICBzY2hlbWE6IGFueSxcbiAgKTogW2Rlbm9ybWFsaXplZDogYW55LCBmb3VuZDogYm9vbGVhbiwgZGVsZXRlZDogYm9vbGVhbl0ge1xuICAgIGlmICghc2NoZW1hKSByZXR1cm4gW2lucHV0LCB0cnVlLCBmYWxzZV07XG5cbiAgICAvLyBudWxsIGlzIGNvbnNpZGVyZWQgaW50ZW50aW9uYWwsIHRodXMgYWx3YXlzICdmb3VuZCcgYXMgdHJ1ZVxuICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFtpbnB1dCwgdHJ1ZSwgZmFsc2VdO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc0Rlbm9ybWFsaXplID0gdHlwZW9mIHNjaGVtYS5kZW5vcm1hbGl6ZSA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIGlmICghaGFzRGVub3JtYWxpemUgJiYgdHlwZW9mIHNjaGVtYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2Ygc2NoZW1hKSByZXR1cm4gW2lucHV0LCB0cnVlLCBmYWxzZV07XG4gICAgICAvLyBmaWVsZCBkZXNlcmlhbGl6YXRpb24gc2hvdWxkIG5ldmVyIGNvdW50IGFnYWluc3QgJ2ZvdW5kJyAod2hldGhlciB0byB1c2VkIGluZmVycmVkIHJlc3VsdHMpXG4gICAgICBpZiAoaW5wdXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtpbnB1dCwgdHJ1ZSwgZmFsc2VdO1xuICAgICAgcmV0dXJuIFtuZXcgc2NoZW1hKGlucHV0KSwgdHJ1ZSwgZmFsc2VdO1xuICAgIH1cblxuICAgIGlmIChpbnB1dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gW2lucHV0LCBmYWxzZSwgZmFsc2VdO1xuICAgIH1cblxuICAgIGlmICghaGFzRGVub3JtYWxpemUgJiYgdHlwZW9mIHNjaGVtYSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IG1ldGhvZCA9IEFycmF5LmlzQXJyYXkoc2NoZW1hKVxuICAgICAgICA/IGFycmF5RGVub3JtYWxpemVcbiAgICAgICAgOiBvYmplY3REZW5vcm1hbGl6ZTtcbiAgICAgIHJldHVybiBtZXRob2Qoc2NoZW1hLCBpbnB1dCwgdW52aXNpdCk7XG4gICAgfVxuXG4gICAgaWYgKGlzRW50aXR5KHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiB1bnZpc2l0RW50aXR5KFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICB1bnZpc2l0LFxuICAgICAgICBnZXRFbnRpdHksXG4gICAgICAgIGxvY2FsQ2FjaGUsXG4gICAgICAgIGVudGl0eUNhY2hlLFxuICAgICAgICBkZXBlbmRlbmNpZXMsXG4gICAgICAgIGN5Y2xlSW5kZXgsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChoYXNEZW5vcm1hbGl6ZSkge1xuICAgICAgcmV0dXJuIHNjaGVtYS5kZW5vcm1hbGl6ZShpbnB1dCwgdW52aXNpdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtpbnB1dCwgdHJ1ZSwgZmFsc2VdO1xuICB9XG5cbiAgLy9jb25zdCB3cmFwcGVkVW52aXNpdCA9IHdpdGhUcmFja2VkRW50aXRpZXModW52aXNpdCwgZ2xvYmFsS2V5KTtcblxuICByZXR1cm4gKFxuICAgIGlucHV0OiBhbnksXG4gICAgc2NoZW1hOiBhbnksXG4gICk6IFtkZW5vcm1hbGl6ZWQ6IGFueSwgZm91bmQ6IGJvb2xlYW4sIGRlbGV0ZWQ6IGJvb2xlYW5dID0+IHtcbiAgICBjb25zdCByZXQgPSB1bnZpc2l0KGlucHV0LCBzY2hlbWEpO1xuICAgIC8vIGluIHRoZSBjYXNlIHdoZXJlIFdlYWtNYXAgY2Fubm90IGJlIHVzZWRcbiAgICAvLyB0aGlzIHRlc3QgZW5zdXJlcyBudWxsIGlzIHByb3Blcmx5IGV4Y2x1ZGVkIGZyb20gV2Vha01hcFxuICAgIGlmIChPYmplY3QoaW5wdXQpICE9PSBpbnB1dCkgcmV0dXJuIHJldDtcblxuICAgIGRlcGVuZGVuY2llcy5wdXNoKGlucHV0KTtcbiAgICBpZiAoIXJlc3VsdENhY2hlLmhhcyhkZXBlbmRlbmNpZXMpKSB7XG4gICAgICByZXN1bHRDYWNoZS5zZXQoZGVwZW5kZW5jaWVzLCByZXRbMF0pO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtyZXN1bHRDYWNoZS5nZXQoZGVwZW5kZW5jaWVzKSwgcmV0WzFdLCByZXRbMl1dO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IGdldEVudGl0aWVzID0gKGVudGl0aWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB7XG4gIGNvbnN0IGVudGl0eUlzSW1tdXRhYmxlID0gaXNJbW11dGFibGUoZW50aXRpZXMpO1xuXG4gIHJldHVybiAoXG4gICAgZW50aXR5T3JJZDogUmVjb3JkPHN0cmluZywgYW55PiB8IHN0cmluZyxcbiAgICBzY2hlbWE6IEVudGl0eUludGVyZmFjZSxcbiAgKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hS2V5ID0gc2NoZW1hLmtleTtcblxuICAgIGlmICh0eXBlb2YgZW50aXR5T3JJZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBlbnRpdHlPcklkO1xuICAgIH1cblxuICAgIGlmIChlbnRpdHlJc0ltbXV0YWJsZSkge1xuICAgICAgcmV0dXJuIGVudGl0aWVzLmdldEluKFtzY2hlbWFLZXksIGVudGl0eU9ySWRdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50aXRpZXNbc2NoZW1hS2V5XT8uW2VudGl0eU9ySWRdO1xuICB9O1xufTtcblxudHlwZSBEZW5vcm1hbGl6ZVJldHVybjxTIGV4dGVuZHMgU2NoZW1hPiA9XG4gIHwgW1xuICAgICAgZGVub3JtYWxpemVkOiBEZW5vcm1hbGl6ZTxTPixcbiAgICAgIGZvdW5kOiB0cnVlLFxuICAgICAgZGVsZXRlZDogZmFsc2UsXG4gICAgICByZXNvbHZlZEVudGl0aWVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBhbnk+PixcbiAgICBdXG4gIHwgW1xuICAgICAgZGVub3JtYWxpemVkOiBEZW5vcm1hbGl6ZU51bGxhYmxlPFM+LFxuICAgICAgZm91bmQ6IGJvb2xlYW4sXG4gICAgICBkZWxldGVkOiB0cnVlLFxuICAgICAgcmVzb2x2ZWRFbnRpdGllczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgYW55Pj4sXG4gICAgXVxuICB8IFtcbiAgICAgIGRlbm9ybWFsaXplZDogRGVub3JtYWxpemVOdWxsYWJsZTxTPixcbiAgICAgIGZvdW5kOiBmYWxzZSxcbiAgICAgIGRlbGV0ZWQ6IGJvb2xlYW4sXG4gICAgICByZXNvbHZlZEVudGl0aWVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBhbnk+PixcbiAgICBdO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuZXhwb3J0IGNvbnN0IGRlbm9ybWFsaXplID0gPFMgZXh0ZW5kcyBTY2hlbWE+KFxuICBpbnB1dDogdW5rbm93bixcbiAgc2NoZW1hOiBTIHwgdW5kZWZpbmVkLFxuICBlbnRpdGllczogYW55LFxuICBlbnRpdHlDYWNoZTogRGVub3JtYWxpemVDYWNoZVsnZW50aXRpZXMnXSA9IHt9LFxuICByZXN1bHRDYWNoZTogV2Vha0xpc3RNYXA8b2JqZWN0LCBhbnk+ID0gbmV3IFdlYWtMaXN0TWFwKCksXG4pOiBEZW5vcm1hbGl6ZVJldHVybjxTPiA9PiB7XG4gIC8vIHVuZGVmaW5lZCBtZWFuIGRvbid0IGRvIGFueXRoaW5nXG4gIGlmIChzY2hlbWEgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBbaW5wdXQsIHRydWUsIGZhbHNlLCB7fV0gYXMgW2FueSwgYm9vbGVhbiwgYm9vbGVhbiwgYW55XTtcbiAgfVxuICBpZiAoaW5wdXQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBbdW5kZWZpbmVkLCBmYWxzZSwgZmFsc2UsIHt9XSBhcyBbYW55LCBib29sZWFuLCBib29sZWFuLCBhbnldO1xuICB9XG4gIGNvbnN0IHJlc29sdmVkRW50aXRpZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+ID0ge307XG4gIGNvbnN0IHVudmlzaXQgPSBnZXRVbnZpc2l0KFxuICAgIGVudGl0aWVzLFxuICAgIGVudGl0eUNhY2hlLFxuICAgIHJlc3VsdENhY2hlLFxuICAgIHJlc29sdmVkRW50aXRpZXMsXG4gICk7XG4gIHJldHVybiBbLi4udW52aXNpdChpbnB1dCwgc2NoZW1hKSwgcmVzb2x2ZWRFbnRpdGllc10gYXMgW1xuICAgIGFueSxcbiAgICBib29sZWFuLFxuICAgIGJvb2xlYW4sXG4gICAgYW55LFxuICBdO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbm9ybWFsaXplU2ltcGxlID0gPFMgZXh0ZW5kcyBTY2hlbWE+KFxuICBpbnB1dDogYW55LFxuICBzY2hlbWE6IFMgfCB1bmRlZmluZWQsXG4gIGVudGl0aWVzOiBhbnksXG4gIGVudGl0eUNhY2hlOiBEZW5vcm1hbGl6ZUNhY2hlWydlbnRpdGllcyddID0ge30sXG4gIHJlc3VsdENhY2hlOiBXZWFrTGlzdE1hcDxvYmplY3QsIGFueT4gPSBuZXcgV2Vha0xpc3RNYXAoKSxcbik6XG4gIHwgW2Rlbm9ybWFsaXplZDogRGVub3JtYWxpemU8Uz4sIGZvdW5kOiB0cnVlLCBkZWxldGVkOiBmYWxzZV1cbiAgfCBbZGVub3JtYWxpemVkOiBEZW5vcm1hbGl6ZU51bGxhYmxlPFM+LCBmb3VuZDogYm9vbGVhbiwgZGVsZXRlZDogdHJ1ZV1cbiAgfCBbZGVub3JtYWxpemVkOiBEZW5vcm1hbGl6ZU51bGxhYmxlPFM+LCBmb3VuZDogZmFsc2UsIGRlbGV0ZWQ6IGJvb2xlYW5dID0+XG4gIGRlbm9ybWFsaXplKGlucHV0LCBzY2hlbWEsIGVudGl0aWVzLCBlbnRpdHlDYWNoZSwgcmVzdWx0Q2FjaGUpLnNsaWNlKFxuICAgIDAsXG4gICAgMyxcbiAgKSBhcyBhbnk7XG5cbmZ1bmN0aW9uIGdldEdsb2JhbENhY2hlRW50cnkoXG4gIGVudGl0eUNhY2hlOiB7XG4gICAgW2tleTogc3RyaW5nXTogeyBbcGs6IHN0cmluZ106IFdlYWtMaXN0TWFwPG9iamVjdCwgRW50aXR5SW50ZXJmYWNlPGFueT4+IH07XG4gIH0sXG4gIHNjaGVtYTogYW55LFxuICBpZDogYW55LFxuKSB7XG4gIGlmICghZW50aXR5Q2FjaGVbc2NoZW1hLmtleV0pIGVudGl0eUNhY2hlW3NjaGVtYS5rZXldID0ge307XG4gIGlmICghZW50aXR5Q2FjaGVbc2NoZW1hLmtleV1baWRdKVxuICAgIGVudGl0eUNhY2hlW3NjaGVtYS5rZXldW2lkXSA9IG5ldyBXZWFrTGlzdE1hcCgpO1xuICByZXR1cm4gZW50aXR5Q2FjaGVbc2NoZW1hLmtleV1baWRdO1xufVxuXG5mdW5jdGlvbiB3aXRoVHJhY2tlZEVudGl0aWVzKHVudmlzaXQ6IFVudmlzaXRGdW5jdGlvbik6IHNjaGVtYS5VbnZpc2l0RnVuY3Rpb24ge1xuICAvLyBldmVyeSB0aW1lIHdlIG5lc3QsIHdlIHdhbnQgdG8gdW53cmFwIGJhY2sgdG8gdGhlIHRvcC5cbiAgLy8gdGhpcyBpcyBkdWUgdG8gb25seSBuZWVkZWQgdGhlIG5leHQgbGV2ZWwgb2YgbmVzdGVkIGVudGl0aWVzIGZvciBsb29rdXBcbiAgY29uc3Qgb3JpZ2luYWxVbnZpc2l0ID0gdW52aXNpdC5vZyB8fCB1bnZpc2l0O1xuICBjb25zdCB3cmFwcGVkVW52aXNpdCA9IChpbnB1dDogYW55LCBzY2hlbWE6IGFueSkgPT5cbiAgICBvcmlnaW5hbFVudmlzaXQoaW5wdXQsIHNjaGVtYSk7XG4gIHdyYXBwZWRVbnZpc2l0Lm9nID0gdW52aXNpdDtcbiAgcmV0dXJuIHdyYXBwZWRVbnZpc2l0O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFTQSxTQUFTQSxRQUFULFFBQXlCLHNCQUF6QjtBQUNBLFNBQVNDLE9BQVQsUUFBd0IsY0FBeEI7QUFDQSxPQUFPQyxXQUFQLE1BQXdCLGtCQUF4QjtBQUNBLFNBQVNDLFdBQVcsSUFBSUMsZ0JBQXhCLFFBQWdELG9CQUFoRDtBQUNBLFNBQVNELFdBQVcsSUFBSUUsaUJBQXhCLFFBQWlELHFCQUFqRDtBQUNBLFNBQVNDLFdBQVQsUUFBNEIsNkJBQTVCO0FBRUEsTUFBTUMsS0FBSyxHQUFHQyxNQUFNLENBQUMsT0FBRCxDQUFwQjs7QUFFQSxNQUFNQyxhQUFhLEdBQUcsQ0FDcEJDLFVBRG9CLEVBRXBCQyxNQUZvQixFQUdwQkMsT0FIb0IsRUFJcEJDLFNBSm9CLEVBUXBCQyxVQVJvQixFQVNwQkMsV0FUb0IsRUFVcEJDLFlBVm9CLEVBV3BCQyxVQVhvQixLQVlxRDtFQUN6RSxNQUFNQyxNQUFNLEdBQUdMLFNBQVMsQ0FBQ0gsVUFBRCxFQUFhQyxNQUFiLENBQXhCOztFQUNBLElBQUlPLE1BQU0sS0FBS2pCLE9BQWYsRUFBd0I7SUFDdEIsT0FBTyxDQUFDa0IsU0FBRCxFQUFZLElBQVosRUFBa0IsSUFBbEIsQ0FBUDtFQUNEOztFQUNELElBQ0VDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxRQUFaLEtBQXlCLFlBQXpCLElBQ0EsT0FBT0osTUFBUCxLQUFrQixRQURsQixJQUVDQSxNQUFELENBQW1CSyxRQUFuQixHQUE4QkMsUUFBOUIsQ0FBdUMsU0FBdkMsQ0FIRixFQUlFO0lBQ0EsTUFBTSxJQUFJQyxLQUFKLENBQ0g7QUFDUCxnRkFGVSxDQUFOO0VBSUQ7O0VBQ0QsSUFBSSxPQUFPUCxNQUFQLEtBQWtCLFFBQWxCLElBQThCQSxNQUFNLEtBQUssSUFBN0Ms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","import { infer as objectInfer } from './schemas/Object.js';\nimport { infer as arrayInfer } from './schemas/Array.js';\n/**\n * Build the result parameter to denormalize from schema alone.\n * Tries to compute the entity ids from params.\n */\n\nexport default function inferResults(schema, args, indexes) {\n // schema classes\n if (canInfer(schema)) {\n return schema.infer(args, indexes, inferResults);\n } // plain case\n\n\n if (typeof schema === 'object' && schema) {\n const method = Array.isArray(schema) ? arrayInfer : objectInfer;\n return method(schema, args, indexes, inferResults);\n } // fallback for things like null or undefined\n\n\n return schema;\n}\n\nfunction canInfer(schema) {\n return !!schema && typeof schema.infer === 'function';\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbmZlciIsIm9iamVjdEluZmVyIiwiYXJyYXlJbmZlciIsImluZmVyUmVzdWx0cyIsInNjaGVtYSIsImFyZ3MiLCJpbmRleGVzIiwiY2FuSW5mZXIiLCJtZXRob2QiLCJBcnJheSIsImlzQXJyYXkiXSwic291cmNlcyI6WyIuLi9zcmMvaW5mZXJSZXN1bHRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vcm1hbGl6ZWRJbmRleCwgTm9ybWFsaXplTnVsbGFibGUsIFNjaGVtYSB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgU2NoZW1hU2ltcGxlIH0gZnJvbSAnLi9zY2hlbWEuanMnO1xuaW1wb3J0IHsgaW5mZXIgYXMgb2JqZWN0SW5mZXIgfSBmcm9tICcuL3NjaGVtYXMvT2JqZWN0LmpzJztcbmltcG9ydCB7IGluZmVyIGFzIGFycmF5SW5mZXIgfSBmcm9tICcuL3NjaGVtYXMvQXJyYXkuanMnO1xuXG4vKipcbiAqIEJ1aWxkIHRoZSByZXN1bHQgcGFyYW1ldGVyIHRvIGRlbm9ybWFsaXplIGZyb20gc2NoZW1hIGFsb25lLlxuICogVHJpZXMgdG8gY29tcHV0ZSB0aGUgZW50aXR5IGlkcyBmcm9tIHBhcmFtcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5mZXJSZXN1bHRzPFMgZXh0ZW5kcyBTY2hlbWE+KFxuICBzY2hlbWE6IFMsXG4gIGFyZ3M6IGFueVtdLFxuICBpbmRleGVzOiBOb3JtYWxpemVkSW5kZXgsXG4pOiBOb3JtYWxpemVOdWxsYWJsZTxTPiB7XG4gIC8vIHNjaGVtYSBjbGFzc2VzXG4gIGlmIChjYW5JbmZlcihzY2hlbWEpKSB7XG4gICAgcmV0dXJuIHNjaGVtYS5pbmZlcihhcmdzLCBpbmRleGVzLCBpbmZlclJlc3VsdHMpO1xuICB9XG5cbiAgLy8gcGxhaW4gY2FzZVxuICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gJ29iamVjdCcgJiYgc2NoZW1hKSB7XG4gICAgY29uc3QgbWV0aG9kID0gQXJyYXkuaXNBcnJheShzY2hlbWEpID8gYXJyYXlJbmZlciA6IG9iamVjdEluZmVyO1xuICAgIHJldHVybiBtZXRob2Qoc2NoZW1hLCBhcmdzLCBpbmRleGVzLCBpbmZlclJlc3VsdHMpO1xuICB9XG5cbiAgLy8gZmFsbGJhY2sgZm9yIHRoaW5ncyBsaWtlIG51bGwgb3IgdW5kZWZpbmVkXG4gIHJldHVybiBzY2hlbWEgYXMgYW55O1xufVxuXG5mdW5jdGlvbiBjYW5JbmZlcihzY2hlbWE6IFNjaGVtYSk6IHNjaGVtYSBpcyBQaWNrPFNjaGVtYVNpbXBsZSwgJ2luZmVyJz4ge1xuICByZXR1cm4gISFzY2hlbWEgJiYgdHlwZW9mIChzY2hlbWEgYXMgYW55KS5pbmZlciA9PT0gJ2Z1bmN0aW9uJztcbn1cbiJdLCJtYXBwaW5ncyI6IkFBRUEsU0FBU0EsS0FBSyxJQUFJQyxXQUFsQixRQUFxQyxxQkFBckM7QUFDQSxTQUFTRCxLQUFLLElBQUlFLFVBQWxCLFFBQW9DLG9CQUFwQztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLGVBQWUsU0FBU0MsWUFBVCxDQUNiQyxNQURhLEVBRWJDLElBRmEsRUFHYkMsT0FIYSxFQUlTO0VBQ3RCO0VBQ0EsSUFBSUMsUUFBUSxDQUFDSCxNQUFELENBQVosRUFBc0I7SUFDcEIsT0FBT0EsTUFBTSxDQUFDSixLQUFQLENBQWFLLElBQWIsRUFBbUJDLE9BQW5CLEVBQTRCSCxZQUE1QixDQUFQO0VBQ0QsQ0FKcUIsQ0FNdEI7OztFQUNBLElBQUksT0FBT0MsTUFBUCxLQUFrQixRQUFsQixJQUE4QkEsTUFBbEMsRUFBMEM7SUFDeEMsTUFBTUksTUFBTSxHQUFHQyxLQUFLLENBQUNDLE9BQU4sQ0FBY04sTUFBZCxJQUF3QkYsVUFBeEIsR0FBcUNELFdBQXBEO0lBQ0EsT0FBT08sTUFBTSxDQUFDSixNQUFELEVBQVNDLElBQVQsRUFBZUMsT0FBZixFQUF3QkgsWUFBeEIsQ0FBYjtFQUNELENBVnFCLENBWXRCOzs7RUFDQSxPQUFPQyxNQUFQO0FBQ0Q7O0FBRUQsU0FBU0csUUFBVCxDQUFrQkgsTUFBbEIsRUFBeUU7RUFDdkUsT0FBTyxDQUFDLENBQUNBLE1BQUYsSUFBWSxPQUFRQSxNQUFELENBQWdCSixLQUF2QixLQUFpQyxVQUFwRDtBQUNEIn0=","import { RECEIVE_TYPE } from '../actionTypes.js';\nexport default function createReceive(endpoint, {\n args,\n fetchedAt,\n response,\n error = false\n}) {\n var _endpoint$errorExpiry, _endpoint$dataExpiryL;\n\n const expiryLength = error ? (_endpoint$errorExpiry = endpoint.errorExpiryLength) != null ? _endpoint$errorExpiry : 1000 : (_endpoint$dataExpiryL = endpoint.dataExpiryLength) != null ? _endpoint$dataExpiryL : 60000;\n /* istanbul ignore next */\n\n if (process.env.NODE_ENV === 'development' && expiryLength < 0) {\n throw new Error('Negative expiry length are not allowed.');\n }\n\n const now = Date.now();\n const meta = {\n args,\n fetchedAt: fetchedAt != null ? fetchedAt : now,\n date: now,\n expiresAt: now + expiryLength,\n // For legacy support; TODO: remove\n schema: endpoint.schema,\n key: endpoint.key(...args)\n }; // For legacy support; TODO: remove\n\n if (endpoint.update) meta.update = endpoint.update;\n if (endpoint.errorPolicy) meta.errorPolicy = endpoint.errorPolicy;\n const action = {\n type: RECEIVE_TYPE,\n payload: response,\n endpoint: endpoint,\n meta\n };\n if (error) action.error = true;\n return action;\n}\n/** Future action shape\n{\n type: RECEIVE_TYPE,\n endpoint,\n payload,\n meta: {\n args,\n date,\n expiresAt,\n fetchedAt,\n },\n error?: true,\n} */\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSRUNFSVZFX1RZUEUiLCJjcmVhdGVSZWNlaXZlIiwiZW5kcG9pbnQiLCJhcmdzIiwiZmV0Y2hlZEF0IiwicmVzcG9uc2UiLCJlcnJvciIsImV4cGlyeUxlbmd0aCIsImVycm9yRXhwaXJ5TGVuZ3RoIiwiZGF0YUV4cGlyeUxlbmd0aCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIkVycm9yIiwibm93IiwiRGF0ZSIsIm1ldGEiLCJkYXRlIiwiZXhwaXJlc0F0Iiwic2NoZW1hIiwia2V5IiwidXBkYXRlIiwiZXJyb3JQb2xpY3kiLCJhY3Rpb24iLCJ0eXBlIiwicGF5bG9hZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVyL2NyZWF0ZVJlY2VpdmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbmRwb2ludEludGVyZmFjZSwgUmVzb2x2ZVR5cGUgfSBmcm9tICdAcmVzdC1ob29rcy9lbmRwb2ludCc7XG5cbmltcG9ydCB0eXBlIHsgUmVjZWl2ZUFjdGlvbiB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IFJFQ0VJVkVfVFlQRSB9IGZyb20gJy4uL2FjdGlvblR5cGVzLmpzJztcbmltcG9ydCB7IEVuZHBvaW50VXBkYXRlRnVuY3Rpb24gfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUmVjZWl2ZTxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gIH0sXG4+KFxuICBlbmRwb2ludDogRSxcbiAgb3B0aW9uczoge1xuICAgIGFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XTtcbiAgICByZXNwb25zZTogRXJyb3I7XG4gICAgZmV0Y2hlZEF0PzogbnVtYmVyO1xuICAgIGVycm9yOiB0cnVlO1xuICB9LFxuKTogUmVjZWl2ZUFjdGlvbjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUmVjZWl2ZTxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gIH0sXG4+KFxuICBlbmRwb2ludDogRSxcbiAgb3B0aW9uczoge1xuICAgIGFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XTtcbiAgICByZXNwb25zZTogUmVzb2x2ZVR5cGU8RT47XG4gICAgZmV0Y2hlZEF0PzogbnVtYmVyO1xuICAgIGVycm9yPzogZmFsc2U7XG4gIH0sXG4pOiBSZWNlaXZlQWN0aW9uO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVSZWNlaXZlPFxuICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPjtcbiAgfSxcbj4oXG4gIGVuZHBvaW50OiBFLFxuICB7XG4gICAgYXJncyxcbiAgICBmZXRjaGVkQXQsXG4gICAgcmVzcG9uc2UsXG4gICAgZXJyb3IgPSBmYWxzZSxcbiAgfToge1xuICAgIGFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XTtcbiAgICByZXNwb25zZTogYW55O1xuICAgIGZldGNoZWRBdD86IG51bWJlcjtcbiAgICBlcnJvcj86IGJvb2xlYW47XG4gIH0sXG4pOiBSZWNlaXZlQWN0aW9uIHtcbiAgY29uc3QgZXhwaXJ5TGVuZ3RoOiBudW1iZXIgPSBlcnJvclxuICAgID8gZW5kcG9pbnQuZXJyb3JFeHBpcnlMZW5ndGggPz8gMTAwMFxuICAgIDogZW5kcG9pbnQuZGF0YUV4cGlyeUxlbmd0aCA/PyA2MDAwMDtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnICYmIGV4cGlyeUxlbmd0aCA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05lZ2F0aXZlIGV4cGlyeSBsZW5ndGggYXJlIG5vdCBhbGxvd2VkLicpO1xuICB9XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IG1ldGE6IFJlY2VpdmVBY3Rpb25bJ21ldGEnXSA9IHtcbiAgICBhcmdzLFxuICAgIGZldGNoZWRBdDogZmV0Y2hlZEF0ID8/IG5vdyxcbiAgICBkYXRlOiBub3csXG4gICAgZXhwaXJlc0F0OiBub3cgKyBleHBpcnlMZW5ndGgsXG4gICAgLy8gRm9yIGxlZ2FjeSBzdXBwb3J0OyBUT0RPOiByZW1vdmVcbiAgICBzY2hlbWE6IGVuZHBvaW50LnNjaGVtYSxcbiAgICBrZXk6IGVuZHBvaW50LmtleSguLi5hcmdzKSxcbiAgfTtcbiAgLy8gRm9yIGxlZ2FjeSBzdXBwb3J0OyBUT0RPOiByZW1vdmVcbiAgaWYgKGVuZHBvaW50LnVwZGF0ZSkgbWV0YS51cGRhdGUgPSBlbmRwb2ludC51cGRhdGU7XG4gIGlmIChlbmRwb2ludC5lcnJvclBvbGljeSkgbWV0YS5lcnJvclBvbGljeSA9IGVuZHBvaW50LmVycm9yUG9saWN5O1xuXG4gIGNvbnN0IGFjdGlvbjogUmVjZWl2ZUFjdGlvbiA9IHtcbiAgICB0eXBlOiBSRUNFSVZFX1RZUEUsXG4gICAgcGF5bG9hZDogcmVzcG9uc2UsXG4gICAgZW5kcG9pbnQ6IGVuZHBvaW50LFxuICAgIG1ldGEsXG4gIH07XG4gIGlmIChlcnJvcikgKGFjdGlvbiBhcyBhbnkpLmVycm9yID0gdHJ1ZTtcbiAgcmV0dXJuIGFjdGlvbjtcbn1cblxuLyoqIEZ1dHVyZSBhY3Rpb24gc2hhcGVcbntcbiAgdHlwZTogUkVDRUlWRV9UWVBFLFxuICBlbmRwb2ludCxcbiAgcGF5bG9hZCxcbiAgbWV0YToge1xuICAgIGFyZ3MsXG4gICAgZGF0ZSxcbiAgICBleHBpcmVzQXQsXG4gICAgZmV0Y2hlZEF0LFxuICB9LFxuICBlcnJvcj86IHRydWUsXG59ICovXG4iXSwibWFwcGluZ3MiOiJBQUdBLFNBQVNBLFlBQVQsUUFBNkIsbUJBQTdCO0FBK0JBLGVBQWUsU0FBU0MsYUFBVCxDQUtiQyxRQUxhLEVBTWI7RUFDRUMsSUFERjtFQUVFQyxTQUZGO0VBR0VDLFFBSEY7RUFJRUMsS0FBSyxHQUFHO0FBSlYsQ0FOYSxFQWlCRTtFQUFBOztFQUNmLE1BQU1DLFlBQW9CLEdBQUdELEtBQUssNEJBQzlCSixRQUFRLENBQUNNLGlCQURxQixvQ0FDQSxJQURBLDRCQUU5Qk4sUUFBUSxDQUFDTyxnQkFGcUIsb0NBRUQsS0FGakM7RUFHQTs7RUFDQSxJQUFJQyxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsUUFBWixLQUF5QixhQUF6QixJQUEwQ0wsWUFBWSxHQUFHLENBQTdELEVBQWdFO0lBQzlELE1BQU0sSUFBSU0sS0FBSixDQUFVLHlDQUFWLENBQU47RUFDRDs7RUFDRCxNQUFNQyxHQUFHLEdBQUdDLElBQUksQ0FBQ0QsR0FBTCxFQUFaO0VBQ0EsTUFBTUUsSUFBMkIsR0FBRztJQUNsQ2IsSUFEa0M7SUFFbENDLFNBQVMsRUFBRUEsU0FBRixXQUFFQSxTQUFGLEdBQWVVLEdBRlU7SUFHbENHLElBQUksRUFBRUgsR0FINEI7SUFJbENJLFNBQVMsRUFBRUosR0FBRyxHQUFHUCxZQUppQjtJQUtsQztJQUNBWSxNQUFNLEVBQUVqQixRQUFRLENBQUNpQixNQU5pQjtJQU9sQ0MsR0FBRyxFQUFFbEIsUUFBUSxDQUFDa0IsR0FBVCxDQUFhLEdBQUdqQixJQUFoQjtFQVA2QixDQUFwQyxDQVRlLENBa0JmOztFQUNBLElBQUlELFFBQVEsQ0FBQ21CLE1BQWIsRUFBcUJMLElBQUksQ0FBQ0ssTUFBTCxHQUFjbkIsUUFBUSxDQUFDbUIsTUFBdkI7RUFDckIsSUFBSW5CLFFBQVEsQ0FBQ29CLFdBQWIsRUFBMEJOLElBQUksQ0FBQ00sV0FBTCxHQUFtQnBCLFFBQVEsQ0FBQ29CLFdBQTVCO0VBRTFCLE1BQU1DLE1BQXFCLEdBQUc7SUFDNUJDLElBQUksRUFBRXhCLFlBRHNCO0lBRTVCeUIsT0FBTyxFQUFFcEIsUUFGbUI7SUFHNUJILFFBQVEsRUFBRUEsUUFIa0I7SUFJNUJjO0VBSjRCLENBQTlCO0VBTUEsSUFBSVYsS0FBSixFQUFZaUIsTUFBRCxDQUFnQmpCLEtBQWhCLEdBQXdCLElBQXhCO0VBQ1gsT0FBT2lCLE1BQVA7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIn0=","export default function selectMeta(state, fetchKey) {\n return state.meta[fetchKey];\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzZWxlY3RNZXRhIiwic3RhdGUiLCJmZXRjaEtleSIsIm1ldGEiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3RhdGUvc2VsZWN0b3JzL3NlbGVjdE1ldGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTdGF0ZSB9IGZyb20gJy4uLy4uL3R5cGVzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VsZWN0TWV0YTxSID0gYW55PihzdGF0ZTogU3RhdGU8Uj4sIGZldGNoS2V5OiBzdHJpbmcpIHtcbiAgcmV0dXJuIHN0YXRlLm1ldGFbZmV0Y2hLZXldO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFFQSxlQUFlLFNBQVNBLFVBQVQsQ0FBNkJDLEtBQTdCLEVBQThDQyxRQUE5QyxFQUFnRTtFQUM3RSxPQUFPRCxLQUFLLENBQUNFLElBQU4sQ0FBV0QsUUFBWCxDQUFQO0FBQ0QifQ==","import { ExpiryStatus } from '@rest-hooks/endpoint';\nimport { denormalize, isEntity, WeakListMap } from '@rest-hooks/normalizr';\nimport { inferResults } from '@rest-hooks/normalizr';\nimport { unsetDispatch } from '@rest-hooks/use-enhanced-reducer';\nimport { createUnsubscription, createSubscription } from './createSubscription.js';\nimport createReceive from './createReceive.js';\nimport createReset from './createReset.js';\nimport createFetch from './createFetch.js';\nimport createInvalidate from './createInvalidate.js';\nimport selectMeta from '../state/selectors/selectMeta.js';\n\n/**\n * Imperative control of Rest Hooks store\n * @see https://resthooks.io/docs/api/Controller\n */\nexport default class Controller {\n constructor({\n dispatch = unsetDispatch,\n globalCache = {\n entities: {},\n results: {}\n }\n } = {}) {\n this.fetch = (endpoint, ...args) => {\n const action = createFetch(endpoint, {\n args\n });\n this.dispatch(action);\n return action.meta.promise;\n };\n\n this.invalidate = (endpoint, ...args) => args[0] !== null ? this.dispatch(createInvalidate(endpoint, {\n args: args\n })) : Promise.resolve();\n\n this.resetEntireStore = () => this.dispatch(createReset());\n\n this.receive = (endpoint, ...rest) => {\n const response = rest[rest.length - 1];\n const action = createReceive(endpoint, {\n args: rest.slice(0, rest.length - 1),\n response\n });\n return this.dispatch(action);\n };\n\n this.receiveError = (endpoint, ...rest) => {\n const response = rest[rest.length - 1];\n const action = createReceive(endpoint, {\n args: rest.slice(0, rest.length - 1),\n response,\n error: true\n });\n return this.dispatch(action);\n };\n\n this.resolve = (endpoint, meta) => {\n return this.dispatch(createReceive(endpoint, meta));\n };\n\n this.subscribe = (endpoint, ...args) => args[0] !== null ? this.dispatch(createSubscription(endpoint, {\n args: args\n })) : Promise.resolve();\n\n this.unsubscribe = (endpoint, ...args) => args[0] !== null ? this.dispatch(createUnsubscription(endpoint, {\n args: args\n })) : Promise.resolve();\n\n this.snapshot = (state, fetchedAt) => {\n return new Snapshot(this, state, fetchedAt);\n };\n\n this.getError = (endpoint, ...rest) => {\n if (rest[0] === null) return;\n const state = rest[rest.length - 1];\n const args = rest.slice(0, rest.length - 1);\n const key = endpoint.key(...args);\n const meta = selectMeta(state, key);\n const results = state.results[key];\n if (results !== undefined && (meta == null ? void 0 : meta.errorPolicy) === 'soft') return;\n return meta == null ? void 0 : meta.error;\n };\n\n this.getResponse = (endpoint, ...rest) => {\n const state = rest[rest.length - 1];\n const args = rest.slice(0, rest.length - 1);\n const isActive = args.length !== 1 || args[0] !== null;\n const key = isActive ? endpoint.key(...args) : '';\n const cacheResults = isActive && state.results[key];\n const schema = endpoint.schema;\n const meta = selectMeta(state, key);\n let expiresAt = meta == null ? void 0 : meta.expiresAt;\n const results = this.getResults(endpoint.schema, cacheResults, args, state.indexes);\n\n if (!endpoint.schema || !schemaHasEntity(endpoint.schema)) {\n return {\n data: results,\n expiryStatus: meta != null && meta.invalidated ? ExpiryStatus.Invalid : cacheResults && !endpoint.invalidIfStale ? ExpiryStatus.Valid : ExpiryStatus.InvalidIfStale,\n expiresAt: expiresAt || 0\n };\n } // Warn users with bad configurations\n\n /* istanbul ignore next */\n\n\n if (process.env.NODE_ENV !== 'production' && schema && isEntity(schema)) {\n if (Array.isArray(results)) {\n throw new Error(`fetch key ${key} has list results when single result is expected`);\n }\n\n if (typeof results === 'object') {\n throw new Error(`fetch key ${key} has object results when entity's primary key (string) result is expected`);\n }\n }\n\n if (isActive && !this.globalCache.results[key]) this.globalCache.results[key] = new WeakListMap(); // second argument is false if any entities are missing\n // eslint-disable-next-line prefer-const\n\n const [data, found, suspend, resolvedEntities] = denormalize(results, schema, state.entities, this.globalCache.entities, isActive ? this.globalCache.results[key] : undefined); // fallback to entity expiry time\n\n if (!expiresAt) {\n // expiresAt existance is equivalent to cacheResults\n if (found) {\n // oldest entity dictates age\n expiresAt = Infinity; // using Object.keys ensures we don't hit `toString` type members\n\n Object.entries(resolvedEntities).forEach(([key, entities]) => Object.keys(entities).forEach(pk => {\n var _state$entityMeta$key, _state$entityMeta$key2, _state$entityMeta$key3;\n\n expiresAt = Math.min(expiresAt, (_state$entityMeta$key = (_state$entityMeta$key2 = state.entityMeta[key]) == null ? void 0 : (_state$entityMeta$key3 = _state$entityMeta$key2[pk]) == null ? void 0 : _state$entityMeta$key3.expiresAt) != null ? _state$entityMeta$key : Infinity);\n }));\n } else {\n expiresAt = 0;\n }\n } // https://resthooks.io/docs/getting-started/expiry-policy#expiry-status\n // we don't track the difference between stale or fresh because that is tied to triggering\n // conditions\n\n\n const expiryStatus = meta != null && meta.invalidated || suspend && !(meta != null && meta.error) ? ExpiryStatus.Invalid : suspend || endpoint.invalidIfStale || !cacheResults && !found ? ExpiryStatus.InvalidIfStale : ExpiryStatus.Valid;\n return {\n data,\n expiryStatus,\n expiresAt\n };\n };\n\n this.getResults = (schema, cacheResults, args, indexes) => {\n if (cacheResults || schema === undefined) return cacheResults;\n return inferResults(schema, args, indexes);\n };\n\n this.dispatch = dispatch;\n this.globalCache = globalCache;\n }\n /*************** Action Dispatchers ***************/\n\n /**\n * Fetches the endpoint with given args, updating the Rest Hooks cache with the response or error upon completion.\n * @see https://resthooks.io/docs/api/Controller#fetch\n */\n\n\n}\n/** Determine whether the schema has any entities.\n *\n * Without entities, denormalization is not needed, and results should not be inferred.\n */\n\nfunction schemaHasEntity(schema) {\n if (isEntity(schema)) return true;\n if (Array.isArray(schema)) return schema.length !== 0 && schemaHasEntity(schema[0]);\n\n if (schema && (typeof schema === 'object' || typeof schema === 'function')) {\n const nestedSchema = 'schema' in schema ? schema.schema : schema;\n\n if (typeof nestedSchema === 'function') {\n return schemaHasEntity(nestedSchema);\n }\n\n return Object.values(nestedSchema).some(x => schemaHasEntity(x));\n }\n\n return false;\n}\n\nclass Snapshot {\n constructor(controller, state, fetchedAt = 0) {\n this.state = void 0;\n this.controller = void 0;\n this.fetchedAt = void 0;\n\n this.getResponse = (endpoint, ...args) => {\n return this.controller.getResponse(endpoint, ...args, this.state);\n };\n\n this.getError = (endpoint, ...args) => {\n return this.controller.getError(endpoint, ...args, this.state);\n };\n\n this.state = state;\n this.controller = controller;\n this.fetchedAt = fetchedAt;\n }\n /*************** Data Access ***************/\n\n\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFeHBpcnlTdGF0dXMiLCJkZW5vcm1hbGl6ZSIsImlzRW50aXR5IiwiV2Vha0xpc3RNYXAiLCJpbmZlclJlc3VsdHMiLCJ1bnNldERpc3BhdGNoIiwiY3JlYXRlVW5zdWJzY3JpcHRpb24iLCJjcmVhdGVTdWJzY3JpcHRpb24iLCJjcmVhdGVSZWNlaXZlIiwiY3JlYXRlUmVzZXQiLCJjcmVhdGVGZXRjaCIsImNyZWF0ZUludmFsaWRhdGUiLCJzZWxlY3RNZXRhIiwiQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiZGlzcGF0Y2giLCJnbG9iYWxDYWNoZSIsImVudGl0aWVzIiwicmVzdWx0cyIsImZldGNoIiwiZW5kcG9pbnQiLCJhcmdzIiwiYWN0aW9uIiwibWV0YSIsInByb21pc2UiLCJpbnZhbGlkYXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZXNldEVudGlyZVN0b3JlIiwicmVjZWl2ZSIsInJlc3QiLCJyZXNwb25zZSIsImxlbmd0aCIsInNsaWNlIiwicmVjZWl2ZUVycm9yIiwiZXJyb3IiLCJzdWJzY3JpYmUiLCJ1bnN1YnNjcmliZSIsInNuYXBzaG90Iiwic3RhdGUiLCJmZXRjaGVkQXQiLCJTbmFwc2hvdCIsImdldEVycm9yIiwia2V5IiwidW5kZWZpbmVkIiwiZXJyb3JQb2xpY3kiLCJnZXRSZXNwb25zZSIsImlzQWN0aXZlIiwiY2FjaGVSZXN1bHRzIiwic2NoZW1hIiwiZXhwaXJlc0F0IiwiZ2V0UmVzdWx0cyIsImluZGV4ZXMiLCJzY2hlbWFIYXNFbnRpdHkiLCJkYXRhIiwiZXhwaXJ5U3RhdHVzIiwiaW52YWxpZGF0ZWQiLCJJbnZhbGlkIiwiaW52YWxpZElmU3RhbGUiLCJWYWxpZCIsIkludmFsaWRJZlN0YWxlIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiQXJyYXkiLCJpc0FycmF5IiwiRXJyb3IiLCJmb3VuZCIsInN1c3BlbmQiLCJyZXNvbHZlZEVudGl0aWVzIiwiSW5maW5pdHkiLCJPYmplY3QiLCJlbnRyaWVzIiwiZm9yRWFjaCIsImtleXMiLCJwayIsIk1hdGgiLCJtaW4iLCJlbnRpdHlNZXRhIiwibmVzdGVkU2NoZW1hIiwidmFsdWVzIiwic29tZSIsIngiLCJjb250cm9sbGVyIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyb2xsZXIvQ29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEVuZHBvaW50SW50ZXJmYWNlLFxuICBGZXRjaEZ1bmN0aW9uLFxuICBSZXNvbHZlVHlwZSxcbiAgRGVub3JtYWxpemVOdWxsYWJsZSxcbn0gZnJvbSAnQHJlc3QtaG9va3MvZW5kcG9pbnQnO1xuaW1wb3J0IHR5cGUgeyBFcnJvclR5cGVzLCBTbmFwc2hvdEludGVyZmFjZSB9IGZyb20gJ0ByZXN0LWhvb2tzL2VuZHBvaW50JztcbmltcG9ydCB7IEV4cGlyeVN0YXR1cyB9IGZyb20gJ0ByZXN0LWhvb2tzL2VuZHBvaW50JztcbmltcG9ydCB7XG4gIGRlbm9ybWFsaXplLFxuICBEZW5vcm1hbGl6ZUNhY2hlLFxuICBpc0VudGl0eSxcbiAgU2NoZW1hLFxuICBXZWFrTGlzdE1hcCxcbn0gZnJvbSAnQHJlc3QtaG9va3Mvbm9ybWFsaXpyJztcbmltcG9ydCB7IGluZmVyUmVzdWx0cyB9IGZyb20gJ0ByZXN0LWhvb2tzL25vcm1hbGl6cic7XG5pbXBvcnQgeyB1bnNldERpc3BhdGNoIH0gZnJvbSAnQHJlc3QtaG9va3MvdXNlLWVuaGFuY2VkLXJlZHVjZXInO1xuXG5pbXBvcnQgdHlwZSB7IEVuZHBvaW50VXBkYXRlRnVuY3Rpb24gfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVVuc3Vic2NyaXB0aW9uLFxuICBjcmVhdGVTdWJzY3JpcHRpb24sXG59IGZyb20gJy4vY3JlYXRlU3Vic2NyaXB0aW9uLmpzJztcbmltcG9ydCBjcmVhdGVSZWNlaXZlIGZyb20gJy4vY3JlYXRlUmVjZWl2ZS5qcyc7XG5pbXBvcnQgY3JlYXRlUmVzZXQgZnJvbSAnLi9jcmVhdGVSZXNldC5qcyc7XG5pbXBvcnQgY3JlYXRlRmV0Y2ggZnJvbSAnLi9jcmVhdGVGZXRjaC5qcyc7XG5pbXBvcnQgY3JlYXRlSW52YWxpZGF0ZSBmcm9tICcuL2NyZWF0ZUludmFsaWRhdGUuanMnO1xuaW1wb3J0IHNlbGVjdE1ldGEgZnJvbSAnLi4vc3RhdGUvc2VsZWN0b3JzL3NlbGVjdE1ldGEuanMnO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25UeXBlcywgU3RhdGUgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbnR5cGUgUkhEaXNwYXRjaCA9ICh2YWx1ZTogQWN0aW9uVHlwZXMpID0+IFByb21pc2U8dm9pZD47XG5cbmludGVyZmFjZSBDb25zdHJ1Y3RvclByb3BzIHtcbiAgZGlzcGF0Y2g/OiBSSERpc3BhdGNoO1xuICBnbG9iYWxDYWNoZT86IERlbm9ybWFsaXplQ2FjaGU7XG59XG5cbi8qKlxuICogSW1wZXJhdGl2ZSBjb250cm9sIG9mIFJlc3QgSG9va3Mgc3RvcmVcbiAqIEBzZWUgaHR0cHM6Ly9yZXN0aG9va3MuaW8vZG9jcy9hcGkvQ29udHJvbGxlclxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250cm9sbGVyIHtcbiAgZGVjbGFyZSByZWFkb25seSBkaXNwYXRjaDogUkhEaXNwYXRjaDtcbiAgZGVjbGFyZSByZWFkb25seSBnbG9iYWxDYWNoZTogRGVub3JtYWxpemVDYWNoZTtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgZGlzcGF0Y2ggPSB1bnNldERpc3BhdGNoLFxuICAgIGdsb2JhbENhY2hlID0ge1xuICAgICAgZW50aXRpZXM6IHt9LFxuICAgICAgcmVzdWx0czoge30sXG4gICAgfSxcbiAgfTogQ29uc3RydWN0b3JQcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5kaXNwYXRjaCA9IGRpc3BhdGNoO1xuICAgIHRoaXMuZ2xvYmFsQ2FjaGUgPSBnbG9iYWxDYWNoZTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKiogQWN0aW9uIERpc3BhdGNoZXJzICoqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgZW5kcG9pbnQgd2l0aCBnaXZlbiBhcmdzLCB1cGRhdGluZyB0aGUgUmVzdCBIb29rcyBjYWNoZSB3aXRoIHRoZSByZXNwb25zZSBvciBlcnJvciB1cG9uIGNvbXBsZXRpb24uXG4gICAqIEBzZWUgaHR0cHM6Ly9yZXN0aG9va3MuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNmZXRjaFxuICAgKi9cbiAgZmV0Y2ggPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYgeyB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+IH0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dXG4gICk6IFJldHVyblR5cGU8RT4gPT4ge1xuICAgIGNvbnN0IGFjdGlvbiA9IGNyZWF0ZUZldGNoKGVuZHBvaW50LCB7XG4gICAgICBhcmdzLFxuICAgIH0pO1xuICAgIHRoaXMuZGlzcGF0Y2goYWN0aW9uKTtcblxuICAgIHJldHVybiBhY3Rpb24ubWV0YS5wcm9taXNlIGFzIFJldHVyblR5cGU8RT47XG4gIH07XG5cbiAgLyoqXG4gICAqIEZvcmNlcyByZWZldGNoaW5nIGFuZCBzdXNwZW5zZSBvbiB1c2VSZXNvdXJjZSB3aXRoIHRoZSBzYW1lIEVuZHBvaW50IGFuZCBwYXJhbWV0ZXJzLlxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjaW52YWxpZGF0ZVxuICAgKi9cbiAgaW52YWxpZGF0ZSA9IDxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XSB8IHJlYWRvbmx5IFtudWxsXVxuICApOiBQcm9taXNlPHZvaWQ+ID0+XG4gICAgYXJnc1swXSAhPT0gbnVsbFxuICAgICAgPyB0aGlzLmRpc3BhdGNoKFxuICAgICAgICAgIGNyZWF0ZUludmFsaWRhdGUoZW5kcG9pbnQsIHtcbiAgICAgICAgICAgIGFyZ3M6IGFyZ3MgYXMgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dLFxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGVudGlyZSBSZXN0IEhvb2tzIGNhY2hlLiBBbGwgaW5mbGlnaHQgcmVxdWVzdHMgd2lsbCBub3QgcmVzb2x2ZS5cbiAgICogQHNlZSBodHRwczovL3Jlc3Rob29rcy5pby9kb2NzL2FwaS9Db250cm9sbGVyI3Jlc2V0RW50aXJlU3RvcmVcbiAgICovXG4gIHJlc2V0RW50aXJlU3RvcmUgPSAoKTogUHJvbWlzZTx2b2lkPiA9PiB0aGlzLmRpc3BhdGNoKGNyZWF0ZVJlc2V0KCkpO1xuXG4gIC8qKlxuICAgKiBTdG9yZXMgcmVzcG9uc2UgaW4gY2FjaGUgZm9yIGdpdmVuIEVuZHBvaW50IGFuZCBhcmdzLlxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjcmVjZWl2ZVxuICAgKi9cbiAgcmVjZWl2ZSA9IDxcbiAgICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgICB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+O1xuICAgIH0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT4sIGFueV1cbiAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFJlc29sdmVUeXBlPEU+ID0gcmVzdFtyZXN0Lmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGFjdGlvbiA9IGNyZWF0ZVJlY2VpdmUoZW5kcG9pbnQsIHtcbiAgICAgIGFyZ3M6IHJlc3Quc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKSBhcyBQYXJhbWV0ZXJzPEU+LFxuICAgICAgcmVzcG9uc2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2goYWN0aW9uKTtcbiAgfTtcblxuICAvKipcbiAgICogU3RvcmVzIHRoZSByZXN1bHQgb2YgRW5kcG9pbnQgYW5kIGFyZ3MgYXMgdGhlIGVycm9yIHByb3ZpZGVkLlxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjcmVjZWl2ZUVycm9yXG4gICAqL1xuICByZWNlaXZlRXJyb3IgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgICAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPjtcbiAgICB9LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+LCBFcnJvcl1cbiAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IEVycm9yID0gcmVzdFtyZXN0Lmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGFjdGlvbiA9IGNyZWF0ZVJlY2VpdmUoZW5kcG9pbnQsIHtcbiAgICAgIGFyZ3M6IHJlc3Quc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKSBhcyBQYXJhbWV0ZXJzPEU+LFxuICAgICAgcmVzcG9uc2UsXG4gICAgICBlcnJvcjogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChhY3Rpb24pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhbiBpbmZsaWdodCBmZXRjaC4gYGZldGNoZWRBdGAgc2hvdWxkIGBmZXRjaGAncyBgY3JlYXRlZEF0YFxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjcmVzb2x2ZVxuICAgKi9cbiAgcmVzb2x2ZSA9IDxcbiAgICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgICB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+O1xuICAgIH0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgbWV0YTpcbiAgICAgIHwge1xuICAgICAgICAgIGFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XTtcbiAgICAgICAgICByZXNwb25zZTogRXJyb3I7XG4gICAgICAgICAgZmV0Y2hlZEF0OiBudW1iZXI7XG4gICAgICAgICAgZXJyb3I6IHRydWU7XG4gICAgICAgIH1cbiAgICAgIHwge1xuICAgICAgICAgIGFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XTtcbiAgICAgICAgICByZXNwb25zZTogYW55O1xuICAgICAgICAgIGZldGNoZWRBdDogbnVtYmVyO1xuICAgICAgICAgIGVycm9yPzogZmFsc2U7XG4gICAgICAgIH0sXG4gICk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIHJldHVybiB0aGlzLmRpc3BhdGNoKGNyZWF0ZVJlY2VpdmUoZW5kcG9pbnQsIG1ldGEgYXMgYW55KSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIE1hcmtzIGEgbmV3IHN1YnNjcmlwdGlvbiB0byBhIGdpdmVuIEVuZHBvaW50LlxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc3Vic2NyaWJlXG4gICAqL1xuICBzdWJzY3JpYmUgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPEZldGNoRnVuY3Rpb24sIFNjaGVtYSB8IHVuZGVmaW5lZCwgdW5kZWZpbmVkPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKTogUHJvbWlzZTx2b2lkPiA9PlxuICAgIGFyZ3NbMF0gIT09IG51bGxcbiAgICAgID8gdGhpcy5kaXNwYXRjaChcbiAgICAgICAgICBjcmVhdGVTdWJzY3JpcHRpb24oZW5kcG9pbnQsIHtcbiAgICAgICAgICAgIGFyZ3M6IGFyZ3MgYXMgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dLFxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIC8qKlxuICAgKiBNYXJrcyBjb21wbGV0aW9uIG9mIHN1YnNjcmlwdGlvbiB0byBhIGdpdmVuIEVuZHBvaW50LlxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjdW5zdWJzY3JpYmVcbiAgICovXG4gIHVuc3Vic2NyaWJlID0gPFxuICAgIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZTxGZXRjaEZ1bmN0aW9uLCBTY2hlbWEgfCB1bmRlZmluZWQsIHVuZGVmaW5lZD4sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IFByb21pc2U8dm9pZD4gPT5cbiAgICBhcmdzWzBdICE9PSBudWxsXG4gICAgICA/IHRoaXMuZGlzcGF0Y2goXG4gICAgICAgICAgY3JlYXRlVW5zdWJzY3JpcHRpb24oZW5kcG9pbnQsIHtcbiAgICAgICAgICAgIGFyZ3M6IGFyZ3MgYXMgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dLFxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIC8qKioqKioqKioqKioqKiogTW9yZSAqKioqKioqKioqKioqKiovXG5cbiAgLyogVE9ETzpcbiAgYWJvcnQgPSA8RSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl1cbiAgKTogUHJvbWlzZTx2b2lkPlxuICAqL1xuXG4gIHNuYXBzaG90ID0gKHN0YXRlOiBTdGF0ZTx1bmtub3duPiwgZmV0Y2hlZEF0PzogbnVtYmVyKTogU25hcHNob3RJbnRlcmZhY2UgPT4ge1xuICAgIHJldHVybiBuZXcgU25hcHNob3QodGhpcywgc3RhdGUsIGZldGNoZWRBdCk7XG4gIH07XG5cbiAgZ2V0RXJyb3IgPSA8XG4gICAgRSBleHRlbmRzIFBpY2s8RW5kcG9pbnRJbnRlcmZhY2UsICdrZXknPixcbiAgICBBcmdzIGV4dGVuZHMgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RVsna2V5J10+XSB8IHJlYWRvbmx5IFtudWxsXSxcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5yZXN0OiBbLi4uQXJncywgU3RhdGU8dW5rbm93bj5dXG4gICk6IEVycm9yVHlwZXMgfCB1bmRlZmluZWQgPT4ge1xuICAgIGlmIChyZXN0WzBdID09PSBudWxsKSByZXR1cm47XG4gICAgY29uc3Qgc3RhdGUgPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV0gYXMgU3RhdGU8dW5rbm93bj47XG4gICAgY29uc3QgYXJncyA9IHJlc3Quc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKSBhcyBQYXJhbWV0ZXJzPEVbJ2tleSddPjtcbiAgICBjb25zdCBrZXkgPSBlbmRwb2ludC5rZXkoLi4uYXJncyk7XG5cbiAgICBjb25zdCBtZXRhID0gc2VsZWN0TWV0YShzdGF0ZSwga2V5KTtcbiAgICBjb25zdCByZXN1bHRzID0gc3RhdGUucmVzdWx0c1trZXldO1xuXG4gICAgaWYgKHJlc3VsdHMgIT09IHVuZGVmaW5lZCAmJiBtZXRhPy5lcnJvclBvbGljeSA9PT0gJ3NvZnQnKSByZXR1cm47XG5cbiAgICByZXR1cm4gbWV0YT8uZXJyb3IgYXMgYW55O1xuICB9O1xuXG4gIGdldFJlc3BvbnNlID0gPFxuICAgIEUgZXh0ZW5kcyBQaWNrPEVuZHBvaW50SW50ZXJmYWNlLCAna2V5JyB8ICdzY2hlbWEnIHwgJ2ludmFsaWRJZlN0YWxlJz4sXG4gICAgQXJncyBleHRlbmRzIHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPl0gfCByZWFkb25seSBbbnVsbF0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDogWy4uLkFyZ3MsIFN0YXRlPHVua25vd24+XVxuICApOiB7XG4gICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxFWydzY2hlbWEnXT47XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gIH0gPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gcmVzdFtyZXN0Lmxlbmd0aCAtIDFdIGFzIFN0YXRlPHVua25vd24+O1xuICAgIGNvbnN0IGFyZ3MgPSByZXN0LnNsaWNlKDAsIHJlc3QubGVuZ3RoIC0gMSkgYXMgUGFyYW1ldGVyczxFWydrZXknXT47XG4gICAgY29uc3QgaXNBY3RpdmUgPSBhcmdzLmxlbmd0aCAhPT0gMSB8fCBhcmdzWzBdICE9PSBudWxsO1xuICAgIGNvbnN0IGtleSA9IGlzQWN0aXZlID8gZW5kcG9pbnQua2V5KC4uLmFyZ3MpIDogJyc7XG4gICAgY29uc3QgY2FjaGVSZXN1bHRzID0gaXNBY3RpdmUgJiYgc3RhdGUucmVzdWx0c1trZXldO1xuICAgIGNvbnN0IHNjaGVtYSA9IGVuZHBvaW50LnNjaGVtYTtcbiAgICBjb25zdCBtZXRhID0gc2VsZWN0TWV0YShzdGF0ZSwga2V5KTtcbiAgICBsZXQgZXhwaXJlc0F0ID0gbWV0YT8uZXhwaXJlc0F0O1xuXG4gICAgY29uc3QgcmVzdWx0cyA9IHRoaXMuZ2V0UmVzdWx0cyhcbiAgICAgIGVuZHBvaW50LnNjaGVtYSxcbiAgICAgIGNhY2hlUmVzdWx0cyxcbiAgICAgIGFyZ3MsXG4gICAgICBzdGF0ZS5pbmRleGVzLFxuICAgICk7XG5cbiAgICBpZiAoIWVuZHBvaW50LnNjaGVtYSB8fCAhc2NoZW1hSGFzRW50aXR5KGVuZHBvaW50LnNjaGVtYSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHJlc3VsdHMsXG4gICAgICAgIGV4cGlyeVN0YXR1czogbWV0YT8uaW52YWxpZGF0ZWRcbiAgICAgICAgICA/IEV4cGlyeVN0YXR1cy5JbnZhbGlkXG4gICAgICAgICAgOiBjYWNoZVJlc3VsdHMgJiYgIWVuZHBvaW50LmludmFsaWRJZlN0YWxlXG4gICAgICAgICAgPyBFeHBpcnlTdGF0dXMuVmFsaWRcbiAgICAgICAgICA6IEV4cGlyeVN0YXR1cy5JbnZhbGlkSWZTdGFsZSxcbiAgICAgICAgZXhwaXJlc0F0OiBleHBpcmVzQXQgfHwgMCxcbiAgICAgIH0gYXMge1xuICAgICAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICAgICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICAgICAgfTtcbiAgICB9XG4gICAgLy8gV2FybiB1c2VycyB3aXRoIGJhZCBjb25maWd1cmF0aW9uc1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc2NoZW1hICYmIGlzRW50aXR5KHNjaGVtYSkpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdHMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgZmV0Y2gga2V5ICR7a2V5fSBoYXMgbGlzdCByZXN1bHRzIHdoZW4gc2luZ2xlIHJlc3VsdCBpcyBleHBlY3RlZGAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHJlc3VsdHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgZmV0Y2gga2V5ICR7a2V5fSBoYXMgb2JqZWN0IHJlc3VsdHMgd2hlbiBlbnRpdHkncyBwcmltYXJ5IGtleSAoc3RyaW5nKSByZXN1bHQgaXMgZXhwZWN0ZWRgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc0FjdGl2ZSAmJiAhdGhpcy5nbG9iYWxDYWNoZS5yZXN1bHRzW2tleV0pXG4gICAgICB0aGlzLmdsb2JhbENhY2hlLnJlc3VsdHNba2V5XSA9IG5ldyBXZWFrTGlzdE1hcCgpO1xuXG4gICAgLy8gc2Vjb25kIGFyZ3VtZW50IGlzIGZhbHNlIGlmIGFueSBlbnRpdGllcyBhcmUgbWlzc2luZ1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICBjb25zdCBbZGF0YSwgZm91bmQsIHN1c3BlbmQsIHJlc29sdmVkRW50aXRpZXNdID0gZGVub3JtYWxpemUoXG4gICAgICByZXN1bHRzLFxuICAgICAgc2NoZW1hLFxuICAgICAgc3RhdGUuZW50aXRpZXMsXG4gICAgICB0aGlzLmdsb2JhbENhY2hlLmVudGl0aWVzLFxuICAgICAgaXNBY3RpdmUgPyB0aGlzLmdsb2JhbENhY2hlLnJlc3VsdHNba2V5XSA6IHVuZGVmaW5lZCxcbiAgICApIGFzIFtcbiAgICAgIERlbm9ybWFsaXplTnVsbGFibGU8RVsnc2NoZW1hJ10+LFxuICAgICAgYm9vbGVhbixcbiAgICAgIGJvb2xlYW4sXG4gICAgICBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBhbnk+PixcbiAgICBdO1xuXG4gICAgLy8gZmFsbGJhY2sgdG8gZW50aXR5IGV4cGlyeSB0aW1lXG4gICAgaWYgKCFleHBpcmVzQXQpIHtcbiAgICAgIC8vIGV4cGlyZXNBdCBleGlzdGFuY2UgaXMgZXF1aXZhbGVudCB0byBjYWNoZVJlc3VsdHNcbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAvLyBvbGRlc3QgZW50aXR5IGRpY3RhdGVzIGFnZVxuICAgICAgICBleHBpcmVzQXQgPSBJbmZpbml0eTtcbiAgICAgICAgLy8gdXNpbmcgT2JqZWN0LmtleXMgZW5zdXJlcyB3ZSBkb24ndCBoaXQgYHRvU3RyaW5nYCB0eXBlIG1lbWJlcnNcbiAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzb2x2ZWRFbnRpdGllcykuZm9yRWFjaCgoW2tleSwgZW50aXRpZXNdKSA9PlxuICAgICAgICAgIE9iamVjdC5rZXlzKGVudGl0aWVzKS5mb3JFYWNoKHBrID0+IHtcbiAgICAgICAgICAgIGV4cGlyZXNBdCA9IE1hdGgubWluKFxuICAgICAgICAgICAgICBleHBpcmVzQXQsXG4gICAgICAgICAgICAgIHN0YXRlLmVudGl0eU1ldGFba2V5XT8uW3BrXT8uZXhwaXJlc0F0ID8/IEluZmluaXR5LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4cGlyZXNBdCA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9yZXN0aG9va3MuaW8vZG9jcy9nZXR0aW5nLXN0YXJ0ZWQvZXhwaXJ5LXBvbGljeSNleHBpcnktc3RhdHVzXG4gICAgLy8gd2UgZG9uJ3QgdHJhY2sgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzdGFsZSBvciBmcmVzaCBiZWNhdXNlIHRoYXQgaXMgdGllZCB0byB0cmlnZ2VyaW5nXG4gICAgLy8gY29uZGl0aW9uc1xuICAgIGNvbnN0IGV4cGlyeVN0YXR1cyA9XG4gICAgICBtZXRhPy5pbnZhbGlkYXRlZCB8fCAoc3VzcGVuZCAmJiAhbWV0YT8uZXJyb3IpXG4gICAgICAgID8gRXhwaXJ5U3RhdHVzLkludmFsaWRcbiAgICAgICAgOiBzdXNwZW5kIHx8IGVuZHBvaW50LmludmFsaWRJZlN0YWxlIHx8ICghY2FjaGVSZXN1bHRzICYmICFmb3VuZClcbiAgICAgICAgPyBFeHBpcnlTdGF0dXMuSW52YWxpZElmU3RhbGVcbiAgICAgICAgOiBFeHBpcnlTdGF0dXMuVmFsaWQ7XG5cbiAgICByZXR1cm4geyBkYXRhLCBleHBpcnlTdGF0dXMsIGV4cGlyZXNBdCB9O1xuICB9O1xuXG4gIHByaXZhdGUgZ2V0UmVzdWx0cyA9IChcbiAgICBzY2hlbWE6IFNjaGVtYSB8IHVuZGVmaW5lZCxcbiAgICBjYWNoZVJlc3VsdHM6IGFueSxcbiAgICBhcmdzOiBhbnlbXSxcbiAgICBpbmRleGVzOiBhbnksXG4gICkgPT4ge1xuICAgIGlmIChjYWNoZVJlc3VsdHMgfHwgc2NoZW1hID09PSB1bmRlZmluZWQpIHJldHVybiBjYWNoZVJlc3VsdHM7XG5cbiAgICByZXR1cm4gaW5mZXJSZXN1bHRzKHNjaGVtYSwgYXJncywgaW5kZXhlcyk7XG4gIH07XG59XG5cbi8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgc2NoZW1hIGhhcyBhbnkgZW50aXRpZXMuXG4gKlxuICogV2l0aG91dCBlbnRpdGllcywgZGVub3JtYWxpemF0aW9uIGlzIG5vdCBuZWVkZWQsIGFuZCByZXN1bHRzIHNob3VsZCBub3QgYmUgaW5mZXJyZWQuXG4gKi9cbmZ1bmN0aW9uIHNjaGVtYUhhc0VudGl0eShzY2hlbWE6IFNjaGVtYSk6IGJvb2xlYW4ge1xuICBpZiAoaXNFbnRpdHkoc2NoZW1hKSkgcmV0dXJuIHRydWU7XG4gIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgcmV0dXJuIHNjaGVtYS5sZW5ndGggIT09IDAgJiYgc2NoZW1hSGFzRW50aXR5KHNjaGVtYVswXSk7XG4gIGlmIChzY2hlbWEgJiYgKHR5cGVvZiBzY2hlbWEgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBzY2hlbWEgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgY29uc3QgbmVzdGVkU2NoZW1hID1cbiAgICAgICdzY2hlbWEnIGluIHNjaGVtYSA/IChzY2hlbWEuc2NoZW1hIGFzIFJlY29yZDxzdHJpbmcsIFNjaGVtYT4pIDogc2NoZW1hO1xuICAgIGlmICh0eXBlb2YgbmVzdGVkU2NoZW1hID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gc2NoZW1hSGFzRW50aXR5KG5lc3RlZFNjaGVtYSk7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKG5lc3RlZFNjaGVtYSkuc29tZSh4ID0+IHNjaGVtYUhhc0VudGl0eSh4KSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgdHlwZSB7IEVycm9yVHlwZXMgfTtcblxuY2xhc3MgU25hcHNob3Q8VCA9IHVua25vd24+IGltcGxlbWVudHMgU25hcHNob3RJbnRlcmZhY2Uge1xuICBwcml2YXRlIHN0YXRlOiBTdGF0ZTxUPjtcbiAgcHJpdmF0ZSBjb250cm9sbGVyOiBDb250cm9sbGVyO1xuICByZWFkb25seSBmZXRjaGVkQXQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyOiBDb250cm9sbGVyLCBzdGF0ZTogU3RhdGU8VD4sIGZldGNoZWRBdCA9IDApIHtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5jb250cm9sbGVyID0gY29udHJvbGxlcjtcbiAgICB0aGlzLmZldGNoZWRBdCA9IGZldGNoZWRBdDtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKiogRGF0YSBBY2Nlc3MgKioqKioqKioqKioqKioqL1xuICBnZXRSZXNwb25zZSA9IDxcbiAgICBFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleScgfCAnc2NoZW1hJyB8ICdpbnZhbGlkSWZTdGFsZSc+LFxuICAgIEFyZ3MgZXh0ZW5kcyByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dLFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IEFyZ3NcbiAgKToge1xuICAgIGRhdGE6IERlbm9ybWFsaXplTnVsbGFibGU8RVsnc2NoZW1hJ10+O1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICB9ID0+IHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldFJlc3BvbnNlKGVuZHBvaW50LCAuLi5hcmdzLCB0aGlzLnN0YXRlKTtcbiAgfTtcblxuICBnZXRFcnJvciA9IDxcbiAgICBFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleSc+LFxuICAgIEFyZ3MgZXh0ZW5kcyByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dLFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IEFyZ3NcbiAgKTogRXJyb3JUeXBlcyB8IHVuZGVmaW5lZCA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5nZXRFcnJvcihlbmRwb2ludCwgLi4uYXJncywgdGhpcy5zdGF0ZSk7XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiJBQU9BLFNBQVNBLFlBQVQsUUFBNkIsc0JBQTdCO0FBQ0EsU0FDRUMsV0FERixFQUdFQyxRQUhGLEVBS0VDLFdBTEYsUUFNTyx1QkFOUDtBQU9BLFNBQVNDLFlBQVQsUUFBNkIsdUJBQTdCO0FBQ0EsU0FBU0MsYUFBVCxRQUE4QixrQ0FBOUI7QUFHQSxTQUNFQyxvQkFERixFQUVFQyxrQkFGRixRQUdPLHlCQUhQO0FBSUEsT0FBT0MsYUFBUCxNQUEwQixvQkFBMUI7QUFDQSxPQUFPQyxXQUFQLE1BQXdCLGtCQUF4QjtBQUNBLE9BQU9DLFdBQVAsTUFBd0Isa0JBQXhCO0FBQ0EsT0FBT0MsZ0JBQVAsTUFBNkIsdUJBQTdCO0FBQ0EsT0FBT0MsVUFBUCxNQUF1QixrQ0FBdkI7O0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU1DLFVBQU4sQ0FBaUI7RUFJOUJDLFdBQVcsQ0FBQztJQUNWQyxRQUFRLEdBQUdWLGFBREQ7SUFFVlcsV0FBVyxHQUFHO01BQ1pDLFFBQVEsRUFBRSxFQURFO01BRVpDLE9BQU8sRUFBRTtJQUZHO0VBRkosSUFNVSxFQU5YLEVBTWU7SUFBQSxLQVcxQkMsS0FYMEIsR0FXbEIsQ0FHTkMsUUFITSxFQUlOLEdBQUdDLElBSkcsS0FLWTtNQUNsQixNQUFNQyxNQUFNLEdBQUdaLFdBQVcsQ0FBQ1UsUUFBRCxFQUFXO1FBQ25DQztNQURtQyxDQUFYLENBQTFCO01BR0EsS0FBS04sUUFBTCxDQUFjTyxNQUFkO01BRUEsT0FBT0EsTUFBTSxDQUFDQyxJQUFQLENBQVlDLE9BQW5CO0lBQ0QsQ0F2QnlCOztJQUFBLEtBNkIxQkMsVUE3QjBCLEdBNkJiLENBQ1hMLFFBRFcsRUFFWCxHQUFHQyxJQUZRLEtBSVhBLElBQUksQ0FBQyxDQUFELENBQUosS0FBWSxJQUFaLEdBQ0ksS0FBS04sUUFBTCxDQUNFSixnQkFBZ0IsQ0FBQ1MsUUFBRCxF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","import { FETCH_TYPE } from '../actionTypes.js';\n\n/**\n * Requesting a fetch to begin\n */\nexport default function createFetch(endpoint, {\n args\n}) {\n const key = endpoint.key(...args);\n let resolve = 0;\n let reject = 0;\n const promise = new Promise((a, b) => {\n [resolve, reject] = [a, b];\n });\n const meta = {\n schema: endpoint.schema,\n type: endpoint.sideEffect ? 'mutate' : 'read',\n args,\n key,\n throttle: !endpoint.sideEffect,\n options: endpoint,\n resolve,\n reject,\n promise,\n createdAt: Date.now()\n };\n\n if (endpoint.update) {\n meta.update = endpoint.update;\n }\n\n if (endpoint.optimisticUpdate) {\n meta.optimisticResponse = endpoint.optimisticUpdate(...args);\n }\n\n return {\n type: FETCH_TYPE,\n payload: () => endpoint(...args),\n meta,\n endpoint\n };\n}\n/** Future action shape\n{\n type: FETCH_TYPE,\n endpoint,\n meta: {\n args,\n createdAt,\n promise,\n resolve,\n reject,\n }\n} */\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGRVRDSF9UWVBFIiwiY3JlYXRlRmV0Y2giLCJlbmRwb2ludCIsImFyZ3MiLCJrZXkiLCJyZXNvbHZlIiwicmVqZWN0IiwicHJvbWlzZSIsIlByb21pc2UiLCJhIiwiYiIsIm1ldGEiLCJzY2hlbWEiLCJ0eXBlIiwic2lkZUVmZmVjdCIsInRocm90dGxlIiwib3B0aW9ucyIsImNyZWF0ZWRBdCIsIkRhdGUiLCJub3ciLCJ1cGRhdGUiLCJvcHRpbWlzdGljVXBkYXRlIiwib3B0aW1pc3RpY1Jlc3BvbnNlIiwicGF5bG9hZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVyL2NyZWF0ZUZldGNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW5kcG9pbnRJbnRlcmZhY2UgfSBmcm9tICdAcmVzdC1ob29rcy9lbmRwb2ludCc7XG5cbmltcG9ydCB0eXBlIHsgRmV0Y2hBY3Rpb24gfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBGRVRDSF9UWVBFIH0gZnJvbSAnLi4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IHsgRW5kcG9pbnRVcGRhdGVGdW5jdGlvbiB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKipcbiAqIFJlcXVlc3RpbmcgYSBmZXRjaCB0byBiZWdpblxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVGZXRjaDxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYgeyB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+IH0sXG4+KGVuZHBvaW50OiBFLCB7IGFyZ3MgfTogeyBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0gfSk6IEZldGNoQWN0aW9uIHtcbiAgY29uc3Qga2V5ID0gZW5kcG9pbnQua2V5KC4uLmFyZ3MpO1xuICBsZXQgcmVzb2x2ZTogKHZhbHVlPzogYW55IHwgUHJvbWlzZUxpa2U8YW55PikgPT4gdm9pZCA9IDAgYXMgYW55O1xuICBsZXQgcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkID0gMCBhcyBhbnk7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxhbnk+KChhLCBiKSA9PiB7XG4gICAgW3Jlc29sdmUsIHJlamVjdF0gPSBbYSwgYl07XG4gIH0pO1xuICBjb25zdCBtZXRhOiBGZXRjaEFjdGlvblsnbWV0YSddID0ge1xuICAgIHNjaGVtYTogZW5kcG9pbnQuc2NoZW1hLFxuICAgIHR5cGU6IGVuZHBvaW50LnNpZGVFZmZlY3QgPyAoJ211dGF0ZScgYXMgY29uc3QpIDogKCdyZWFkJyBhcyBjb25zdCksXG4gICAgYXJncyxcbiAgICBrZXksXG4gICAgdGhyb3R0bGU6ICFlbmRwb2ludC5zaWRlRWZmZWN0LFxuICAgIG9wdGlvbnM6IGVuZHBvaW50LFxuICAgIHJlc29sdmUsXG4gICAgcmVqZWN0LFxuICAgIHByb21pc2UsXG4gICAgY3JlYXRlZEF0OiBEYXRlLm5vdygpLFxuICB9O1xuXG4gIGlmIChlbmRwb2ludC51cGRhdGUpIHtcbiAgICBtZXRhLnVwZGF0ZSA9IGVuZHBvaW50LnVwZGF0ZTtcbiAgfVxuXG4gIGlmIChlbmRwb2ludC5vcHRpbWlzdGljVXBkYXRlKSB7XG4gICAgbWV0YS5vcHRpbWlzdGljUmVzcG9uc2UgPSBlbmRwb2ludC5vcHRpbWlzdGljVXBkYXRlKC4uLmFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBGRVRDSF9UWVBFLFxuICAgIHBheWxvYWQ6ICgpID0+IGVuZHBvaW50KC4uLmFyZ3MpLFxuICAgIG1ldGEsXG4gICAgZW5kcG9pbnQsXG4gIH07XG59XG5cbi8qKiBGdXR1cmUgYWN0aW9uIHNoYXBlXG57XG4gIHR5cGU6IEZFVENIX1RZUEUsXG4gIGVuZHBvaW50LFxuICBtZXRhOiB7XG4gICAgYXJncyxcbiAgICBjcmVhdGVkQXQsXG4gICAgcHJvbWlzZSxcbiAgICByZXNvbHZlLFxuICAgIHJlamVjdCxcbiAgfVxufSAqL1xuIl0sIm1hcHBpbmdzIjoiQUFHQSxTQUFTQSxVQUFULFFBQTJCLG1CQUEzQjs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVNDLFdBQVQsQ0FFYkMsUUFGYSxFQUVBO0VBQUVDO0FBQUYsQ0FGQSxFQUU4RDtFQUMzRSxNQUFNQyxHQUFHLEdBQUdGLFFBQVEsQ0FBQ0UsR0FBVCxDQUFhLEdBQUdELElBQWhCLENBQVo7RUFDQSxJQUFJRSxPQUFpRCxHQUFHLENBQXhEO0VBQ0EsSUFBSUMsTUFBOEIsR0FBRyxDQUFyQztFQUNBLE1BQU1DLE9BQU8sR0FBRyxJQUFJQyxPQUFKLENBQWlCLENBQUNDLENBQUQsRUFBSUMsQ0FBSixLQUFVO0lBQ3pDLENBQUNMLE9BQUQsRUFBVUMsTUFBVixJQUFvQixDQUFDRyxDQUFELEVBQUlDLENBQUosQ0FBcEI7RUFDRCxDQUZlLENBQWhCO0VBR0EsTUFBTUMsSUFBeUIsR0FBRztJQUNoQ0MsTUFBTSxFQUFFVixRQUFRLENBQUNVLE1BRGU7SUFFaENDLElBQUksRUFBRVgsUUFBUSxDQUFDWSxVQUFULEdBQXVCLFFBQXZCLEdBQTZDLE1BRm5CO0lBR2hDWCxJQUhnQztJQUloQ0MsR0FKZ0M7SUFLaENXLFFBQVEsRUFBRSxDQUFDYixRQUFRLENBQUNZLFVBTFk7SUFNaENFLE9BQU8sRUFBRWQsUUFOdUI7SUFPaENHLE9BUGdDO0lBUWhDQyxNQVJnQztJQVNoQ0MsT0FUZ0M7SUFVaENVLFNBQVMsRUFBRUMsSUFBSSxDQUFDQyxHQUFMO0VBVnFCLENBQWxDOztFQWFBLElBQUlqQixRQUFRLENBQUNrQixNQUFiLEVBQXFCO0lBQ25CVCxJQUFJLENBQUNTLE1BQUwsR0FBY2xCLFFBQVEsQ0FBQ2tCLE1BQXZCO0VBQ0Q7O0VBRUQsSUFBSWxCLFFBQVEsQ0FBQ21CLGdCQUFiLEVBQStCO0lBQzdCVixJQUFJLENBQUNXLGtCQUFMLEdBQTBCcEIsUUFBUSxDQUFDbUIsZ0JBQVQsQ0FBMEIsR0FBR2xCLElBQTdCLENBQTFCO0VBQ0Q7O0VBRUQsT0FBTztJQUNMVSxJQUFJLEVBQUViLFVBREQ7SUFFTHVCLE9BQU8sRUFBRSxNQUFNckIsUUFBUSxDQUFDLEdBQUdDLElBQUosQ0FGbEI7SUFHTFEsSUFISztJQUlMVDtFQUpLLENBQVA7QUFNRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSJ9","import { INVALIDATE_TYPE } from '../actionTypes.js';\nexport default function createInvalidate(endpoint, {\n args\n}) {\n return {\n type: INVALIDATE_TYPE,\n meta: {\n key: endpoint.key(...args)\n }\n };\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJTlZBTElEQVRFX1RZUEUiLCJjcmVhdGVJbnZhbGlkYXRlIiwiZW5kcG9pbnQiLCJhcmdzIiwidHlwZSIsIm1ldGEiLCJrZXkiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJvbGxlci9jcmVhdGVJbnZhbGlkYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW5kcG9pbnRJbnRlcmZhY2UgfSBmcm9tICdAcmVzdC1ob29rcy9lbmRwb2ludCc7XG5cbmltcG9ydCB0eXBlIHsgSW52YWxpZGF0ZUFjdGlvbiB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IElOVkFMSURBVEVfVFlQRSB9IGZyb20gJy4uL2FjdGlvblR5cGVzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlSW52YWxpZGF0ZTxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICBlbmRwb2ludDogRSxcbiAgeyBhcmdzIH06IHsgYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dIH0sXG4pOiBJbnZhbGlkYXRlQWN0aW9uIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBJTlZBTElEQVRFX1RZUEUsXG4gICAgbWV0YToge1xuICAgICAga2V5OiBlbmRwb2ludC5rZXkoLi4uYXJncyksXG4gICAgfSxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBR0EsU0FBU0EsZUFBVCxRQUFnQyxtQkFBaEM7QUFFQSxlQUFlLFNBQVNDLGdCQUFULENBQ2JDLFFBRGEsRUFFYjtFQUFFQztBQUFGLENBRmEsRUFHSztFQUNsQixPQUFPO0lBQ0xDLElBQUksRUFBRUosZUFERDtJQUVMSyxJQUFJLEVBQUU7TUFDSkMsR0FBRyxFQUFFSixRQUFRLENBQUNJLEdBQVQsQ0FBYSxHQUFHSCxJQUFoQjtJQUREO0VBRkQsQ0FBUDtBQU1EIn0=","import { RESET_TYPE } from '../actionTypes.js';\nexport default function createReset() {\n return {\n type: RESET_TYPE,\n date: Date.now()\n };\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSRVNFVF9UWVBFIiwiY3JlYXRlUmVzZXQiLCJ0eXBlIiwiZGF0ZSIsIkRhdGUiLCJub3ciXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJvbGxlci9jcmVhdGVSZXNldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJlc2V0QWN0aW9uIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHsgUkVTRVRfVFlQRSB9IGZyb20gJy4uL2FjdGlvblR5cGVzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUmVzZXQoKTogUmVzZXRBY3Rpb24ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFJFU0VUX1RZUEUsXG4gICAgZGF0ZTogRGF0ZS5ub3coKSxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBU0EsVUFBVCxRQUEyQixtQkFBM0I7QUFFQSxlQUFlLFNBQVNDLFdBQVQsR0FBb0M7RUFDakQsT0FBTztJQUNMQyxJQUFJLEVBQUVGLFVBREQ7SUFFTEcsSUFBSSxFQUFFQyxJQUFJLENBQUNDLEdBQUw7RUFGRCxDQUFQO0FBSUQifQ==","import { SUBSCRIBE_TYPE, UNSUBSCRIBE_TYPE } from '../actionTypes.js';\nexport function createSubscription(endpoint, {\n args\n}) {\n return {\n type: SUBSCRIBE_TYPE,\n endpoint,\n meta: {\n args,\n key: endpoint.key(...args),\n fetch: () => endpoint(...args),\n schema: endpoint.schema,\n options: endpoint\n }\n };\n}\n/** Future action shape\n{\n type: SUBSCRIBE_TYPE,\n endpoint,\n meta: {\n args,\n },\n} */\n\nexport function createUnsubscription(endpoint, {\n args\n}) {\n return {\n type: UNSUBSCRIBE_TYPE,\n endpoint,\n meta: {\n args,\n key: endpoint.key(...args),\n options: endpoint\n }\n };\n}\n/** Future action shape\n{\n type: UNSUBSCRIBE_TYPE,\n endpoint,\n meta: {\n args,\n },\n} */\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTVUJTQ1JJQkVfVFlQRSIsIlVOU1VCU0NSSUJFX1RZUEUiLCJjcmVhdGVTdWJzY3JpcHRpb24iLCJlbmRwb2ludCIsImFyZ3MiLCJ0eXBlIiwibWV0YSIsImtleSIsImZldGNoIiwic2NoZW1hIiwib3B0aW9ucyIsImNyZWF0ZVVuc3Vic2NyaXB0aW9uIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyb2xsZXIvY3JlYXRlU3Vic2NyaXB0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW5kcG9pbnRJbnRlcmZhY2UgfSBmcm9tICdAcmVzdC1ob29rcy9lbmRwb2ludCc7XG5cbmltcG9ydCB0eXBlIHsgU3Vic2NyaWJlQWN0aW9uLCBVbnN1YnNjcmliZUFjdGlvbiB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IFNVQlNDUklCRV9UWVBFLCBVTlNVQlNDUklCRV9UWVBFIH0gZnJvbSAnLi4vYWN0aW9uVHlwZXMuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3Vic2NyaXB0aW9uPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gIGVuZHBvaW50OiBFLFxuICB7IGFyZ3MgfTogeyBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0gfSxcbik6IFN1YnNjcmliZUFjdGlvbiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogU1VCU0NSSUJFX1RZUEUsXG4gICAgZW5kcG9pbnQsXG4gICAgbWV0YToge1xuICAgICAgYXJncyxcbiAgICAgIGtleTogZW5kcG9pbnQua2V5KC4uLmFyZ3MpLFxuICAgICAgZmV0Y2g6ICgpID0+IGVuZHBvaW50KC4uLmFyZ3MpLFxuICAgICAgc2NoZW1hOiBlbmRwb2ludC5zY2hlbWEsXG4gICAgICBvcHRpb25zOiBlbmRwb2ludCxcbiAgICB9LFxuICB9O1xufVxuLyoqIEZ1dHVyZSBhY3Rpb24gc2hhcGVcbntcbiAgdHlwZTogU1VCU0NSSUJFX1RZUEUsXG4gIGVuZHBvaW50LFxuICBtZXRhOiB7XG4gICAgYXJncyxcbiAgfSxcbn0gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVuc3Vic2NyaXB0aW9uPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gIGVuZHBvaW50OiBFLFxuICB7IGFyZ3MgfTogeyBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0gfSxcbik6IFVuc3Vic2NyaWJlQWN0aW9uIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBVTlNVQlNDUklCRV9UWVBFLFxuICAgIGVuZHBvaW50LFxuICAgIG1ldGE6IHtcbiAgICAgIGFyZ3MsXG4gICAgICBrZXk6IGVuZHBvaW50LmtleSguLi5hcmdzKSxcbiAgICAgIG9wdGlvbnM6IGVuZHBvaW50LFxuICAgIH0sXG4gIH07XG59XG4vKiogRnV0dXJlIGFjdGlvbiBzaGFwZVxue1xuICB0eXBlOiBVTlNVQlNDUklCRV9UWVBFLFxuICBlbmRwb2ludCxcbiAgbWV0YToge1xuICAgIGFyZ3MsXG4gIH0sXG59ICovXG4iXSwibWFwcGluZ3MiOiJBQUdBLFNBQVNBLGNBQVQsRUFBeUJDLGdCQUF6QixRQUFpRCxtQkFBakQ7QUFFQSxPQUFPLFNBQVNDLGtCQUFULENBQ0xDLFFBREssRUFFTDtFQUFFQztBQUFGLENBRkssRUFHWTtFQUNqQixPQUFPO0lBQ0xDLElBQUksRUFBRUwsY0FERDtJQUVMRyxRQUZLO0lBR0xHLElBQUksRUFBRTtNQUNKRixJQURJO01BRUpHLEdBQUcsRUFBRUosUUFBUSxDQUFDSSxHQUFULENBQWEsR0FBR0gsSUFBaEIsQ0FGRDtNQUdKSSxLQUFLLEVBQUUsTUFBTUwsUUFBUSxDQUFDLEdBQUdDLElBQUosQ0FIakI7TUFJSkssTUFBTSxFQUFFTixRQUFRLENBQUNNLE1BSmI7TUFLSkMsT0FBTyxFQUFFUDtJQUxMO0VBSEQsQ0FBUDtBQVdEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPLFNBQVNRLG9CQUFULENBQ0xSLFFBREssRUFFTDtFQUFFQztBQUFGLENBRkssRUFHYztFQUNuQixPQUFPO0lBQ0xDLElBQUksRUFBRUosZ0JBREQ7SUFFTEUsUUFGSztJQUdMRyxJQUFJLEVBQUU7TUFDSkYsSUFESTtNQUVKRyxHQUFHLEVBQUVKLFFBQVEsQ0FBQ0ksR0FBVCxDQUFhLEdBQUdILElBQWhCLENBRkQ7TUFHSk0sT0FBTyxFQUFFUDtJQUhMO0VBSEQsQ0FBUDtBQVNEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSJ9","import { createContext } from 'react';\nimport { initialState } from '../state/createReducer.js';\nimport Controller from '../controller/Controller.js';\nexport const StateContext = /*#__PURE__*/createContext(initialState);\n\nconst dispatch = value => {\n /* istanbul ignore next */\n if (process.env.NODE_ENV !== 'production') {\n console.error('It appears you are trying to use Rest Hooks without a provider.\\nFollow instructions: https://resthooks.io/docs/getting-started/installation#add-provider-at-top-level-component');\n /* istanbul ignore next */\n\n if (process.env.NODE_ENV === 'test') {\n console.error('If you are trying to test: https://resthooks.io/docs/guides/unit-testing-hooks');\n }\n }\n\n return Promise.resolve();\n};\n\nexport const DispatchContext = /*#__PURE__*/createContext(dispatch); // this is not needed anymore, but keeping around for backcompatibility\n\nexport const DenormalizeCacheContext = /*#__PURE__*/createContext({\n entities: {},\n results: {}\n});\nexport const ControllerContext = /*#__PURE__*/createContext(new Controller({\n dispatch,\n globalCache: {\n entities: {},\n results: {}\n }\n}));\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVDb250ZXh0IiwiaW5pdGlhbFN0YXRlIiwiQ29udHJvbGxlciIsIlN0YXRlQ29udGV4dCIsImRpc3BhdGNoIiwidmFsdWUiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJjb25zb2xlIiwiZXJyb3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsIkRpc3BhdGNoQ29udGV4dCIsIkRlbm9ybWFsaXplQ2FjaGVDb250ZXh0IiwiZW50aXRpZXMiLCJyZXN1bHRzIiwiQ29udHJvbGxlckNvbnRleHQiLCJnbG9iYWxDYWNoZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWFjdC1pbnRlZ3JhdGlvbi9jb250ZXh0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IERlbm9ybWFsaXplQ2FjaGUgfSBmcm9tICdAcmVzdC1ob29rcy9ub3JtYWxpenInO1xuXG5pbXBvcnQgdHlwZSB7IEFjdGlvblR5cGVzIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHsgaW5pdGlhbFN0YXRlIH0gZnJvbSAnLi4vc3RhdGUvY3JlYXRlUmVkdWNlci5qcyc7XG5pbXBvcnQgQ29udHJvbGxlciBmcm9tICcuLi9jb250cm9sbGVyL0NvbnRyb2xsZXIuanMnO1xuXG5leHBvcnQgY29uc3QgU3RhdGVDb250ZXh0ID0gY3JlYXRlQ29udGV4dChpbml0aWFsU3RhdGUpO1xuXG5jb25zdCBkaXNwYXRjaCA9ICh2YWx1ZTogQWN0aW9uVHlwZXMpID0+IHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgJ0l0IGFwcGVhcnMgeW91IGFyZSB0cnlpbmcgdG8gdXNlIFJlc3QgSG9va3Mgd2l0aG91dCBhIHByb3ZpZGVyLlxcbkZvbGxvdyBpbnN0cnVjdGlvbnM6IGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvZ2V0dGluZy1zdGFydGVkL2luc3RhbGxhdGlvbiNhZGQtcHJvdmlkZXItYXQtdG9wLWxldmVsLWNvbXBvbmVudCcsXG4gICAgKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAnSWYgeW91IGFyZSB0cnlpbmcgdG8gdGVzdDogaHR0cHM6Ly9yZXN0aG9va3MuaW8vZG9jcy9ndWlkZXMvdW5pdC10ZXN0aW5nLWhvb2tzJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn07XG5leHBvcnQgY29uc3QgRGlzcGF0Y2hDb250ZXh0ID0gY3JlYXRlQ29udGV4dChkaXNwYXRjaCk7XG5cbi8vIHRoaXMgaXMgbm90IG5lZWRlZCBhbnltb3JlLCBidXQga2VlcGluZyBhcm91bmQgZm9yIGJhY2tjb21wYXRpYmlsaXR5XG5leHBvcnQgY29uc3QgRGVub3JtYWxpemVDYWNoZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PERlbm9ybWFsaXplQ2FjaGU+KHtcbiAgZW50aXRpZXM6IHt9LFxuICByZXN1bHRzOiB7fSxcbn0pO1xuXG5leHBvcnQgY29uc3QgQ29udHJvbGxlckNvbnRleHQgPSBjcmVhdGVDb250ZXh0PENvbnRyb2xsZXI+KFxuICBuZXcgQ29udHJvbGxlcih7XG4gICAgZGlzcGF0Y2gsXG4gICAgZ2xvYmFsQ2FjaGU6IHtcbiAgICAgIGVudGl0aWVzOiB7fSxcbiAgICAgIHJlc3VsdHM6IHt9LFxuICAgIH0sXG4gIH0pLFxuKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsYUFBVCxRQUE4QixPQUE5QjtBQUlBLFNBQVNDLFlBQVQsUUFBNkIsMkJBQTdCO0FBQ0EsT0FBT0MsVUFBUCxNQUF1Qiw2QkFBdkI7QUFFQSxPQUFPLE1BQU1DLFlBQVksZ0JBQUdILGFBQWEsQ0FBQ0MsWUFBRCxDQUFsQzs7QUFFUCxNQUFNRyxRQUFRLEdBQUlDLEtBQUQsSUFBd0I7RUFDdkM7RUFDQSxJQUFJQyxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsUUFBWixLQUF5QixZQUE3QixFQUEyQztJQUN6Q0MsT0FBTyxDQUFDQyxLQUFSLENBQ0Usa0xBREY7SUFHQTs7SUFDQSxJQUFJSixPQUFPLENBQUNDLEdBQVIsQ0FBWUMsUUFBWixLQUF5QixNQUE3QixFQUFxQztNQUNuQ0MsT0FBTyxDQUFDQyxLQUFSLENBQ0UsZ0ZBREY7SUFHRDtFQUNGOztFQUNELE9BQU9DLE9BQU8sQ0FBQ0MsT0FBUixFQUFQO0FBQ0QsQ0FkRDs7QUFlQSxPQUFPLE1BQU1DLGVBQWUsZ0JBQUdiLGFBQWEsQ0FBQ0ksUUFBRCxDQUFyQyxDLENBRVA7O0FBQ0EsT0FBTyxNQUFNVSx1QkFBdUIsZ0JBQUdkLGFBQWEsQ0FBbUI7RUFDckVlLFFBQVEsRUFBRSxFQUQyRDtFQUVyRUMsT0FBTyxFQUFFO0FBRjRELENBQW5CLENBQTdDO0FBS1AsT0FBTyxNQUFNQyxpQkFBaUIsZ0JBQUdqQixhQUFhLENBQzVDLElBQUlFLFVBQUosQ0FBZTtFQUNiRSxRQURhO0VBRWJjLFdBQVcsRUFBRTtJQUNYSCxRQUFRLEVBQUUsRUFEQztJQUVYQyxPQUFPLEVBQUU7RUFGRTtBQUZBLENBQWYsQ0FENEMsQ0FBdkMifQ==","import { RECEIVE_TYPE } from '../../actionTypes.js';\n\n/** Update state with data\n *\n * @param data\n * @param param1 { schema, key, type, updaters, dataExpiryLength }\n */\nexport default function createReceive(data, {\n schema,\n key,\n args,\n updaters,\n fetchedAt = 0,\n update,\n dataExpiryLength\n}) {\n /* istanbul ignore next */\n if (process.env.NODE_ENV === 'development' && dataExpiryLength < 0) {\n throw new Error('Negative dataExpiryLength are not allowed.');\n }\n\n const now = Date.now();\n const meta = {\n schema,\n key,\n args,\n date: now,\n fetchedAt,\n expiresAt: now + dataExpiryLength\n };\n meta.updaters = updaters;\n meta.update = update;\n return {\n type: RECEIVE_TYPE,\n payload: data,\n meta\n };\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSRUNFSVZFX1RZUEUiLCJjcmVhdGVSZWNlaXZlIiwiZGF0YSIsInNjaGVtYSIsImtleSIsImFyZ3MiLCJ1cGRhdGVycyIsImZldGNoZWRBdCIsInVwZGF0ZSIsImRhdGFFeHBpcnlMZW5ndGgiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJFcnJvciIsIm5vdyIsIkRhdGUiLCJtZXRhIiwiZGF0ZSIsImV4cGlyZXNBdCIsInR5cGUiLCJwYXlsb2FkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0YXRlL2FjdGlvbnMvY3JlYXRlUmVjZWl2ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY2hlbWEgfSBmcm9tICdAcmVzdC1ob29rcy9lbmRwb2ludCc7XG5cbmltcG9ydCB7IEZldGNoQWN0aW9uLCBSZWNlaXZlQWN0aW9uLCBGZXRjaE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBSRUNFSVZFX1RZUEUgfSBmcm9tICcuLi8uLi9hY3Rpb25UeXBlcy5qcyc7XG5cbmludGVyZmFjZSBPcHRpb25zPFxuICBQYXlsb2FkIGV4dGVuZHMgb2JqZWN0IHwgc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCA9XG4gICAgfCBvYmplY3RcbiAgICB8IHN0cmluZ1xuICAgIHwgbnVtYmVyXG4gICAgfCBudWxsLFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gYW55LFxuPiBleHRlbmRzIFBpY2s8XG4gICAgRmV0Y2hBY3Rpb248UGF5bG9hZCwgUz5bJ21ldGEnXSxcbiAgICAnc2NoZW1hJyB8ICdrZXknIHwgJ3R5cGUnIHwgJ3VwZGF0ZXJzJyB8ICd1cGRhdGUnIHwgJ2FyZ3MnXG4gID4ge1xuICBkYXRhRXhwaXJ5TGVuZ3RoOiBOb25OdWxsYWJsZTxGZXRjaE9wdGlvbnNbJ2RhdGFFeHBpcnlMZW5ndGgnXT47XG4gIGZldGNoZWRBdD86IG51bWJlcjtcbn1cblxuLyoqIFVwZGF0ZSBzdGF0ZSB3aXRoIGRhdGFcbiAqXG4gKiBAcGFyYW0gZGF0YVxuICogQHBhcmFtIHBhcmFtMSB7IHNjaGVtYSwga2V5LCB0eXBlLCB1cGRhdGVycywgZGF0YUV4cGlyeUxlbmd0aCB9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVJlY2VpdmU8XG4gIFBheWxvYWQgZXh0ZW5kcyBvYmplY3QgfCBzdHJpbmcgfCBudW1iZXIgfCBudWxsID1cbiAgICB8IG9iamVjdFxuICAgIHwgc3RyaW5nXG4gICAgfCBudW1iZXJcbiAgICB8IG51bGwsXG4gIFMgZXh0ZW5kcyBTY2hlbWEgfCB1bmRlZmluZWQgPSBhbnksXG4+KFxuICBkYXRhOiBQYXlsb2FkLFxuICB7XG4gICAgc2NoZW1hLFxuICAgIGtleSxcbiAgICBhcmdzLFxuICAgIHVwZGF0ZXJzLFxuICAgIGZldGNoZWRBdCA9IDAsXG4gICAgdXBkYXRlLFxuICAgIGRhdGFFeHBpcnlMZW5ndGgsXG4gIH06IE9wdGlvbnM8UGF5bG9hZCwgUz4sXG4pOiBSZWNlaXZlQWN0aW9uPFBheWxvYWQsIFM+IHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnICYmIGRhdGFFeHBpcnlMZW5ndGggPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOZWdhdGl2ZSBkYXRhRXhwaXJ5TGVuZ3RoIGFyZSBub3QgYWxsb3dlZC4nKTtcbiAgfVxuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCBtZXRhOiBSZWNlaXZlQWN0aW9uWydtZXRhJ10gPSB7XG4gICAgc2NoZW1hLFxuICAgIGtleSxcbiAgICBhcmdzLFxuICAgIGRhdGU6IG5vdyxcbiAgICBmZXRjaGVkQXQsXG4gICAgZXhwaXJlc0F0OiBub3cgKyBkYXRhRXhwaXJ5TGVuZ3RoLFxuICB9O1xuICBtZXRhLnVwZGF0ZXJzID0gdXBkYXRlcnM7XG4gIG1ldGEudXBkYXRlID0gdXBkYXRlO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFJFQ0VJVkVfVFlQRSxcbiAgICBwYXlsb2FkOiBkYXRhLFxuICAgIG1ldGEsXG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiJBQUdBLFNBQVNBLFlBQVQsUUFBNkIsc0JBQTdCOztBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTQyxhQUFULENBUWJDLElBUmEsRUFTYjtFQUNFQyxNQURGO0VBRUVDLEdBRkY7RUFHRUMsSUFIRjtFQUlFQyxRQUpGO0VBS0VDLFNBQVMsR0FBRyxDQUxkO0VBTUVDLE1BTkY7RUFPRUM7QUFQRixDQVRhLEVBa0JjO0VBQzNCO0VBQ0EsSUFBSUMsT0FBTyxDQUFDQyxHQUFSLENBQVlDLFFBQVosS0FBeUIsYUFBekIsSUFBMENILGdCQUFnQixHQUFHLENBQWpFLEVBQW9FO0lBQ2xFLE1BQU0sSUFBSUksS0FBSixDQUFVLDRDQUFWLENBQU47RUFDRDs7RUFDRCxNQUFNQyxHQUFHLEdBQUdDLElBQUksQ0FBQ0QsR0FBTCxFQUFaO0VBQ0EsTUFBTUUsSUFBMkIsR0FBRztJQUNsQ2IsTUFEa0M7SUFFbENDLEdBRmtDO0lBR2xDQyxJQUhrQztJQUlsQ1ksSUFBSSxFQUFFSCxHQUo0QjtJQUtsQ1AsU0FMa0M7SUFNbENXLFNBQVMsRUFBRUosR0FBRyxHQUFHTDtFQU5pQixDQUFwQztFQVFBTyxJQUFJLENBQUNWLFFBQUwsR0FBZ0JBLFFBQWhCO0VBQ0FVLElBQUksQ0FBQ1IsTUFBTCxHQUFjQSxNQUFkO0VBQ0EsT0FBTztJQUNMVyxJQUFJLEVBQUVuQixZQUREO0lBRUxvQixPQUFPLEVBQUVsQixJQUZKO0lBR0xjO0VBSEssQ0FBUDtBQUtEIn0=","import { DELETED } from './special.js';\nimport { normalize as arrayNormalize } from './schemas/Array.js';\nimport { normalize as objectNormalize } from './schemas/Object.js';\n\nconst visit = (value, parent, key, schema, addEntity, visitedEntities) => {\n if (!value || !schema) {\n return value;\n }\n\n if (schema.normalize && typeof schema.normalize === 'function') {\n if (typeof value !== 'object') return value;\n return schema.normalize(value, parent, key, visit, addEntity, visitedEntities);\n } // serializable\n\n\n if (typeof schema === 'function') {\n return new schema(value);\n }\n\n if (typeof value !== 'object' || typeof schema !== 'object') return value;\n const method = Array.isArray(schema) ? arrayNormalize : objectNormalize;\n return method(schema, value, parent, key, visit, addEntity, visitedEntities);\n};\n\nconst addEntities = (entities, indexes, existingEntities, existingIndexes, entityMeta, meta) => (schema, processedEntity, id) => {\n const schemaKey = schema.key;\n\n if (!(schemaKey in entities)) {\n entities[schemaKey] = {};\n existingEntities[schemaKey] = { ...existingEntities[schemaKey]\n };\n entityMeta[schemaKey] = { ...entityMeta[schemaKey]\n };\n }\n\n const existingEntity = entities[schemaKey][id];\n\n if (existingEntity) {\n entities[schemaKey][id] = schema.merge(existingEntity, processedEntity);\n } else {\n // TODO: eventually assume this exists and don't check for conditional. probably early 2022\n const entityExpiresAt = schema.expiresAt ? schema.expiresAt(meta, processedEntity) : meta.expiresAt;\n const inStoreEntity = existingEntities[schemaKey][id]; // this case we already have this entity in store\n\n if (inStoreEntity) {\n var _entityMeta$schemaKey, _entityMeta$schemaKey2, _entityMeta$schemaKey3, _meta$fetchedAt, _entityMeta$schemaKey4, _entityMeta$schemaKey5;\n\n const inStoreMeta = entityMeta[schemaKey][id];\n const useIncoming = // we may have in store but not in meta; so this existance check is still important\n !inStoreMeta || ( // useIncoming should not be used with legacy optimistic\n schema.useIncoming && meta.fetchedAt ? schema.useIncoming(inStoreMeta, meta, inStoreEntity, processedEntity) : entityMeta[schemaKey][id].date <= meta.date);\n\n if (useIncoming) {\n if (typeof processedEntity !== typeof inStoreEntity) {\n entities[schemaKey][id] = processedEntity;\n } else {\n entities[schemaKey][id] = schema.merge(inStoreEntity, processedEntity);\n }\n } else {\n entities[schemaKey][id] = inStoreEntity;\n }\n\n entityMeta[schemaKey][id] = {\n expiresAt: Math.max(entityExpiresAt, (_entityMeta$schemaKey = entityMeta[schemaKey][id]) == null ? void 0 : _entityMeta$schemaKey.expiresAt),\n date: Math.max(meta.date, (_entityMeta$schemaKey2 = (_entityMeta$schemaKey3 = entityMeta[schemaKey][id]) == null ? void 0 : _entityMeta$schemaKey3.date) != null ? _entityMeta$schemaKey2 : 0),\n fetchedAt: Math.max((_meta$fetchedAt = meta.fetchedAt) != null ? _meta$fetchedAt : 0, (_entityMeta$schemaKey4 = (_entityMeta$schemaKey5 = entityMeta[schemaKey][id]) == null ? void 0 : _entityMeta$schemaKey5.fetchedAt) != null ? _entityMeta$schemaKey4 : 0)\n };\n } else {\n var _meta$fetchedAt2;\n\n entities[schemaKey][id] = processedEntity;\n entityMeta[schemaKey][id] = {\n expiresAt: entityExpiresAt,\n date: meta.date,\n fetchedAt: (_meta$fetchedAt2 = meta.fetchedAt) != null ? _meta$fetchedAt2 : meta.date\n };\n }\n } // update index\n\n\n if (Array.isArray(schema.indexes)) {\n const entity = entities[schemaKey][id];\n\n if (!(schemaKey in indexes)) {\n indexes[schemaKey] = {};\n existingIndexes[schemaKey] = { ...existingIndexes[schemaKey]\n };\n }\n\n for (const index of schema.indexes) {\n if (!(index in indexes[schemaKey])) {\n existingIndexes[schemaKey][index] = indexes[schemaKey][index] = {};\n }\n\n const indexMap = indexes[schemaKey][index];\n\n if (existingEntity) {\n delete indexMap[existingEntity[index]];\n } // entity already in cache but the index changed\n\n\n if (existingEntities[schemaKey] && existingEntities[schemaKey][id] && existingEntities[schemaKey][id][index] !== entity[index]) {\n indexMap[existingEntities[schemaKey][id][index]] = DELETED;\n }\n\n if (index in entity) {\n indexMap[entity[index]] = id;\n }\n /* istanbul ignore next */\n else if ( // eslint-disable-next-line no-undef\n process.env.NODE_ENV !== 'production') {\n console.warn(`Index not found in entity. Indexes must be top-level members of your entity.\nIndex: ${index}\nEntity: ${JSON.stringify(entity, undefined, 2)}`);\n }\n }\n } // set this after index updates so we know what indexes to remove from\n\n\n existingEntities[schemaKey][id] = entities[schemaKey][id];\n};\n\nfunction expectedSchemaType(schema) {\n return ['object', 'function'].includes(typeof schema) ? 'object' : typeof schema;\n} // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\n\nexport const normalize = (input, schema, existingEntities = {}, existingIndexes = {}, existingEntityMeta = {}, meta = {\n date: Date.now(),\n expiresAt: Infinity,\n fetchedAt: 0\n}) => {\n // no schema means we don't process at all\n if (schema === undefined) return {\n entities: existingEntities,\n indexes: existingIndexes,\n result: input,\n entityMeta: existingEntityMeta\n };\n const schemaType = expectedSchemaType(schema);\n\n if (input === null || typeof input !== schemaType && !(schema.key !== undefined && typeof input === 'string')) {\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n const parseWorks = input => {\n try {\n return typeof JSON.parse(input) !== 'string';\n } catch (e) {\n return false;\n }\n };\n\n if (typeof input === 'string' && parseWorks(input)) {\n throw new Error(`Normalizing a string, but this does match schema.\n\nParsing this input string as JSON worked. This likely indicates fetch function did not parse\nthe JSON. By default, this only happens if \"content-type\" header includes \"json\".\nSee https://resthooks.io/docs/guides/custom-networking for more information\n\n Schema: ${JSON.stringify(schema, undefined, 2)}\n Input: \"${input}\"`);\n } else {\n throw new Error(`Unexpected input given to normalize. Expected type to be \"${schemaType}\", found \"${input === null ? 'null' : typeof input}\".\n\n Schema: ${JSON.stringify(schema, undefined, 2)}\n Input: \"${input}\"`);\n }\n } else {\n throw new Error(`Unexpected input given to normalize. Expected type to be \"${schemaType}\", found \"${input === null ? 'null' : typeof input}\".`);\n }\n }\n\n const newEntities = {};\n const newIndexes = {};\n const entities = { ...existingEntities\n };\n const indexes = { ...existingIndexes\n };\n const entityMeta = { ...existingEntityMeta\n };\n const addEntity = addEntities(newEntities, newIndexes, entities, indexes, entityMeta, meta);\n const visitedEntities = {};\n const result = visit(input, input, undefined, schema, addEntity, visitedEntities);\n return {\n entities,\n indexes,\n result,\n entityMeta\n };\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUxFVEVEIiwibm9ybWFsaXplIiwiYXJyYXlOb3JtYWxpemUiLCJvYmplY3ROb3JtYWxpemUiLCJ2aXNpdCIsInZhbHVlIiwicGFyZW50Iiwia2V5Iiwic2NoZW1hIiwiYWRkRW50aXR5IiwidmlzaXRlZEVudGl0aWVzIiwibWV0aG9kIiwiQXJyYXkiLCJpc0FycmF5IiwiYWRkRW50aXRpZXMiLCJlbnRpdGllcyIsImluZGV4ZXMiLCJleGlzdGluZ0VudGl0aWVzIiwiZXhpc3RpbmdJbmRleGVzIiwiZW50aXR5TWV0YSIsIm1ldGEiLCJwcm9jZXNzZWRFbnRpdHkiLCJpZCIsInNjaGVtYUtleSIsImV4aXN0aW5nRW50aXR5IiwibWVyZ2UiLCJlbnRpdHlFeHBpcmVzQXQiLCJleHBpcmVzQXQiLCJpblN0b3JlRW50aXR5IiwiaW5TdG9yZU1ldGEiLCJ1c2VJbmNvbWluZyIsImZldGNoZWRBdCIsImRhdGUiLCJNYXRoIiwibWF4IiwiZW50aXR5IiwiaW5kZXgiLCJpbmRleE1hcCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImNvbnNvbGUiLCJ3YXJuIiwiSlNPTiIsInN0cmluZ2lmeSIsInVuZGVmaW5lZCIsImV4cGVjdGVkU2NoZW1hVHlwZSIsImluY2x1ZGVzIiwiaW5wdXQiLCJleGlzdGluZ0VudGl0eU1ldGEiLCJEYXRlIiwibm93IiwiSW5maW5pdHkiLCJyZXN1bHQiLCJzY2hlbWFUeXBlIiwicGFyc2VXb3JrcyIsInBhcnNlIiwiZSIsIkVycm9yIiwibmV3RW50aXRpZXMiLCJuZXdJbmRleGVzIl0sInNvdXJjZXMiOlsiLi4vc3JjL25vcm1hbGl6ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIE5vcm1hbGl6ZU51bGxhYmxlLFxuICBOb3JtYWxpemVkU2NoZW1hLFxuICBTY2hlbWEsXG4gIE5vcm1hbGl6ZWRJbmRleCxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBERUxFVEVEIH0gZnJvbSAnLi9zcGVjaWFsLmpzJztcbmltcG9ydCB7IG5vcm1hbGl6ZSBhcyBhcnJheU5vcm1hbGl6ZSB9IGZyb20gJy4vc2NoZW1hcy9BcnJheS5qcyc7XG5pbXBvcnQgeyBub3JtYWxpemUgYXMgb2JqZWN0Tm9ybWFsaXplIH0gZnJvbSAnLi9zY2hlbWFzL09iamVjdC5qcyc7XG5pbXBvcnQgeyBFbnRpdHlJbnRlcmZhY2UgfSBmcm9tICcuL3NjaGVtYSc7XG5cbmNvbnN0IHZpc2l0ID0gKFxuICB2YWx1ZTogYW55LFxuICBwYXJlbnQ6IGFueSxcbiAga2V5OiBhbnksXG4gIHNjaGVtYTogYW55LFxuICBhZGRFbnRpdHk6IChcbiAgICBzY2hlbWE6IEVudGl0eUludGVyZmFjZSxcbiAgICBwcm9jZXNzZWRFbnRpdHk6IGFueSxcbiAgICBpZDogc3RyaW5nLFxuICApID0+IHZvaWQsXG4gIHZpc2l0ZWRFbnRpdGllczogYW55LFxuKSA9PiB7XG4gIGlmICghdmFsdWUgfHwgIXNjaGVtYSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGlmIChzY2hlbWEubm9ybWFsaXplICYmIHR5cGVvZiBzY2hlbWEubm9ybWFsaXplID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiB2YWx1ZTtcbiAgICByZXR1cm4gc2NoZW1hLm5vcm1hbGl6ZShcbiAgICAgIHZhbHVlLFxuICAgICAgcGFyZW50LFxuICAgICAga2V5LFxuICAgICAgdmlzaXQsXG4gICAgICBhZGRFbnRpdHksXG4gICAgICB2aXNpdGVkRW50aXRpZXMsXG4gICAgKTtcbiAgfVxuXG4gIC8vIHNlcmlhbGl6YWJsZVxuICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBuZXcgc2NoZW1hKHZhbHVlKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBzY2hlbWEgIT09ICdvYmplY3QnKSByZXR1cm4gdmFsdWU7XG5cbiAgY29uc3QgbWV0aG9kID0gQXJyYXkuaXNBcnJheShzY2hlbWEpID8gYXJyYXlOb3JtYWxpemUgOiBvYmplY3ROb3JtYWxpemU7XG4gIHJldHVybiBtZXRob2Qoc2NoZW1hLCB2YWx1ZSwgcGFyZW50LCBrZXksIHZpc2l0LCBhZGRFbnRpdHksIHZpc2l0ZWRFbnRpdGllcyk7XG59O1xuXG5jb25zdCBhZGRFbnRpdGllcyA9XG4gIChcbiAgICBlbnRpdGllczogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBpbmRleGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGV4aXN0aW5nRW50aXRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgZXhpc3RpbmdJbmRleGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGVudGl0eU1ldGE6IHtcbiAgICAgIFtlbnRpdHlLZXk6IHN0cmluZ106IHtcbiAgICAgICAgW3BrOiBzdHJpbmddOiB7XG4gICAgICAgICAgZGF0ZTogbnVtYmVyO1xuICAgICAgICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICAgICAgICAgIGZldGNoZWRBdDogbnVtYmVyO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9LFxuICAgIG1ldGE6IHsgZXhwaXJlc0F0OiBudW1iZXI7IGRhdGU6IG51bWJlcjsgZmV0Y2hlZEF0PzogbnVtYmVyIH0sXG4gICkgPT5cbiAgKHNjaGVtYTogRW50aXR5SW50ZXJmYWNlLCBwcm9jZXNzZWRFbnRpdHk6IGFueSwgaWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHNjaGVtYUtleSA9IHNjaGVtYS5rZXk7XG4gICAgaWYgKCEoc2NoZW1hS2V5IGluIGVudGl0aWVzKSkge1xuICAgICAgZW50aXRpZXNbc2NoZW1hS2V5XSA9IHt9O1xuICAgICAgZXhpc3RpbmdFbnRpdGllc1tzY2hlbWFLZXldID0geyAuLi5leGlzdGluZ0VudGl0aWVzW3NjaGVtYUtleV0gfTtcbiAgICAgIGVudGl0eU1ldGFbc2NoZW1hS2V5XSA9IHsgLi4uZW50aXR5TWV0YVtzY2hlbWFLZXldIH07XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmdFbnRpdHkgPSBlbnRpdGllc1tzY2hlbWFLZXldW2lkXTtcbiAgICBpZiAoZXhpc3RpbmdFbnRpdHkpIHtcbiAgICAgIGVudGl0aWVzW3NjaGVtYUtleV1baWRdID0gc2NoZW1hLm1lcmdlKGV4aXN0aW5nRW50aXR5LCBwcm9jZXNzZWRFbnRpdHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBldmVudHVhbGx5IGFzc3VtZSB0aGlzIGV4aXN0cyBhbmQgZG9uJ3QgY2hlY2sgZm9yIGNvbmRpdGlvbmFsLiBwcm9iYWJseSBlYXJseSAyMDIyXG4gICAgICBjb25zdCBlbnRpdHlFeHBpcmVzQXQgPSBzY2hlbWEuZXhwaXJlc0F0XG4gICAgICAgID8gc2NoZW1hLmV4cGlyZXNBdChtZXRhLCBwcm9jZXNzZWRFbnRpdHkpXG4gICAgICAgIDogbWV0YS5leHBpcmVzQXQ7XG5cbiAgICAgIGNvbnN0IGluU3RvcmVFbnRpdHkgPSBleGlzdGluZ0VudGl0aWVzW3NjaGVtYUtleV1baWRdO1xuICAgICAgLy8gdGhpcyBjYXNlIHdlIGFscmVhZHkgaGF2ZSB0aGlzIGVudGl0eSBpbiBzdG9yZVxuICAgICAgaWYgKGluU3RvcmVFbnRpdHkpIHtcbiAgICAgICAgY29uc3QgaW5TdG9yZU1ldGEgPSBlbnRpdHlNZXRhW3NjaGVtYUtleV1baWRdO1xuICAgICAgICBjb25zdCB1c2VJbmNvbWluZyA9XG4gICAgICAgICAgLy8gd2UgbWF5IGhhdmUgaW4gc3RvcmUgYnV0IG5vdCBpbiBtZXRhOyBzbyB0aGlzIGV4aXN0YW5jZSBjaGVjayBpcyBzdGlsbCBpbXBvcnRhbnRcbiAgICAgICAgICAhaW5TdG9yZU1ldGEgfHxcbiAgICAgICAgICAvLyB1c2VJbmNvbWluZyBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBsZWdhY3kgb3B0aW1pc3RpY1xuICAgICAgICAgIChzY2hlbWEudXNlSW5jb21pbmcgJiYgbWV0YS5mZXRjaGVkQXRcbiAgICAgICAgICAgID8gc2NoZW1hLnVzZUluY29taW5nKFxuICAgICAgICAgICAgICAgIGluU3RvcmVNZXRhLFxuICAgICAgICAgICAgICAgIG1ldGEsXG4gICAgICAgICAgICAgICAgaW5TdG9yZUVudGl0eSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWRFbnRpdHksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogZW50aXR5TWV0YVtzY2hlbWFLZXldW2lkXS5kYXRlIDw9IG1ldGEuZGF0ZSk7XG4gICAgICAgIGlmICh1c2VJbmNvbWluZykge1xuICAgICAgICAgIGlmICh0eXBlb2YgcHJvY2Vzc2VkRW50aXR5ICE9PSB0eXBlb2YgaW5TdG9yZUVudGl0eSkge1xuICAgICAgICAgICAgZW50aXRpZXNbc2NoZW1hS2V5XVtpZF0gPSBwcm9jZXNzZWRFbnRpdHk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVudGl0aWVzW3NjaGVtYUtleV1baWRdID0gc2NoZW1hLm1lcmdlKFxuICAgICAgICAgICAgICBpblN0b3JlRW50aXR5LFxuICAgICAgICAgICAgICBwcm9jZXNzZWRFbnRpdHksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnRpdGllc1tzY2hlbWFLZXldW2lkXSA9IGluU3RvcmVFbnRpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBlbnRpdHlNZXRhW3NjaGVtYUtleV1baWRdID0ge1xuICAgICAgICAgIGV4cGlyZXNBdDogTWF0aC5tYXgoXG4gICAgICAgICAgICBlbnRpdHlFeHBpcmVzQXQsXG4gICAgICAgICAgICBlbnRpdHlNZXRhW3NjaGVtYUtleV1baWRdPy5leHBpcmVzQXQsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBkYXRlOiBNYXRoLm1heChtZXRhLmRhdGUsIGVudGl0eU1ldGFbc2NoZW1hS2V5XVtpZF0/LmRhdGUgPz8gMCksXG4gICAgICAgICAgZmV0Y2hlZEF0OiBNYXRoLm1heChcbiAgICAgICAgICAgIG1ldGEuZmV0Y2hlZEF0ID8/IDAsXG4gICAgICAgICAgICBlbnRpdHlNZXRhW3NjaGVtYUtleV1baWRdPy5mZXRjaGVkQXQgPz8gMCxcbiAgICAgICAgICApLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW50aXRpZXNbc2NoZW1hS2V5XVtpZF0gPSBwcm9jZXNzZWRFbnRpdHk7XG4gICAgICAgIGVudGl0eU1ldGFbc2NoZW1hS2V5XVtpZF0gPSB7XG4gICAgICAgICAgZXhwaXJlc0F0OiBlbnRpdHlFeHBpcmVzQXQsXG4gICAgICAgICAgZGF0ZTogbWV0YS5kYXRlLFxuICAgICAgICAgIGZldGNoZWRBdDogbWV0YS5mZXRjaGVkQXQgPz8gbWV0YS5kYXRlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHVwZGF0ZSBpbmRleFxuICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5pbmRleGVzKSkge1xuICAgICAgY29uc3QgZW50aXR5ID0gZW50aXRpZXNbc2NoZW1hS2V5XVtpZF07XG4gICAgICBpZiAoIShzY2hlbWFLZXkgaW4gaW5kZXhlcykpIHtcbiAgICAgICAgaW5kZXhlc1tzY2hlbWFLZXldID0ge307XG4gICAgICAgIGV4aXN0aW5nSW5kZXhlc1tzY2hlbWFLZXldID0geyAuLi5leGlzdGluZ0luZGV4ZXNbc2NoZW1hS2V5XSB9O1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBpbmRleCBvZiBzY2hlbWEuaW5kZXhlcykge1xuICAgICAgICBpZiAoIShpbmRleCBpbiBpbmRleGVzW3NjaGVtYUtleV0pKSB7XG4gICAgICAgICAgZXhpc3RpbmdJbmRleGVzW3NjaGVtYUtleV1baW5kZXhdID0gaW5kZXhlc1tzY2hlbWFLZXldW2luZGV4XSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4TWFwID0gaW5kZXhlc1tzY2hlbWFLZXldW2luZGV4XTtcbiAgICAgICAgaWYgKGV4aXN0aW5nRW50aXR5KSB7XG4gICAgICAgICAgZGVsZXRlIGluZGV4TWFwW2V4aXN0aW5nRW50aXR5W2luZGV4XV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gZW50aXR5IGFscmVhZHkgaW4gY2FjaGUgYnV0IHRoZSBpbmRleCBjaGFuZ2VkXG4gICAgICAgIGlmIChcbiAgICAgICAgICBleGlzdGluZ0VudGl0aWVzW3NjaGVtYUtleV0gJiZcbiAgICAgICAgICBleGlzdGluZ0VudGl0aWVzW3NjaGVtYUtleV1baWRdICYmXG4gICAgICAgICAgZXhpc3RpbmdFbnRpdGllc1tzY2hlbWFLZXldW2lkXVtpbmRleF0gIT09IGVudGl0eVtpbmRleF1cbiAgICAgICAgKSB7XG4gICAgICAgICAgaW5kZXhNYXBbZXhpc3RpbmdFbnRpdGllc1tzY2hlbWFLZXldW2lkXVtpbmRleF1dID0gREVMRVRFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXggaW4gZW50aXR5KSB7XG4gICAgICAgICAgaW5kZXhNYXBbZW50aXR5W2luZGV4XV0gPSBpZDtcbiAgICAgICAgfSAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBlbHNlIGlmIChcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgSW5kZXggbm90IGZvdW5kIGluIGVudGl0eS4gSW5kZXhlcyBtdXN0IGJlIHRvcC1sZXZlbCBtZW1iZXJzIG9mIHlvdXIgZW50aXR5LlxuSW5kZXg6ICR7aW5kZXh9XG5FbnRpdHk6ICR7SlNPTi5zdHJpbmdpZnkoZW50aXR5LCB1bmRlZmluZWQsIDIpfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHNldCB0aGlzIGFmdGVyIGluZGV4IHVwZGF0ZXMgc28gd2Uga25vdyB3aGF0IGluZGV4ZXMgdG8gcmVtb3ZlIGZyb21cbiAgICBleGlzdGluZ0VudGl0aWVzW3NjaGVtYUtleV1baWRdID0gZW50aXRpZXNbc2NoZW1hS2V5XVtpZF07XG4gIH07XG5cbmZ1bmN0aW9uIGV4cGVjdGVkU2NoZW1hVHlwZShzY2hlbWE6IFNjaGVtYSkge1xuICByZXR1cm4gWydvYmplY3QnLCAnZnVuY3Rpb24nXS5pbmNsdWRlcyh0eXBlb2Ygc2NoZW1hKVxuICAgID8gJ29iamVjdCdcbiAgICA6IHR5cGVvZiBzY2hlbWE7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplID0gPFxuICBTIGV4dGVuZHMgU2NoZW1hID0gU2NoZW1hLFxuICBFIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZD4gPSBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIFJlY29yZDxzdHJpbmcsIGFueT5cbiAgPixcbiAgUiA9IE5vcm1hbGl6ZU51bGxhYmxlPFM+LFxuPihcbiAgaW5wdXQ6IGFueSxcbiAgc2NoZW1hPzogUyxcbiAgZXhpc3RpbmdFbnRpdGllczogUmVhZG9ubHk8RT4gPSB7fSBhcyBhbnksXG4gIGV4aXN0aW5nSW5kZXhlczogUmVhZG9ubHk8Tm9ybWFsaXplZEluZGV4PiA9IHt9LFxuICBleGlzdGluZ0VudGl0eU1ldGE6IHtcbiAgICByZWFkb25seSBbZW50aXR5S2V5OiBzdHJpbmddOiB7XG4gICAgICByZWFkb25seSBbcGs6IHN0cmluZ106IHtcbiAgICAgICAgcmVhZG9ubHkgZGF0ZTogbnVtYmVyO1xuICAgICAgICByZWFkb25seSBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICAgICAgcmVhZG9ubHkgZmV0Y2hlZEF0OiBudW1iZXI7XG4gICAgICB9O1xuICAgIH07XG4gIH0gPSB7fSxcbiAgbWV0YTogeyBleHBpcmVzQXQ6IG51bWJlcjsgZGF0ZTogbnVtYmVyOyBmZXRjaGVkQXQ/OiBudW1iZXIgfSA9IHtcbiAgICBkYXRlOiBEYXRlLm5vdygpLFxuICAgIGV4cGlyZXNBdDogSW5maW5pdHksXG4gICAgZmV0Y2hlZEF0OiAwLFxuICB9LFxuKTogTm9ybWFsaXplZFNjaGVtYTxFLCBSPiA9PiB7XG4gIC8vIG5vIHNjaGVtYSBtZWFucyB3ZSBkb24ndCBwcm9jZXNzIGF0IGFsbFxuICBpZiAoc2NoZW1hID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGl0aWVzOiBleGlzdGluZ0VudGl0aWVzLFxuICAgICAgaW5kZXhlczogZXhpc3RpbmdJbmRleGVzLFxuICAgICAgcmVzdWx0OiBpbnB1dCxcbiAgICAgIGVudGl0eU1ldGE6IGV4aXN0aW5nRW50aXR5TWV0YSxcbiAgICB9O1xuXG4gIGNvbnN0IHNjaGVtYVR5cGUgPSBleHBlY3RlZFNjaGVtYVR5cGUoc2NoZW1hKTtcbiAgaWYgKFxuICAgIGlucHV0ID09PSBudWxsIHx8XG4gICAgKHR5cGVvZiBpbnB1dCAhPT0gc2NoZW1hVHlwZSAmJlxuICAgICAgISgoc2NoZW1hIGFzIGFueSkua2V5ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykpXG4gICkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IHBhcnNlV29ya3MgPSAoaW5wdXQ6IHN0cmluZykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZShpbnB1dCkgIT09ICdzdHJpbmcnO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgJiYgcGFyc2VXb3JrcyhpbnB1dCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3JtYWxpemluZyBhIHN0cmluZywgYnV0IHRoaXMgZG9lcyBtYXRjaCBzY2hlbWEuXG5cblBhcnNpbmcgdGhpcyBpbnB1dCBzdHJpbmcgYXMgSlNPTiB3b3JrZWQuIFRoaXMgbGlrZWx5IGluZGljYXRlcyBmZXRjaCBmdW5jdGlvbiBkaWQgbm90IHBhcnNlXG50aGUgSlNPTi4gQnkgZGVmYXVsdCwgdGhpcyBvbmx5IGhhcHBlbnMgaWYgXCJjb250ZW50LXR5cGVcIiBoZWFkZXIgaW5jbHVkZXMgXCJqc29uXCIuXG5TZWUgaHR0cHM6Ly9yZXN0aG9va3MuaW8vZG9jcy9ndWlkZXMvY3VzdG9tLW5ldHdvcmtpbmcgZm9yIG1vcmUgaW5mb3JtYXRpb25cblxuICBTY2hlbWE6ICR7SlNPTi5zdHJpbmdpZnkoc2NoZW1hLCB1bmRlZmluZWQsIDIpfVxuICBJbnB1dDogXCIke2lucHV0fVwiYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFVuZXhwZWN0ZWQgaW5wdXQgZ2l2ZW4gdG8gbm9ybWFsaXplLiBFeHBlY3RlZCB0eXBlIHRvIGJlIFwiJHtzY2hlbWFUeXBlfVwiLCBmb3VuZCBcIiR7XG4gICAgICAgICAgICBpbnB1dCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBpbnB1dFxuICAgICAgICAgIH1cIi5cblxuICAgICAgICAgIFNjaGVtYTogJHtKU09OLnN0cmluZ2lmeShzY2hlbWEsIHVuZGVmaW5lZCwgMil9XG4gICAgICAgICAgSW5wdXQ6IFwiJHtpbnB1dH1cImAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFVuZXhwZWN0ZWQgaW5wdXQgZ2l2ZW4gdG8gbm9ybWFsaXplLiBFeHBlY3RlZCB0eXBlIHRvIGJlIFwiJHtzY2hlbWFUeXBlfVwiLCBmb3VuZCBcIiR7XG4gICAgICAgICAgaW5wdXQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaW5wdXRcbiAgICAgICAgfVwiLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5ld0VudGl0aWVzOiBFID0ge30gYXMgYW55O1xuICBjb25zdCBuZXdJbmRleGVzOiBOb3JtYWxpemVkSW5kZXggPSB7fSBhcyBhbnk7XG4gIGNvbnN0IGVudGl0aWVzOiBFID0geyAuLi5leGlzdGluZ0VudGl0aWVzIH0gYXMgYW55O1xuICBjb25zdCBpbmRleGVzOiBOb3JtYWxpemVkSW5kZXggPSB7IC4uLmV4aXN0aW5nSW5kZXhlcyB9O1xuICBjb25zdCBlbnRpdHlNZXRhOiBhbnkgPSB7IC4uLmV4aXN0aW5nRW50aXR5TWV0YSB9O1xuICBjb25zdCBhZGRFbnRpdHkgPSBhZGRFbnRpdGllcyhcbiAgICBuZXdFbnRpdGllcyxcbiAgICBuZXdJbmRleGVzLFxuICAgIGVudGl0aWVzLFxuICAgIGluZGV4ZXMsXG4gICAgZW50aXR5TWV0YSxcbiAgICBtZXRhLFxuICApO1xuICBjb25zdCB2aXNpdGVkRW50aXRpZXMgPSB7fTtcblxuICBjb25zdCByZXN1bHQgPSB2aXNpdChcbiAgICBpbnB1dCxcbiAgICBpbnB1dCxcbiAgICB1bmRlZmluZWQsXG4gICAgc2NoZW1hLFxuICAgIGFkZEVudGl0eSxcbiAgICB2aXNpdGVkRW50aXRpZXMsXG4gICk7XG4gIHJldHVybiB7IGVudGl0aWVzLCBpbmRleGVzLCByZXN1bHQsIGVudGl0eU1ldGEgfTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQU1BLFNBQVNBLE9BQVQsUUFBd0IsY0FBeEI7QUFDQSxTQUFTQyxTQUFTLElBQUlDLGNBQXRCLFFBQTRDLG9CQUE1QztBQUNBLFNBQVNELFNBQVMsSUFBSUUsZUFBdEIsUUFBNkMscUJBQTdDOztBQUdBLE1BQU1DLEtBQUssR0FBRyxDQUNaQyxLQURZLEVBRVpDLE1BRlksRUFHWkMsR0FIWSxFQUlaQyxNQUpZLEVBS1pDLFNBTFksRUFVWkMsZUFWWSxLQVdUO0VBQ0gsSUFBSSxDQUFDTCxLQUFELElBQVUsQ0FBQ0csTUFBZixFQUF1QjtJQUNyQixPQUFPSCxLQUFQO0VBQ0Q7O0VBRUQsSUFBSUcsTUFBTSxDQUFDUCxTQUFQLElBQW9CLE9BQU9PLE1BQU0sQ0FBQ1AsU0FBZCxLQUE0QixVQUFwRCxFQUFnRTtJQUM5RCxJQUFJLE9BQU9JLEtBQVAsS0FBaUIsUUFBckIsRUFBK0IsT0FBT0EsS0FBUDtJQUMvQixPQUFPRyxNQUFNLENBQUNQLFNBQVAsQ0FDTEksS0FESyxFQUVMQyxNQUZLLEVBR0xDLEdBSEssRUFJTEgsS0FKSyxFQUtMSyxTQUxLLEVBTUxDLGVBTkssQ0FBUDtFQVFELENBZkUsQ0FpQkg7OztFQUNBLElBQUksT0FBT0YsTUFBUCxLQUFrQixVQUF0QixFQUFrQztJQUNoQyxPQUFPLElBQUlBLE1BQUosQ0FBV0gsS0FBWCxDQUFQO0VBQ0Q7O0VBRUQsSUFBSSxPQUFPQSxLQUFQLEtBQWlCLFFBQWpCLElBQTZCLE9BQU9HLE1BQVAsS0FBa0IsUUFBbkQsRUFBNkQsT0FBT0gsS0FBUDtFQUU3RCxNQUFNTSxNQUFNLEdBQUdDLEtBQUssQ0FBQ0MsT0FBTixDQUFjTCxNQUFkLElBQXdCTixjQUF4QixHQUF5Q0MsZUFBeEQ7RUFDQSxPQUFPUSxNQUFNLENBQUNILE1BQUQsRUFBU0gsS0FBVCxFQUFnQkMsTUFBaEIsRUFBd0JDLEdBQXhCLEVBQTZCSCxLQUE3QixFQUFvQ0ssU0FBcEMsRUFBK0NDLGVBQS9DLENBQWI7QUFDRCxDQXJDRDs7QUF1Q0EsTUFBTUksV0FBVyxHQUNmLENBQ0VDLFFBREYsRUFFRUMsT0FGRixFQUdFQyxnQkFIRixFQUlFQyxlQUpGLEVBS0VDLFVBTEYsRUFjRUMsSUFkRixLQWdCQSxDQUFDWixNQUFELEVBQTBCYSxlQUExQixFQUFnREMsRUFBaEQsS0FBK0Q7RUFDN0QsTUFBTUMsU0FBUyxHQUFHZixNQUFNLENBQUNELEdBQXpCOztFQUNBLElBQUksRUFBRWdCLFNBQVMsSUFBSVIsUUFBZixDQUFKLEVBQThCO0lBQzVCQSxRQUFRLENBQUNRLFNBQUQsQ0FBUixHQUFzQixFQUF0QjtJQUNBTixnQkFBZ0IsQ0FBQ00sU0FBRCxDQUFoQixHQUE4QixFQUFFLEdBQUdOLGdCQUFnQixDQUFDTSxTQUFEO0lBQXJCLENBQTlCO0lBQ0FKLFVBQVUsQ0FBQ0ksU0FBRCxDQUFWLEdBQXdCLEVBQUUsR0FBR0osVUFBVSxDQUFDSSxTQUFEO0lBQWYsQ0FBeEI7RUFDRDs7RUFFRCxNQUFNQyxjQUFjLEdBQUdULFFBQVEsQ0FBQ1EsU0FBRCxDQUFSLENBQW9CRCxFQUFwQixDQUF2Qjs7RUFDQSxJQUFJRSxjQUFKLEVBQW9CO0lBQ2xCVCxRQUFRLENBQUNRLFNBQUQsQ0FBUixDQUFvQkQsRUFBcEIsSUFBMEJkLE1BQU0sQ0FBQ2lCLEtBQVAsQ0FBYUQsY0FBYixFQUE2QkgsZUFBN0IsQ0FBMUI7RUFDRCxDQUZELE1BRU87SUFDTDtJQUNBLE1BQU1LLGVBQWUsR0FBR2xCLE1BQU0sQ0FBQ21CLFNBQVAsR0FDcEJuQixNQUFNLENBQUNtQixTQUFQLENBQWlCUCxJQUFqQixFQUF1QkMsZUFBdkIsQ0FEb0IsR0FFcEJELElBQUksQ0FBQ08sU0FGVDtJQUlBLE1BQU1DLGFBQWEsR0FBR1gsZ0JBQWdCLENBQUNNLFNBQUQsQ0FBaEIsQ0FBNEJELEVBQTVCLENBQXRCLENBTkssQ0FPTDs7SUFDQSxJQUFJTSxhQUFKLEVBQW1CO01BQUE7O01BQ2pCLE1BQU1DLFdBQVcsR0FBR1YsVUFBVSxDQUFDSSxTQUFELENBQVYsQ0FBc0JELEVBQXRCLENBQXBCO01BQ0EsTUFBTVEsV0FBVyxHQUNmO01BQ0EsQ0FBQ0QsV0FBRCxNQUNBO01BQ0NyQixNQUFNLENBQUNzQixXQUFQLElBQXNCVixJQUFJLENBQUNXLFNBQTNCLEdBQ0d2QixNQUFNLENBQUNzQixXQUFQLENBQ0VELFdBREYsRUFFRVQsSUFGRixFQUdFUSxhQUhGLEVBSUVQLGVBSkYsQ0FESCxHQU9HRixVQUFVLENBQUNJLFNBQUQsQ0FBVixDQUFzQkQsRUFBdEIsRUFBMEJVLElBQTFCLElBQWtDWixJQUFJLENBQUNZLElBVDNDLENBRkY7O01BWUEsSUFBSUYsV0FBSixFQUFpQjtRQUNmLElBQUksT0FBT1QsZUFBUCxLQUEyQixPQUFPTyxhQUF0QyxFQUFxRDtVQUNuRGIsUUFBUSxDQUFDUSxTQUFELENBQVIsQ0FBb0JELEVBQXBCLElBQTBCRCxlQUExQjtRQUNELENBRkQsTUFFTztVQUNMTixRQUFRLENBQUNRLFNBQUQsQ0FBUixDQUFvQkQsRUFBcEIsSUFBMEJkLE1BQU0sQ0FBQ2lCLEtBQVAsQ0FDeEJHLGFBRHdCLEVBRXhCUCxlQUZ3QixDQUExQjtRQUlEO01BQ0YsQ0FURCxNQVNPO1FBQ0xOLFFBQVEsQ0FBQ1EsU0FBRCxDQUFSLENBQW9CRCxFQUFwQixJQUEwQk0sYUFBMUI7TUFDRDs7TUFFRFQsVUFBVSxDQUFDSSxTQUFELENBQVYsQ0FBc0JELEVBQXRCLElBQTRCO1FBQzFCSyxTQUFTLEVBQUVNLElBQUksQ0FBQ0MsR0FBTCxDQUNUUixlQURTLDJCQUVUUCxVQUFVLENBQUNJLFNBQUQsQ0FBVixDQUFzQkQsRUFBdEIsQ0FGUyxxQkFFVCxzQkFBMkJLLFNBRmxCLENBRGU7UUFLMUJLLElBQUksRUFBRUMsSUFBSSxDQUFDQyxHQUFMLENBQVNkLElBQUksQ0FBQ1ksSUFBZCxzREFBb0JiLFVBQVUsQ0FBQ0ksU0FBRCxDQUFWLENBQXNCRCxFQUF0QixDQUFwQixxQkFBb0IsdUJBQTJCVSxJQUEvQyxxQ0FBdUQsQ0FBdkQsQ0FMb0I7UUFNMUJELFNBQVMsRUFBRUUsSUFBSSxDQUFDQyxHQUFMLG9CQUNUZCxJQUFJLENBQUNXLFNBREksOEJBQ1MsQ0FEVCxzREFFVFosVUFBVSxDQUFDSSxTQUFELENBQVYsQ0FBc0JELEVBQXRCLENBRlMscUJBRVQsdUJBQTJCUyxTQUZsQixxQ0FFK0IsQ0FGL0I7TUFOZSxDQUE1QjtJQVdELENBdENELE1Bc0NPO01BQUE7O01BQ0xoQixRQUFRLENBQUNRLFNBQUQsQ0FBUixDQUFvQkQsRUFBcEIsSUFBMEJELGVBQTFCO01BQ0FGLFVBQVUsQ0FBQ0ksU0FBRCxDQUFWLENBQXNCRCxFQUF0QixJQUE0QjtRQUMxQkssU0FBUyxFQUFFRCxlQURlO1FBRTFCTSxJQUFJLEVBQUVaLElBQUksQ0FBQ1ksSUFGZTtRQUcxQkQsU0FBUyxzQkFBRVgsSUFBSSxDQUFDVyxTQUFQLCtCQUFvQlgsSUFBSSxDQUFDWTtNQUhSLENBQTVCO0lBS0Q7RUFDRixDQWpFNEQsQ0FtRTdEOzs7RUFDQSxJQUFJcEIsS0FBSyxDQUFDQyxPQUFOLENBQWNMLE1BQU0sQ0FBQ1EsT0FBckIsQ0FBSixFQUFtQztJQUNqQyxNQUFNbUIsTUFBTSxHQUFHcEIsUUFBUSxDQUFDUSxTQUFELENBQVIsQ0FBb0JELEVBQXBCLENBQWY7O0lBQ0EsSUFBSSxFQUFFQyxTQUFTLElBQUlQLE9BQWYsQ0FBSixFQUE2QjtNQUMzQkEsT0FBTyxDQUFDTyxTQUFELENBQVAsR0FBcUIsRUFBckI7TUFDQUwsZUFBZSxDQUFDSyxTQUFELENBQWYsR0FBNkIsRUFBRSxHQUFHTCxlQUFlLENBQUNLLFNBQUQ7TUFBcEIsQ0FBN0I7SUFDRDs7SUFDRCxLQUFLLE1BQU1hLEtBQVgsSUFBb0I1QixNQUFNLENBQUNRLE9BQTNCLEVBQW9DO01BQ2xDLElBQUksRUFBRW9CLEtBQUssSUFBSXBCLE9BQU8sQ0FBQ08sU0FBRCxDQUFsQixDQUFKLEVBQW9DO1FBQ2xDTCxlQUFlLENBQUNLLFNBQUQsQ0FBZixDQUEyQmEsS0FBM0IsSUFBb0NwQixPQUFPLENBQUNPLFNBQUQsQ0FBUCxDQUFtQmEsS0FBbkIsSUFBNEIsRUFBaEU7TUFDRDs7TUFDRCxNQUFNQyxRQUFRLEdBQUdyQixPQUFPLENBQUNPLFNBQUQsQ0FBUCxDQUFtQmEsS0FBbkIsQ0FBakI7O01BQ0EsSUFBSVosY0FBSixFQUFvQjtRQUNsQixPQUFPYSxRQUFRLENBQUNiLGNBQWMsQ0FBQ1ksS0FBRCxDQUFmLENBQWY7TUFDRCxDQVBpQyxDQVFsQzs7O01BQ0EsSUFDRW5CLGdCQUFnQixDQUFDTSxTQUFELENBQWhCLElBQ0FOLGdCQUFnQixDQUFDTSxTQUFELENBQWhCLENBQTRCRCxFQUE1QixDQURBLElBRUFMLGdCQUFnQixDQUFDTSxTQUFELENBQWhCLENBQTRCRCxFQUE1QixFQUFnQ2MsS0FBaEMsTUFBMkNELE1BQU0sQ0FBQ0MsS0FBRCxDQUhuRCxFQUlFO1FBQ0FDLFFBQVEsQ0FBQ3BCLGdCQUFnQixDQUFDTSxTQUFELENBQWhCLENBQTRCRCxFQUE1QixFQUFnQ2MsS0FBaEMsQ0FBRCxDQUFSLEdBQW1EcEMsT0FBbkQ7TUFDRDs7TUFDRCxJQUFJb0MsS0FBSyxJQUFJRCxNQUFiLEVBQXFCO1FBQ25CRSxRQUFRLENBQUNGLE1BQU0sQ0FBQ0MsS0FBRCxDQUFQLENBQVIsR0FBMEJkLEVBQTFCO01BQ0Q7TUFBQztNQUZGLEtBRWtDLEtBQ2hDO01BQ0FnQixPQUFPLENBQUNDLEdBQVIsQ0FBWUMsUUFBWixLQUF5QixZQUZPLEVBR2hDO1FBQ0FDLE9BQU8sQ0FBQ0MsSUFBUixDQUFjO0FBQ3hCLFNBQVNOLEtBQU07QUFDZixVQUFVTyxJQUFJLENBQUNDLFNBQUwsQ0FBZVQsTUFBZixFQUF1QlUsU0FBdkIsRUFBa0MsQ0FBbEMsQ0FBcUMsRUFGckM7TUFHRDtJQUNGO0VBQ0YsQ0FyRzRELENBc0c3RDs7O0VBQ0E1QixnQkFBZ0IsQ0FBQ00sU0FBRCxDQUFoQixDQUE0QkQsRUFBNUIsSUFBa0NQLFFBQVEsQ0FBQ1EsU0FBRCxDQUFSLENBQW9CRCxFQUFwQixDQUFsQztBQUNELENBekhIOztBQTJIQSxTQUFTd0Isa0JBQVQsQ0FBNEJ0QyxNQUE1QixFQUE0QztFQUMxQyxPQUFPLENBQUMsUUFBRCxFQUFXLFVBQVgsRUFBdUJ1QyxRQUF2QixDQUFnQyxPQUFPdkMsTUFBdkMsSUFDSCxRQURHLEdBRUgsT0FBT0EsTUFGWDtBQUdELEMsQ0FFRDs7O0FBQ0EsT0FBTyxNQUFNUCxTQUFTLEdBQUcsQ0FRdkIrQyxLQVJ1QixFQVN2QnhDLE1BVHVCLEVBVXZCUyxnQkFBNkIsR0FBRyxFQVZULEVBV3ZCQyxlQUEwQyxHQUFHLEVBWHRCLEVBWXZCK0Isa0JBUUMsR0FBRyxFQXBCbUIsRUFxQnZCN0IsSUFBNkQsR0FBRztFQUM5RFksSUFBSSxFQUFFa0IsSUFBSSxDQUFDQyxHQUFMLEVBRHdEO0VBRTlEeEIsU0FBUyxFQUFFeUIsUUFGbUQ7RUFHOURyQixTQUFTLEVBQUU7QUFIbUQsQ0FyQnpDLEtBMEJJO0VBQzNCO0VBQ0EsSUFBSXZCLE1BQU0sS0FBS3FDLFNBQWYsRUFDRSxPQUFPO0lBQ0w5QixRQUFRLEVBQUVFLGdCQURMO0lBRUxELE9BQU8sRUFBRUUsZUFGSjtJQUdMbUMsTUFBTSxFQUFFTCxLQUhIO0lBSUw3QixVQUFVLEVBQUU4QjtFQUpQLENBQVA7RUFPRixNQUFNSyxVQUFVLEdBQUdSLGtCQUFrQixDQUFDdEMsTUFBRCxDQUFyQzs7RUFDQSxJQUNFd0MsS0FBSyxLQUFLLElBQVYsSUFDQyxPQUFPQSxLQUFQLEtBQWlCTSxVQUFqQixJQUNDLEVBQUc5QyxNQUFELENBQWdCRCxHQUFoQixLQUF3QnNDLFNBQXhCLElBQXFDLE9BQU9HLEtBQVAsS0FBaUIsUUFBeEQsQ0FISixFQUlFO0lBQ0E7SUFDQSxJQUFJVixPQUFPLENBQUNDLEdBQVIsQ0FBWUMsUUFBWixLQUF5QixZQUE3QixFQUEyQztNQUN6QyxNQUFNZSxVQUFVLEdBQUlQLEtBQUQsSUFBbUI7UUFDcEMsSUFBSTtVQUNGLE9BQU8sT0FBT0wsSUFBSSxDQUFDYSxLQUFMLENBQVdSLEtBQVgsQ0FBUCxLQUE2QixRQUFwQztRQUNELENBRkQsQ0FFRSxPQUFPUyxDQUFQLEVBQVU7VUFDVixPQUFPLEtBQVA7UUFDRDtNQUNGLENBTkQ7O01BT0EsSUFBSSxPQUFPVCxLQUFQLEtBQWlCLFFBQWpCLElBQTZCTyxVQUFVLENBQUNQLEtBQUQsQ0FBM0MsRUFBb0Q7UUFDbEQsTUFBTSxJQUFJVSxLQUFKLENBQVc7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVlmLElBQUksQ0FBQ0MsU0FBTCxDQUFlcEMsTUFBZixFQUF1QnFDLFNBQXZCLEVBQWtDLENBQWxDLENBQXFDO0FBQ2pELFlBQVlHLEtBQU0sR0FQSixDQUFOO01BUUQsQ0FURCxNQVNPO1FBQ0wsTUFBTSxJQUFJVSxLQUFKLENBQ0gsNkRBQTRESixVQUFXLGFBQ3RFTixLQUFLLEtBQUssSUFBVixHQUFpQixNQUFqQixHQUEwQixPQUFPQSxLQUNsQztBQUNYO0FBQ0Esb0JBQW9CTCxJQUFJLENBQUNDLFNBQUwsQ0FBZXBDLE1BQWYsRUFBdUJxQyxTQUF2QixFQUFrQyxDQUFsQyxDQUFxQztBQUN6RCxvQkFBb0JHLEtBQU0sR0FOWixDQUFOO01BUUQ7SUFDRixDQTNCRCxNQTJCTztNQUNMLE1BQU0sSUFBSVUsS0FBSixDQUNILDZEQUE0REosVUFBVyxhQUN0RU4sS0FBSyxLQUFLLElBQVYsR0FBaUIsTUFBakIsR0FBMEIsT0FBT0EsS0FDbEMsSUFIRyxDQUFOO0lBS0Q7RUFDRjs7RUFFRCxNQUFNVyxXQUFjLEdBQUcsRUFBdkI7RUFDQSxNQUFNQyxVQUEyQixHQUFHLEVBQXBDO0VBQ0EsTUFBTTdDLFFBQVcsR0FBRyxFQUFFLEdBQUdFO0VBQUwsQ0FBcEI7RUFDQSxNQUFNRCxPQUF3QixHQUFHLEVBQUUsR0FBR0U7RUFBTCxDQUFqQztFQUNBLE1BQU1DLFVBQWUsR0FBRyxFQUFFLEdBQUc4QjtFQUFMLENBQXhCO0VBQ0EsTUFBTXhDLFNBQVMsR0FBR0ssV0FBVyxDQUMzQjZDLFdBRDJCLEVBRTNCQyxVQUYyQixFQUczQjdDLFFBSDJCLEVBSTNCQyxPQUoyQixFQUszQkcsVUFMMkIsRUFNM0JDLElBTjJCLENBQTdCO0VBUUEsTUFBTVYsZUFBZSxHQUFHLEVBQXhCO0VBRUEsTUFBTTJDLE1BQU0sR0FBR2pELEtBQUssQ0FDbEI0QyxLQURrQixFQUVsQkEsS0FGa0IsRUFHbEJILFNBSGtCLEVBSWxCckMsTUFKa0IsRUFLbEJDLFNBTGtCLEVBTWxCQyxlQU5rQixDQUFwQjtFQVFBLE9BQU87SUFBRUssUUFBRjtJQUFZQyxPQUFaO0lBQXFCcUMsTUFBckI7SUFBNkJsQztFQUE3QixDQUFQO0FBQ0QsQ0F2R00ifQ==","export default class AbortOptimistic extends Error {}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBYm9ydE9wdGltaXN0aWMiLCJFcnJvciJdLCJzb3VyY2VzIjpbIi4uL3NyYy9BYm9ydE9wdGltaXN0aWMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWJvcnRPcHRpbWlzdGljIGV4dGVuZHMgRXJyb3Ige31cbiJdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxNQUFNQSxlQUFOLFNBQThCQyxLQUE5QixDQUFvQyJ9","import { normalize } from '@rest-hooks/normalizr';\nimport { AbortOptimistic } from '@rest-hooks/endpoint';\nimport createOptimistic from '../controller/createOptimistic.js';\nimport { createReceive as legacyCreateReceive } from './actions/index.js';\nimport { RECEIVE_TYPE, INVALIDATE_TYPE, RESET_TYPE, FETCH_TYPE, GC_TYPE, OPTIMISTIC_TYPE } from '../actionTypes.js';\nimport applyUpdatersToResults from './applyUpdatersToResults.js';\nexport const initialState = {\n entities: {},\n indexes: {},\n results: {},\n meta: {},\n entityMeta: {},\n optimistic: [],\n lastReset: 0\n};\nexport default function createReducer(controller) {\n return function reducer(state, action) {\n var _action$date;\n\n if (!state) state = initialState;\n\n switch (action.type) {\n case GC_TYPE:\n // inline deletes are fine as these should have 0 refcounts\n action.entities.forEach(([key, pk]) => {\n var _entities$key, _entityMeta$key;\n\n (_entities$key = state.entities[key]) == null ? true : delete _entities$key[pk];\n (_entityMeta$key = state.entityMeta[key]) == null ? true : delete _entityMeta$key[pk];\n });\n action.results.forEach(fetchKey => {\n delete state.results[fetchKey];\n delete state.meta[fetchKey];\n });\n return state;\n\n case FETCH_TYPE:\n {\n var _action$endpoint;\n\n const optimisticResponse = action.meta.optimisticResponse;\n const getOptimisticResponse = (_action$endpoint = action.endpoint) == null ? void 0 : _action$endpoint.getOptimisticResponse;\n let receiveAction;\n\n if (getOptimisticResponse && action.endpoint) {\n receiveAction = createOptimistic(action.endpoint, {\n args: action.meta.args,\n fetchedAt: typeof action.meta.createdAt !== 'number' ? action.meta.createdAt.getTime() : action.meta.createdAt\n });\n } else if (optimisticResponse) {\n receiveAction = legacyCreateReceive(optimisticResponse, { ...action.meta,\n dataExpiryLength: Infinity\n });\n } else {\n // If 'fetch' action reaches the reducer there are no middlewares installed to handle it\n\n /* istanbul ignore next */\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Fetch appears unhandled - you are likely missing the NetworkManager middleware');\n console.warn('See https://resthooks.io/docs/guides/redux#indextsx for hooking up redux');\n }\n\n return state;\n }\n\n return { ...state,\n optimistic: [...state.optimistic, receiveAction]\n };\n }\n\n case OPTIMISTIC_TYPE: // eslint-disable-next-line no-fallthrough\n\n case RECEIVE_TYPE:\n {\n if (action.error) {\n return reduceError(state, action, action.payload);\n }\n\n try {\n var _state$meta$action$me;\n\n let payload; // for true receives payload is contained in action\n\n if (action.type === OPTIMISTIC_TYPE) {\n if (!action.endpoint.getOptimisticResponse) return state;\n\n try {\n // compute optimistic response based on current state\n payload = action.endpoint.getOptimisticResponse.call(action.endpoint, controller.snapshot(state, action.meta.fetchedAt), // if endpoint exists, so must args; TODO: fix typing\n ...action.meta.args);\n } catch (e) {\n // AbortOptimistic means 'do nothing', otherwise we count the exception as endpoint failure\n if (e instanceof AbortOptimistic) {\n return state;\n }\n\n throw e;\n }\n } else {\n payload = action.payload;\n }\n\n const {\n result,\n entities,\n indexes,\n entityMeta\n } = normalize(payload, action.meta.schema, state.entities, state.indexes, state.entityMeta, action.meta);\n let results = { ...state.results,\n [action.meta.key]: result\n };\n\n try {\n if ('updaters' in action.meta && action.meta.updaters) {\n results = applyUpdatersToResults(results, result, action.meta.updaters);\n }\n\n if (action.meta.update) {\n const updaters = action.meta.update(result, ...(action.meta.args || []));\n Object.keys(updaters).forEach(key => {\n results[key] = updaters[key](results[key]);\n });\n } // no reason to completely fail because of user-code error\n // integrity of this state update is still guaranteed\n\n } catch (error) {\n console.error(`The following error occured during Endpoint.update() for ${action.meta.key}`);\n console.error(error);\n }\n\n return {\n entities,\n indexes,\n results,\n entityMeta,\n meta: { ...state.meta,\n [action.meta.key]: {\n date: action.meta.date,\n expiresAt: action.meta.expiresAt,\n prevExpiresAt: (_state$meta$action$me = state.meta[action.meta.key]) == null ? void 0 : _state$meta$action$me.expiresAt\n }\n },\n optimistic: filterOptimistic(state, action),\n lastReset: state.lastReset\n }; // reducer must update the state, so in case of processing errors we simply compute the results inline\n } catch (error) {\n error.message = `Error processing ${action.meta.key}\\n\\nFull Schema: ${JSON.stringify(action.meta.schema, undefined, 2)}\\n\\nError:\\n${error.message}`;\n if ('payload' in action) error.payload = action.payload;\n error.status = 400; // this is not always bubbled up, so let's double sure this doesn't fail silently\n\n /* istanbul ignore else */\n\n if (process.env.NODE_ENV !== 'production') {\n console.error(error);\n }\n\n return reduceError(state, action, error);\n }\n }\n\n case INVALIDATE_TYPE:\n {\n const results = { ...state.results\n };\n delete results[action.meta.key];\n const meta = { ...state.meta[action.meta.key],\n expiresAt: 0,\n invalidated: true\n };\n delete meta.error;\n return { ...state,\n results,\n meta: { ...state.meta,\n [action.meta.key]: meta\n }\n };\n }\n\n case RESET_TYPE:\n if (process.env.NODE_ENV !== 'production' && action.date === undefined) {\n console.warn(`${RESET_TYPE} sent without 'date' member. This is deprecated. Please use createReset() action creator to ensure correct action shape.`);\n }\n\n return { ...initialState,\n lastReset: (_action$date = action.date) != null ? _action$date : Date.now()\n };\n\n default:\n // A reducer must always return a valid state.\n // Alternatively you can throw an error if an invalid action is dispatched.\n return state;\n }\n };\n}\n\nfunction reduceError(state, action, error) {\n if (error.name === 'AbortError') {\n // In case we abort simply undo the optimistic update and act like no fetch even occured\n // We still want those watching promises from fetch directly to observed the abort, but we don't want to\n // Trigger errors in this case. This means theoretically improperly built abortes useResource() could suspend forever.\n return { ...state,\n optimistic: filterOptimistic(state, action)\n };\n }\n\n return { ...state,\n meta: { ...state.meta,\n [action.meta.key]: {\n date: action.meta.date,\n error,\n expiresAt: action.meta.expiresAt,\n errorPolicy: action.meta.errorPolicy == null ? void 0 : action.meta.errorPolicy(error)\n }\n },\n optimistic: filterOptimistic(state, action)\n };\n}\n/** Filter all requests with same serialization that did not start after the resolving request */\n\n\nfunction filterOptimistic(state, resolvingAction) {\n return state.optimistic.filter(optimisticAction => optimisticAction.meta.key !== resolvingAction.meta.key || (optimisticAction.type === OPTIMISTIC_TYPE ? optimisticAction.meta.fetchedAt !== resolvingAction.meta.fetchedAt : optimisticAction.meta.date > resolvingAction.meta.date));\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub3JtYWxpemUiLCJBYm9ydE9wdGltaXN0aWMiLCJjcmVhdGVPcHRpbWlzdGljIiwiY3JlYXRlUmVjZWl2ZSIsImxlZ2FjeUNyZWF0ZVJlY2VpdmUiLCJSRUNFSVZFX1RZUEUiLCJJTlZBTElEQVRFX1RZUEUiLCJSRVNFVF9UWVBFIiwiRkVUQ0hfVFlQRSIsIkdDX1RZUEUiLCJPUFRJTUlTVElDX1RZUEUiLCJhcHBseVVwZGF0ZXJzVG9SZXN1bHRzIiwiaW5pdGlhbFN0YXRlIiwiZW50aXRpZXMiLCJpbmRleGVzIiwicmVzdWx0cyIsIm1ldGEiLCJlbnRpdHlNZXRhIiwib3B0aW1pc3RpYyIsImxhc3RSZXNldCIsImNyZWF0ZVJlZHVjZXIiLCJjb250cm9sbGVyIiwicmVkdWNlciIsInN0YXRlIiwiYWN0aW9uIiwidHlwZSIsImZvckVhY2giLCJrZXkiLCJwayIsImZldGNoS2V5Iiwib3B0aW1pc3RpY1Jlc3BvbnNlIiwiZ2V0T3B0aW1pc3RpY1Jlc3BvbnNlIiwiZW5kcG9pbnQiLCJyZWNlaXZlQWN0aW9uIiwiYXJncyIsImZldGNoZWRBdCIsImNyZWF0ZWRBdCIsImdldFRpbWUiLCJkYXRhRXhwaXJ5TGVuZ3RoIiwiSW5maW5pdHkiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJjb25zb2xlIiwid2FybiIsImVycm9yIiwicmVkdWNlRXJyb3IiLCJwYXlsb2FkIiwiY2FsbCIsInNuYXBzaG90IiwiZSIsInJlc3VsdCIsInNjaGVtYSIsInVwZGF0ZXJzIiwidXBkYXRlIiwiT2JqZWN0Iiwia2V5cyIsImRhdGUiLCJleHBpcmVzQXQiLCJwcmV2RXhwaXJlc0F0IiwiZmlsdGVyT3B0aW1pc3RpYyIsIm1lc3NhZ2UiLCJKU09OIiwic3RyaW5naWZ5IiwidW5kZWZpbmVkIiwic3RhdHVzIiwiaW52YWxpZGF0ZWQiLCJEYXRlIiwibm93IiwibmFtZSIsImVycm9yUG9saWN5IiwicmVzb2x2aW5nQWN0aW9uIiwiZmlsdGVyIiwib3B0aW1pc3RpY0FjdGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGF0ZS9jcmVhdGVSZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG5vcm1hbGl6ZSB9IGZyb20gJ0ByZXN0LWhvb2tzL25vcm1hbGl6cic7XG5pbXBvcnQgeyBBYm9ydE9wdGltaXN0aWMgfSBmcm9tICdAcmVzdC1ob29rcy9lbmRwb2ludCc7XG5cbmltcG9ydCB7XG4gIEFjdGlvblR5cGVzLFxuICBTdGF0ZSxcbiAgUmVjZWl2ZUFjdGlvbixcbiAgT3B0aW1pc3RpY0FjdGlvbixcbn0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IGNyZWF0ZU9wdGltaXN0aWMgZnJvbSAnLi4vY29udHJvbGxlci9jcmVhdGVPcHRpbWlzdGljLmpzJztcbmltcG9ydCB7IGNyZWF0ZVJlY2VpdmUgYXMgbGVnYWN5Q3JlYXRlUmVjZWl2ZSB9IGZyb20gJy4vYWN0aW9ucy9pbmRleC5qcyc7XG5pbXBvcnQge1xuICBSRUNFSVZFX1RZUEUsXG4gIElOVkFMSURBVEVfVFlQRSxcbiAgUkVTRVRfVFlQRSxcbiAgRkVUQ0hfVFlQRSxcbiAgR0NfVFlQRSxcbiAgT1BUSU1JU1RJQ19UWVBFLFxufSBmcm9tICcuLi9hY3Rpb25UeXBlcy5qcyc7XG5pbXBvcnQgYXBwbHlVcGRhdGVyc1RvUmVzdWx0cyBmcm9tICcuL2FwcGx5VXBkYXRlcnNUb1Jlc3VsdHMuanMnO1xuaW1wb3J0IENvbnRyb2xsZXIgZnJvbSAnLi4vY29udHJvbGxlci9Db250cm9sbGVyLmpzJztcblxuZXhwb3J0IGNvbnN0IGluaXRpYWxTdGF0ZTogU3RhdGU8dW5rbm93bj4gPSB7XG4gIGVudGl0aWVzOiB7fSxcbiAgaW5kZXhlczoge30sXG4gIHJlc3VsdHM6IHt9LFxuICBtZXRhOiB7fSxcbiAgZW50aXR5TWV0YToge30sXG4gIG9wdGltaXN0aWM6IFtdLFxuICBsYXN0UmVzZXQ6IDAsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVSZWR1Y2VyKGNvbnRyb2xsZXI6IENvbnRyb2xsZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHJlZHVjZXIoXG4gICAgc3RhdGU6IFN0YXRlPHVua25vd24+IHwgdW5kZWZpbmVkLFxuICAgIGFjdGlvbjogQWN0aW9uVHlwZXMsXG4gICk6IFN0YXRlPHVua25vd24+IHtcbiAgICBpZiAoIXN0YXRlKSBzdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICBjYXNlIEdDX1RZUEU6XG4gICAgICAgIC8vIGlubGluZSBkZWxldGVzIGFyZSBmaW5lIGFzIHRoZXNlIHNob3VsZCBoYXZlIDAgcmVmY291bnRzXG4gICAgICAgIGFjdGlvbi5lbnRpdGllcy5mb3JFYWNoKChba2V5LCBwa10pID0+IHtcbiAgICAgICAgICBkZWxldGUgKHN0YXRlIGFzIGFueSkuZW50aXRpZXNba2V5XT8uW3BrXTtcbiAgICAgICAgICBkZWxldGUgKHN0YXRlIGFzIGFueSkuZW50aXR5TWV0YVtrZXldPy5bcGtdO1xuICAgICAgICB9KTtcbiAgICAgICAgYWN0aW9uLnJlc3VsdHMuZm9yRWFjaChmZXRjaEtleSA9PiB7XG4gICAgICAgICAgZGVsZXRlIChzdGF0ZSBhcyBhbnkpLnJlc3VsdHNbZmV0Y2hLZXldO1xuICAgICAgICAgIGRlbGV0ZSAoc3RhdGUgYXMgYW55KS5tZXRhW2ZldGNoS2V5XTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgIGNhc2UgRkVUQ0hfVFlQRToge1xuICAgICAgICBjb25zdCBvcHRpbWlzdGljUmVzcG9uc2UgPSBhY3Rpb24ubWV0YS5vcHRpbWlzdGljUmVzcG9uc2U7XG4gICAgICAgIGNvbnN0IGdldE9wdGltaXN0aWNSZXNwb25zZSA9IGFjdGlvbi5lbmRwb2ludD8uZ2V0T3B0aW1pc3RpY1Jlc3BvbnNlO1xuICAgICAgICBsZXQgcmVjZWl2ZUFjdGlvbjogUmVjZWl2ZUFjdGlvbiB8IE9wdGltaXN0aWNBY3Rpb247XG5cbiAgICAgICAgaWYgKGdldE9wdGltaXN0aWNSZXNwb25zZSAmJiBhY3Rpb24uZW5kcG9pbnQpIHtcbiAgICAgICAgICByZWNlaXZlQWN0aW9uID0gY3JlYXRlT3B0aW1pc3RpYyhhY3Rpb24uZW5kcG9pbnQsIHtcbiAgICAgICAgICAgIGFyZ3M6IGFjdGlvbi5tZXRhLmFyZ3MgYXMgcmVhZG9ubHkgYW55W10sXG4gICAgICAgICAgICBmZXRjaGVkQXQ6XG4gICAgICAgICAgICAgIHR5cGVvZiBhY3Rpb24ubWV0YS5jcmVhdGVkQXQgIT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgPyBhY3Rpb24ubWV0YS5jcmVhdGVkQXQuZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgOiBhY3Rpb24ubWV0YS5jcmVhdGVkQXQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW1pc3RpY1Jlc3BvbnNlKSB7XG4gICAgICAgICAgcmVjZWl2ZUFjdGlvbiA9IGxlZ2FjeUNyZWF0ZVJlY2VpdmUob3B0aW1pc3RpY1Jlc3BvbnNlLCB7XG4gICAgICAgICAgICAuLi5hY3Rpb24ubWV0YSxcbiAgICAgICAgICAgIGRhdGFFeHBpcnlMZW5ndGg6IEluZmluaXR5LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmICdmZXRjaCcgYWN0aW9uIHJlYWNoZXMgdGhlIHJlZHVjZXIgdGhlcmUgYXJlIG5vIG1pZGRsZXdhcmVzIGluc3RhbGxlZCB0byBoYW5kbGUgaXRcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICdGZXRjaCBhcHBlYXJzIHVuaGFuZGxlZCAtIHlvdSBhcmUgbGlrZWx5IG1pc3NpbmcgdGhlIE5ldHdvcmtNYW5hZ2VyIG1pZGRsZXdhcmUnLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgJ1NlZSBodHRwczovL3Jlc3Rob29rcy5pby9kb2NzL2d1aWRlcy9yZWR1eCNpbmRleHRzeCBmb3IgaG9va2luZyB1cCByZWR1eCcsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIG9wdGltaXN0aWM6IFsuLi5zdGF0ZS5vcHRpbWlzdGljLCByZWNlaXZlQWN0aW9uXSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgT1BUSU1JU1RJQ19UWVBFOlxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgIGNhc2UgUkVDRUlWRV9UWVBFOiB7XG4gICAgICAgIGlmIChhY3Rpb24uZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gcmVkdWNlRXJyb3Ioc3RhdGUsIGFjdGlvbiwgYWN0aW9uLnBheWxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbGV0IHBheWxvYWQ6IGFueTtcbiAgICAgICAgICAvLyBmb3IgdHJ1ZSByZWNlaXZlcyBwYXlsb2FkIGlzIGNvbnRhaW5lZCBpbiBhY3Rpb25cbiAgICAgICAgICBpZiAoYWN0aW9uLnR5cGUgPT09IE9QVElNSVNUSUNfVFlQRSkge1xuICAgICAgICAgICAgaWYgKCFhY3Rpb24uZW5kcG9pbnQuZ2V0T3B0aW1pc3RpY1Jlc3BvbnNlKSByZXR1cm4gc3RhdGU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAvLyBjb21wdXRlIG9wdGltaXN0aWMgcmVzcG9uc2UgYmFzZWQgb24gY3VycmVudCBzdGF0ZVxuICAgICAgICAgICAgICBwYXlsb2FkID0gYWN0aW9uLmVuZHBvaW50LmdldE9wdGltaXN0aWNSZXNwb25zZS5jYWxsKFxuICAgICAgICAgICAgICAgIGFjdGlvbi5lbmRwb2ludCxcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLnNuYXBzaG90KHN0YXRlLCBhY3Rpb24ubWV0YS5mZXRjaGVkQXQpLFxuICAgICAgICAgICAgICAgIC8vIGlmIGVuZHBvaW50IGV4aXN0cywgc28gbXVzdCBhcmdzOyBUT0RPOiBmaXggdHlwaW5nXG4gICAgICAgICAgICAgICAgLi4uKGFjdGlvbi5tZXRhLmFyZ3MgYXMgYW55W10pLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAvLyBBYm9ydE9wdGltaXN0aWMgbWVhbnMgJ2RvIG5vdGhpbmcnLCBvdGhlcndpc2Ugd2UgY291bnQgdGhlIGV4Y2VwdGlvbiBhcyBlbmRwb2ludCBmYWlsdXJlXG4gICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgQWJvcnRPcHRpbWlzdGljKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBheWxvYWQgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgeyByZXN1bHQsIGVudGl0aWVzLCBpbmRleGVzLCBlbnRpdHlNZXRhIH0gPSBub3JtYWxpemUoXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICAgICAgYWN0aW9uLm1ldGEuc2NoZW1hLFxuICAgICAgICAgICAgc3RhdGUuZW50aXRpZXMsXG4gICAgICAgICAgICBzdGF0ZS5pbmRleGVzLFxuICAgICAgICAgICAgc3RhdGUuZW50aXR5TWV0YSxcbiAgICAgICAgICAgIGFjdGlvbi5tZXRhLFxuICAgICAgICAgICk7XG4gICAgICAgICAgbGV0IHJlc3VsdHMgPSB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5yZXN1bHRzLFxuICAgICAgICAgICAgW2FjdGlvbi5tZXRhLmtleV06IHJlc3VsdCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoJ3VwZGF0ZXJzJyBpbiBhY3Rpb24ubWV0YSAmJiBhY3Rpb24ubWV0YS51cGRhdGVycykge1xuICAgICAgICAgICAgICByZXN1bHRzID0gYXBwbHlVcGRhdGVyc1RvUmVzdWx0cyhcbiAgICAgICAgICAgICAgICByZXN1bHRzLFxuICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICBhY3Rpb24ubWV0YS51cGRhdGVycyBhcyBhbnksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWN0aW9uLm1ldGEudXBkYXRlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZXJzID0gYWN0aW9uLm1ldGEudXBkYXRlKFxuICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICAuLi4oYWN0aW9uLm1ldGEuYXJncyB8fCBbXSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKHVwZGF0ZXJzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0c1trZXldID0gdXBkYXRlcnNba2V5XShyZXN1bHRzW2tleV0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG5vIHJlYXNvbiB0byBjb21wbGV0ZWx5IGZhaWwgYmVjYXVzZSBvZiB1c2VyLWNvZGUgZXJyb3JcbiAgICAgICAgICAgIC8vIGludGVncml0eSBvZiB0aGlzIHN0YXRlIHVwZGF0ZSBpcyBzdGlsbCBndWFyYW50ZWVkXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIGBUaGUgZm9sbG93aW5nIGVycm9yIG9jY3VyZWQgZHVyaW5nIEVuZHBvaW50LnVwZGF0ZSgpIGZvciAke2FjdGlvbi5tZXRhLmtleX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW50aXRpZXMsXG4gICAgICAgICAgICBpbmRleGVzLFxuICAgICAgICAgICAgcmVzdWx0cyxcbiAgICAgICAgICAgIGVudGl0eU1ldGEsXG4gICAgICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLm1ldGEsXG4gICAgICAgICAgICAgIFthY3Rpb24ubWV0YS5rZXldOiB7XG4gICAgICAgICAgICAgICAgZGF0ZTogYWN0aW9uLm1ldGEuZGF0ZSxcbiAgICAgICAgICAgICAgICBleHBpcmVzQXQ6IGFjdGlvbi5tZXRhLmV4cGlyZXNBdCxcbiAgICAgICAgICAgICAgICBwcmV2RXhwaXJlc0F0OiBzdGF0ZS5tZXRhW2FjdGlvbi5tZXRhLmtleV0/LmV4cGlyZXNBdCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcHRpbWlzdGljOiBmaWx0ZXJPcHRpbWlzdGljKHN0YXRlLCBhY3Rpb24pLFxuICAgICAgICAgICAgbGFzdFJlc2V0OiBzdGF0ZS5sYXN0UmVzZXQsXG4gICAgICAgICAgfTtcbiAgICAgICAgICAvLyByZWR1Y2VyIG11c3QgdXBkYXRlIHRoZSBzdGF0ZSwgc28gaW4gY2FzZSBvZiBwcm9jZXNzaW5nIGVycm9ycyB3ZSBzaW1wbHkgY29tcHV0ZSB0aGUgcmVzdWx0cyBpbmxpbmVcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgRXJyb3IgcHJvY2Vzc2luZyAke1xuICAgICAgICAgICAgYWN0aW9uLm1ldGEua2V5XG4gICAgICAgICAgfVxcblxcbkZ1bGwgU2NoZW1hOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgYWN0aW9uLm1ldGEuc2NoZW1hLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgMixcbiAgICAgICAgICApfVxcblxcbkVycm9yOlxcbiR7ZXJyb3IubWVzc2FnZX1gO1xuICAgICAgICAgIGlmICgncGF5bG9hZCcgaW4gYWN0aW9uKSBlcnJvci5wYXlsb2FkID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgICAgZXJyb3Iuc3RhdHVzID0gNDAwO1xuICAgICAgICAgIC8vIHRoaXMgaXMgbm90IGFsd2F5cyBidWJibGVkIHVwLCBzbyBsZXQncyBkb3VibGUgc3VyZSB0aGlzIGRvZXNuJ3QgZmFpbCBzaWxlbnRseVxuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVkdWNlRXJyb3Ioc3RhdGUsIGFjdGlvbiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYXNlIElOVkFMSURBVEVfVFlQRToge1xuICAgICAgICBjb25zdCByZXN1bHRzID0geyAuLi5zdGF0ZS5yZXN1bHRzIH07XG4gICAgICAgIGRlbGV0ZSByZXN1bHRzW2FjdGlvbi5tZXRhLmtleV07XG4gICAgICAgIGNvbnN0IG1ldGEgPSB7XG4gICAgICAgICAgLi4uc3RhdGUubWV0YVthY3Rpb24ubWV0YS5rZXldLFxuICAgICAgICAgIGV4cGlyZXNBdDogMCxcbiAgICAgICAgICBpbnZhbGlkYXRlZDogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgZGVsZXRlIG1ldGEuZXJyb3I7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICByZXN1bHRzLFxuICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLm1ldGEsXG4gICAgICAgICAgICBbYWN0aW9uLm1ldGEua2V5XTogbWV0YSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY2FzZSBSRVNFVF9UWVBFOlxuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgIGFjdGlvbi5kYXRlID09PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYCR7UkVTRVRfVFlQRX0gc2VudCB3aXRob3V0ICdkYXRlJyBtZW1iZXIuIFRoaXMgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBjcmVhdGVSZXNldCgpIGFjdGlvbiBjcmVhdG9yIHRvIGVuc3VyZSBjb3JyZWN0IGFjdGlvbiBzaGFwZS5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgLi4uaW5pdGlhbFN0YXRlLCBsYXN0UmVzZXQ6IGFjdGlvbi5kYXRlID8/IERhdGUubm93KCkgfTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gQSByZWR1Y2VyIG11c3QgYWx3YXlzIHJldHVybiBhIHZhbGlkIHN0YXRlLlxuICAgICAgICAvLyBBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gdGhyb3cgYW4gZXJyb3IgaWYgYW4gaW52YWxpZCBhY3Rpb24gaXMgZGlzcGF0Y2hlZC5cbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgfTtcbn1cblxudHlwZSBXcml0YWJsZTxUPiA9IHsgW1AgaW4ga2V5b2YgVF06IE5vbk51bGxhYmxlPFdyaXRhYmxlPFRbUF0+PiB9O1xuXG5mdW5jdGlvbiByZWR1Y2VFcnJvcihcbiAgc3RhdGU6IFN0YXRlPHVua25vd24+LFxuICBhY3Rpb246IFJlY2VpdmVBY3Rpb24gfCBPcHRpbWlzdGljQWN0aW9uLFxuICBlcnJvcjogYW55LFxuKTogU3RhdGU8dW5rbm93bj4ge1xuICBpZiAoZXJyb3IubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgLy8gSW4gY2FzZSB3ZSBhYm9ydCBzaW1wbHkgdW5kbyB0aGUgb3B0aW1pc3RpYyB1cGRhdGUgYW5kIGFjdCBsaWtlIG5vIGZldGNoIGV2ZW4gb2NjdXJlZFxuICAgIC8vIFdlIHN0aWxsIHdhbnQgdGhvc2Ugd2F0Y2hpbmcgcHJvbWlzZXMgZnJvbSBmZXRjaCBkaXJlY3RseSB0byBvYnNlcnZlZCB0aGUgYWJvcnQsIGJ1dCB3ZSBkb24ndCB3YW50IHRvXG4gICAgLy8gVHJpZ2dlciBlcnJvcnMgaW4gdGhpcyBjYXNlLiBUaGlzIG1lYW5zIHRoZW9yZXRpY2FsbHkgaW1wcm9wZXJseSBidWlsdCBhYm9ydGVzIHVzZVJlc291cmNlKCkgY291bGQgc3VzcGVuZCBmb3JldmVyLlxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG9wdGltaXN0aWM6IGZpbHRlck9wdGltaXN0aWMoc3RhdGUsIGFjdGlvbiksXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIG1ldGE6IHtcbiAgICAgIC4uLnN0YXRlLm1ldGEsXG4gICAgICBbYWN0aW9uLm1ldGEua2V5XToge1xuICAgICAgICBkYXRlOiBhY3Rpb24ubWV0YS5kYXRlLFxuICAgICAgICBlcnJvcixcbiAgICAgICAgZXhwaXJlc0F0OiBhY3Rpb24ubWV0YS5leHBpcmVzQXQsXG4gICAgICAgIGVycm9yUG9saWN5OiBhY3Rpb24ubWV0YS5lcnJvclBvbGljeT8uKGVycm9yKSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBvcHRpbWlzdGljOiBmaWx0ZXJPcHRpbWlzdGljKHN0YXRlLCBhY3Rpb24pLFxuICB9O1xufVxuXG4vKiogRmlsdGVyIGFsbCByZXF1ZXN0cyB3aXRoIHNhbWUgc2VyaWFsaXphdGlvbiB0aGF0IGRpZCBub3Qgc3RhcnQgYWZ0ZXIgdGhlIHJlc29sdmluZyByZXF1ZXN0ICovXG5mdW5jdGlvbiBmaWx0ZXJPcHRpbWlzdGljKFxuICBzdGF0ZTogU3RhdGU8dW5rbm93bj4sXG4gIHJlc29sdmluZ0FjdGlvbjogUmVjZWl2ZUFjdGlvbiB8IE9wdGltaXN0aWNBY3Rpb24sXG4pIHtcbiAgcmV0dXJuIHN0YXRlLm9wdGltaXN0aWMuZmlsdGVyKFxuICAgIG9wdGltaXN0aWNBY3Rpb24gPT5cbiAgICAgIG9wdGltaXN0aWNBY3Rpb24ubWV0YS5rZXkgIT09IHJlc29sdmluZ0FjdGlvbi5tZXRhLmtleSB8fFxuICAgICAgKG9wdGltaXN0aWNBY3Rpb24udHlwZSA9PT0gT1BUSU1JU1RJQ19UWVBFXG4gICAgICAgID8gb3B0aW1pc3RpY0FjdGlvbi5tZXRhLmZldGNoZWRBdCAhPT0gcmVzb2x2aW5nQWN0aW9uLm1ldGEuZmV0Y2hlZEF0XG4gICAgICAgIDogb3B0aW1pc3RpY0FjdGlvbi5tZXRhLmRhdGUgPiByZXNvbHZpbmdBY3Rpb24ubWV0YS5kYXRlKSxcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsU0FBVCxRQUEwQix1QkFBMUI7QUFDQSxTQUFTQyxlQUFULFFBQWdDLHNCQUFoQztBQVFBLE9BQU9DLGdCQUFQLE1BQTZCLG1DQUE3QjtBQUNBLFNBQVNDLGFBQWEsSUFBSUMsbUJBQTFCLFFBQXFELG9CQUFyRDtBQUNBLFNBQ0VDLFlBREYsRUFFRUMsZUFGRixFQUdFQyxVQUhGLEVBSUVDLFVBSkYsRUFLRUMsT0FMRixFQU1FQyxlQU5GLFFBT08sbUJBUFA7QUFRQSxPQUFPQyxzQkFBUCxNQUFtQyw2QkFBbkM7QUFHQSxPQUFPLE1BQU1DLFlBQTRCLEdBQUc7RUFDMUNDLFFBQVEsRUFBRSxFQURnQztFQUUxQ0MsT0FBTyxFQUFFLEVBRmlDO0VBRzFDQyxPQUFPLEVBQUUsRUFIaUM7RUFJMUNDLElBQUksRUFBRSxFQUpvQztFQUsxQ0MsVUFBVSxFQUFFLEVBTDhCO0VBTTFDQyxVQUFVLEVBQUUsRUFOOEI7RUFPMUNDLFNBQVMsRUFBRTtBQVArQixDQUFyQztBQVVQLGVBQWUsU0FBU0MsYUFBVCxDQUF1QkMsVUFBdkIsRUFBK0M7RUFD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","import { OPTIMISTIC_TYPE } from '../actionTypes.js';\nexport default function createOptimistic(endpoint, {\n args,\n fetchedAt\n}) {\n var _endpoint$dataExpiryL;\n\n const expiryLength = (_endpoint$dataExpiryL = endpoint.dataExpiryLength) != null ? _endpoint$dataExpiryL : 60000;\n /* istanbul ignore next */\n\n if (process.env.NODE_ENV === 'development' && expiryLength < 0) {\n throw new Error('Negative expiry length are not allowed.');\n }\n\n const now = Date.now();\n const meta = {\n args,\n fetchedAt,\n date: now,\n expiresAt: now + expiryLength,\n // For legacy support; TODO: remove\n schema: endpoint.schema,\n key: endpoint.key(...args)\n }; // For legacy support; TODO: remove\n\n if (endpoint.update) meta.update = endpoint.update;\n if (endpoint.errorPolicy) meta.errorPolicy = endpoint.errorPolicy;\n const action = {\n type: OPTIMISTIC_TYPE,\n endpoint,\n meta\n };\n return action;\n}\n/** Future action shape\n{\n type: OPTIMISTIC_TYPE,\n endpoint,\n meta: {\n args,\n date,\n expiresAt,\n fetchedAt,\n },\n error?: true,\n} */\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPUFRJTUlTVElDX1RZUEUiLCJjcmVhdGVPcHRpbWlzdGljIiwiZW5kcG9pbnQiLCJhcmdzIiwiZmV0Y2hlZEF0IiwiZXhwaXJ5TGVuZ3RoIiwiZGF0YUV4cGlyeUxlbmd0aCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIkVycm9yIiwibm93IiwiRGF0ZSIsIm1ldGEiLCJkYXRlIiwiZXhwaXJlc0F0Iiwic2NoZW1hIiwia2V5IiwidXBkYXRlIiwiZXJyb3JQb2xpY3kiLCJhY3Rpb24iLCJ0eXBlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyb2xsZXIvY3JlYXRlT3B0aW1pc3RpYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVuZHBvaW50SW50ZXJmYWNlIH0gZnJvbSAnQHJlc3QtaG9va3MvZW5kcG9pbnQnO1xuXG5pbXBvcnQgeyBPUFRJTUlTVElDX1RZUEUgfSBmcm9tICcuLi9hY3Rpb25UeXBlcy5qcyc7XG5pbXBvcnQgeyBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBPcHRpbWlzdGljQWN0aW9uIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVPcHRpbWlzdGljPFxuICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPjtcbiAgfSxcbj4oXG4gIGVuZHBvaW50OiBFLFxuICB7XG4gICAgYXJncyxcbiAgICBmZXRjaGVkQXQsXG4gIH06IHtcbiAgICBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl07XG4gICAgZmV0Y2hlZEF0OiBudW1iZXI7XG4gIH0sXG4pOiBPcHRpbWlzdGljQWN0aW9uPEU+IHtcbiAgY29uc3QgZXhwaXJ5TGVuZ3RoOiBudW1iZXIgPSBlbmRwb2ludC5kYXRhRXhwaXJ5TGVuZ3RoID8/IDYwMDAwO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcgJiYgZXhwaXJ5TGVuZ3RoIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTmVnYXRpdmUgZXhwaXJ5IGxlbmd0aCBhcmUgbm90IGFsbG93ZWQuJyk7XG4gIH1cbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgbWV0YTogT3B0aW1pc3RpY0FjdGlvblsnbWV0YSddID0ge1xuICAgIGFyZ3MsXG4gICAgZmV0Y2hlZEF0LFxuICAgIGRhdGU6IG5vdyxcbiAgICBleHBpcmVzQXQ6IG5vdyArIGV4cGlyeUxlbmd0aCxcbiAgICAvLyBGb3IgbGVnYWN5IHN1cHBvcnQ7IFRPRE86IHJlbW92ZVxuICAgIHNjaGVtYTogZW5kcG9pbnQuc2NoZW1hLFxuICAgIGtleTogZW5kcG9pbnQua2V5KC4uLmFyZ3MpLFxuICB9O1xuICAvLyBGb3IgbGVnYWN5IHN1cHBvcnQ7IFRPRE86IHJlbW92ZVxuICBpZiAoZW5kcG9pbnQudXBkYXRlKSBtZXRhLnVwZGF0ZSA9IGVuZHBvaW50LnVwZGF0ZTtcbiAgaWYgKGVuZHBvaW50LmVycm9yUG9saWN5KSBtZXRhLmVycm9yUG9saWN5ID0gZW5kcG9pbnQuZXJyb3JQb2xpY3k7XG5cbiAgY29uc3QgYWN0aW9uOiBPcHRpbWlzdGljQWN0aW9uPEU+ID0ge1xuICAgIHR5cGU6IE9QVElNSVNUSUNfVFlQRSxcbiAgICBlbmRwb2ludCxcbiAgICBtZXRhLFxuICB9O1xuICByZXR1cm4gYWN0aW9uO1xufVxuXG4vKiogRnV0dXJlIGFjdGlvbiBzaGFwZVxue1xuICB0eXBlOiBPUFRJTUlTVElDX1RZUEUsXG4gIGVuZHBvaW50LFxuICBtZXRhOiB7XG4gICAgYXJncyxcbiAgICBkYXRlLFxuICAgIGV4cGlyZXNBdCxcbiAgICBmZXRjaGVkQXQsXG4gIH0sXG4gIGVycm9yPzogdHJ1ZSxcbn0gKi9cbiJdLCJtYXBwaW5ncyI6IkFBRUEsU0FBU0EsZUFBVCxRQUFnQyxtQkFBaEM7QUFJQSxlQUFlLFNBQVNDLGdCQUFULENBS2JDLFFBTGEsRUFNYjtFQUNFQyxJQURGO0VBRUVDO0FBRkYsQ0FOYSxFQWFRO0VBQUE7O0VBQ3JCLE1BQU1DLFlBQW9CLDRCQUFHSCxRQUFRLENBQUNJLGdCQUFaLG9DQUFnQyxLQUExRDtFQUNBOztFQUNBLElBQUlDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxRQUFaLEtBQXlCLGFBQXpCLElBQTBDSixZQUFZLEdBQUcsQ0FBN0QsRUFBZ0U7SUFDOUQsTUFBTSxJQUFJSyxLQUFKLENBQVUseUNBQVYsQ0FBTjtFQUNEOztFQUNELE1BQU1DLEdBQUcsR0FBR0MsSUFBSSxDQUFDRCxHQUFMLEVBQVo7RUFDQSxNQUFNRSxJQUE4QixHQUFHO0lBQ3JDVixJQURxQztJQUVyQ0MsU0FGcUM7SUFHckNVLElBQUksRUFBRUgsR0FIK0I7SUFJckNJLFNBQVMsRUFBRUosR0FBRyxHQUFHTixZQUpvQjtJQUtyQztJQUNBVyxNQUFNLEVBQUVkLFFBQVEsQ0FBQ2MsTUFOb0I7SUFPckNDLEdBQUcsRUFBRWYsUUFBUSxDQUFDZSxHQUFULENBQWEsR0FBR2QsSUFBaEI7RUFQZ0MsQ0FBdkMsQ0FQcUIsQ0FnQnJCOztFQUNBLElBQUlELFFBQVEsQ0FBQ2dCLE1BQWIsRUFBcUJMLElBQUksQ0FBQ0ssTUFBTCxHQUFjaEIsUUFBUSxDQUFDZ0IsTUFBdkI7RUFDckIsSUFBSWhCLFFBQVEsQ0FBQ2lCLFdBQWIsRUFBMEJOLElBQUksQ0FBQ00sV0FBTCxHQUFtQmpCLFFBQVEsQ0FBQ2lCLFdBQTVCO0VBRTFCLE1BQU1DLE1BQTJCLEdBQUc7SUFDbENDLElBQUksRUFBRXJCLGVBRDRCO0lBRWxDRSxRQUZrQztJQUdsQ1c7RUFIa0MsQ0FBcEM7RUFLQSxPQUFPTyxNQUFQO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EifQ==","export default function applyUpdatersToResults(results, result, updaters) {\n return { ...results,\n ...Object.fromEntries(Object.entries(updaters).map(([fetchKey, updater]) => [fetchKey, updater(result, results[fetchKey])]))\n };\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcHBseVVwZGF0ZXJzVG9SZXN1bHRzIiwicmVzdWx0cyIsInJlc3VsdCIsInVwZGF0ZXJzIiwiT2JqZWN0IiwiZnJvbUVudHJpZXMiLCJlbnRyaWVzIiwibWFwIiwiZmV0Y2hLZXkiLCJ1cGRhdGVyIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0YXRlL2FwcGx5VXBkYXRlcnNUb1Jlc3VsdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTY2hlbWEgfSBmcm9tICdAcmVzdC1ob29rcy9lbmRwb2ludCc7XG5pbXBvcnQgeyBOb3JtYWxpemUsIFVwZGF0ZUZ1bmN0aW9uIH0gZnJvbSAnQHJlc3QtaG9va3MvZW5kcG9pbnQnO1xuXG50eXBlIFJlc3VsdFN0YXRlRnJvbVVwZGF0ZUZ1bmN0aW9uczxcbiAgU291cmNlU2NoZW1hIGV4dGVuZHMgU2NoZW1hLFxuICBVcGRhdGVGdW5jdGlvbnMgZXh0ZW5kcyB7XG4gICAgW2tleTogc3RyaW5nXTogVXBkYXRlRnVuY3Rpb248U291cmNlU2NoZW1hLCBhbnk+O1xuICB9LFxuPiA9IHsgW0sgaW4ga2V5b2YgVXBkYXRlRnVuY3Rpb25zXTogYW55IH07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFwcGx5VXBkYXRlcnNUb1Jlc3VsdHM8XG4gIFNvdXJjZVNjaGVtYSBleHRlbmRzIFNjaGVtYSxcbiAgVXBkYXRlRnVuY3Rpb25zIGV4dGVuZHMge1xuICAgIFtrZXk6IHN0cmluZ106IFVwZGF0ZUZ1bmN0aW9uPFNvdXJjZVNjaGVtYSwgYW55PjtcbiAgfSxcbj4oXG4gIHJlc3VsdHM6IFJlc3VsdFN0YXRlRnJvbVVwZGF0ZUZ1bmN0aW9uczxTb3VyY2VTY2hlbWEsIFVwZGF0ZUZ1bmN0aW9ucz4sXG4gIHJlc3VsdDogTm9ybWFsaXplPFNvdXJjZVNjaGVtYT4sXG4gIHVwZGF0ZXJzOiBVcGRhdGVGdW5jdGlvbnMsXG4pIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5yZXN1bHRzLFxuICAgIC4uLk9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKHVwZGF0ZXJzKS5tYXAoKFtmZXRjaEtleSwgdXBkYXRlcl0pID0+IFtcbiAgICAgICAgZmV0Y2hLZXksXG4gICAgICAgIHVwZGF0ZXIocmVzdWx0LCByZXN1bHRzW2ZldGNoS2V5XSksXG4gICAgICBdKSxcbiAgICApLFxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFVQSxlQUFlLFNBQVNBLHNCQUFULENBTWJDLE9BTmEsRUFPYkMsTUFQYSxFQVFiQyxRQVJhLEVBU2I7RUFDQSxPQUFPLEVBQ0wsR0FBR0YsT0FERTtJQUVMLEdBQUdHLE1BQU0sQ0FBQ0MsV0FBUCxDQUNERCxNQUFNLENBQUNFLE9BQVAsQ0FBZUgsUUFBZixFQUF5QkksR0FBekIsQ0FBNkIsQ0FBQyxDQUFDQyxRQUFELEVBQVdDLE9BQVgsQ0FBRCxLQUF5QixDQUNwREQsUUFEb0QsRUFFcERDLE9BQU8sQ0FBQ1AsTUFBRCxFQUFTRCxPQUFPLENBQUNPLFFBQUQsQ0FBaEIsQ0FGNkMsQ0FBdEQsQ0FEQztFQUZFLENBQVA7QUFTRCJ9","export var ExpiryStatus = {\n Invalid: 1,\n InvalidIfStale: 2,\n Valid: 3\n}; // looser version to allow for cross-package version compatibility\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFeHBpcnlTdGF0dXMiXSwic291cmNlcyI6WyIuLi9zcmMvRXhwaXJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBlbnVtIEV4cGlyeVN0YXR1cyB7XG4gIEludmFsaWQgPSAxLFxuICBJbnZhbGlkSWZTdGFsZSxcbiAgVmFsaWQsXG59XG4vLyBsb29zZXIgdmVyc2lvbiB0byBhbGxvdyBmb3IgY3Jvc3MtcGFja2FnZSB2ZXJzaW9uIGNvbXBhdGliaWxpdHlcbmV4cG9ydCB0eXBlIEV4cGlyeVN0YXR1c0ludGVyZmFjZSA9IDEgfCAyIHwgMztcbiJdLCJtYXBwaW5ncyI6IkFBQUEsV0FBa0JBLFlBQWxCO0VBQUE7RUFBQTtFQUFBO0FBQUEsRSxDQUtBIn0=","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { isImmutable, denormalizeImmutable } from '../schemas/ImmutableUtils.js';\n/**\n * Represents data that should be deduped by specifying a primary key.\n * @see https://resthooks.io/docs/api/Entity\n */\n\nexport default class Entity {\n static toJSON() {\n return {\n name: this.name,\n schema: this.schema,\n key: this.key\n };\n }\n /** Defines nested entities */\n\n\n /** Returns the globally unique identifier for the static Entity */\n static get key() {\n /* istanbul ignore next */\n if (process.env.NODE_ENV !== 'production' && (this.name === '' || this.name === 'Entity' || this.name === '_temp')) throw new Error('Entity classes without a name must define `static get key()`');\n return this.name;\n }\n /** Defines indexes to enable lookup by */\n\n\n /**\n * A unique identifier for each Entity\n *\n * @param [value] POJO of the entity or subset used\n * @param [parent] When normalizing, the object which included the entity\n * @param [key] When normalizing, the key where this entity was found\n */\n static pk(value, parent, key) {\n return this.prototype.pk.call(value, parent, key);\n }\n /** Return true to merge incoming data; false keeps existing entity */\n\n\n static useIncoming(existingMeta, incomingMeta, existing, incoming) {\n return existingMeta.fetchedAt <= incomingMeta.fetchedAt;\n }\n /** Creates new instance copying over defined values of arguments */\n\n\n static merge(existing, incoming) {\n return { ...existing,\n ...incoming\n };\n }\n /** Factory method to convert from Plain JS Objects.\n *\n * @param [props] Plain Object of properties to assign.\n * @param [parent] When normalizing, the object which included the record\n * @param [key] When normalizing, the key where this record was found\n */\n\n\n static fromJS( // TODO: this should only accept members that are not functions\n props = {}) {\n // we type guarded abstract case above, so ok to force typescript to allow constructor call\n const instance = new this(props); // we can't rely on constructors and override the defaults provided as property assignments\n // all occur after the constructor\n\n Object.assign(instance, props);\n return instance;\n }\n /** Do any transformations when first receiving input */\n\n\n static process(input, parent, key) {\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production' && this.automaticValidation !== 'silent') {\n if (Array.isArray(input)) {\n const errorMessage = `Attempted to initialize ${this.name} with an array, but named members were expected\n\nThis is likely due to a malformed response.\nTry inspecting the network response or fetch() return value.\nOr use debugging tools: https://resthooks.io/docs/guides/debugging\nLearn more about schemas: https://resthooks.io/docs/api/schema\nIf this is a mistake, you can disable this check by setting static automaticValidation = 'silent'\n\nFirst three members: ${JSON.stringify(input.slice(0, 3), null, 2)}`;\n\n if (this.automaticValidation !== 'warn') {\n const error = new Error(errorMessage);\n error.status = 400;\n throw error;\n }\n\n console.warn(errorMessage);\n }\n }\n\n return { ...input\n };\n }\n\n static normalize(input, parent, key, visit, addEntity, visitedEntities) {\n const processedEntity = this.process(input, parent, key);\n const id = this.pk(processedEntity, parent, key);\n\n if (id === undefined || id === '') {\n if (process.env.NODE_ENV !== 'production') {\n const error = new Error(`Missing usable primary key when normalizing response.\n\n This is likely due to a malformed response.\n Try inspecting the network response or fetch() return value.\n Or use debugging tools: https://resthooks.io/docs/guides/debugging\n Learn more about schemas: https://resthooks.io/docs/api/schema\n\n Entity: ${this.name}\n Value (processed): ${processedEntity && JSON.stringify(processedEntity, null, 2)}\n `);\n error.status = 400;\n throw error;\n } else {\n // these make the keys get deleted\n return undefined;\n }\n }\n\n const entityType = this.key;\n\n if (!(entityType in visitedEntities)) {\n visitedEntities[entityType] = {};\n }\n\n if (!(id in visitedEntities[entityType])) {\n visitedEntities[entityType][id] = [];\n }\n\n if (visitedEntities[entityType][id].some(entity => entity === input)) {\n return id;\n }\n\n const errorMessage = this.validate(processedEntity);\n\n if (errorMessage) {\n const error = new Error(errorMessage);\n error.status = 400;\n throw error;\n }\n\n visitedEntities[entityType][id].push(input);\n Object.keys(this.schema).forEach(key => {\n if (Object.prototype.hasOwnProperty.call(processedEntity, key)) {\n const schema = this.schema[key];\n processedEntity[key] = visit(processedEntity[key], processedEntity, key, schema, addEntity, visitedEntities);\n }\n });\n addEntity(this, processedEntity, id);\n return id;\n }\n\n static validate(processedEntity) {\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production' && this.automaticValidation !== 'silent') {\n const keysOfRecord = new Set(Object.keys(this.defaults));\n const keysOfProps = Object.keys(processedEntity);\n const [found, missing, unexpected] = [[], [], []];\n\n for (const keyOfProps of keysOfProps) {\n if (keysOfRecord.has(keyOfProps)) {\n found.push(keyOfProps);\n } else {\n unexpected.push(keyOfProps);\n }\n }\n\n for (const keyOfRecord of keysOfRecord) {\n if (!found.includes(keyOfRecord)) {\n missing.push(keyOfRecord);\n }\n } // only bother with this if they used *any* defaults\n\n\n if (keysOfRecord.size) {\n const tooManyUnexpected = // unexpected compared to members in response\n Math.max(keysOfProps.length / 2, 1) <= unexpected.length && // unexpected compared to what we specified\n keysOfRecord.size > Math.max(unexpected.length, 2) && // as we find more and more be more easily assured it is correct\n found.length ** 1.5 / 2 <= unexpected.length;\n const foundNothing = found.length < Math.min(1, keysOfRecord.size / 2); // if we find nothing (we expect at least one member for a pk)\n // or we find too many unexpected members\n\n if (tooManyUnexpected || foundNothing) {\n let extra = '';\n let reason = 'substantially different than expected keys';\n\n if (foundNothing) {\n extra += `\\n Missing: ${missing}`;\n reason = 'no matching keys found';\n }\n\n if (tooManyUnexpected) {\n extra += `\\n Unexpected keys: ${unexpected}`;\n reason = 'a large number of unexpected keys found';\n }\n\n const errorMessage = `Attempted to initialize ${this.name} with ${reason}\n\n This is likely due to a malformed response.\n Try inspecting the network response or fetch() return value.\n Or use debugging tools: https://resthooks.io/docs/guides/debugging\n Learn more about schemas: https://resthooks.io/docs/api/schema\n If this is a mistake, you can disable this check by setting static automaticValidation = 'silent'\n\n Expected keys:\n Found: ${found}${extra}\n Value (processed): ${JSON.stringify(processedEntity, null, 2)}`;\n\n if (found.length >= 4 && tooManyUnexpected || this.automaticValidation === 'warn') {\n console.warn(errorMessage);\n } else {\n return errorMessage;\n }\n }\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n for (const key of Object.keys(this.schema)) {\n if (!Object.prototype.hasOwnProperty.call(processedEntity, key)) {\n if (!Object.prototype.hasOwnProperty.call(this.defaults, key)) {\n return `Schema key is missing in Entity\n\n Be sure all schema members are also part of the entity\n Or use debugging tools: https://resthooks.io/docs/guides/debugging\n Learn more about nesting schemas: https://resthooks.io/docs/guides/nested-response\n\n Entity keys: ${Object.keys(this.defaults)}\n Schema key(missing): ${key}\n `;\n }\n }\n }\n }\n }\n\n static infer(args, indexes, recurse) {\n if (!args[0]) return undefined;\n const id = this.pk(args[0], undefined, ''); // Was able to infer the entity's primary key from params\n\n if (id !== undefined && id !== '') return id; // now attempt lookup in indexes\n\n const indexName = indexFromParams(args[0], this.indexes);\n\n if (indexName && indexes[this.key]) {\n // 'as Record': indexName can only be found if params is a string key'd object\n const id = indexes[this.key][indexName][args[0][indexName]];\n return id;\n }\n\n return undefined;\n }\n\n static expiresAt(meta, input) {\n return meta.expiresAt;\n }\n\n static denormalize(input, unvisit) {\n if (isImmutable(input)) {\n if (this.validate(input.toJS())) return [undefined, false, true]; // Need to set this first so that if it is referenced further within the\n // denormalization the reference will already exist.\n\n unvisit.setLocal == null ? void 0 : unvisit.setLocal(input);\n const [denormEntity, found, deleted] = denormalizeImmutable(this.schema, input, unvisit);\n return [this.fromJS(denormEntity.toObject()), found, deleted];\n }\n\n if (this.validate(input)) {\n return [undefined, false, true];\n }\n\n const entityCopy = this.fromJS(input); // Need to set this first so that if it is referenced further within the\n // denormalization the reference will already exist.\n\n unvisit.setLocal == null ? void 0 : unvisit.setLocal(entityCopy);\n let deleted = false; // note: iteration order must be stable\n\n Object.keys(this.schema).forEach(key => {\n const schema = this.schema[key];\n const nextInput = Object.prototype.hasOwnProperty.call(input, key) ? input[key] : undefined;\n const [value,, deletedItem] = unvisit(nextInput, schema);\n\n if (deletedItem && !(Object.prototype.hasOwnProperty.call(input, key) && !this.defaults[key])) {\n deleted = true;\n }\n\n if (Object.prototype.hasOwnProperty.call(input, key) && input[key] !== value) {\n this.set(entityCopy, key, value);\n }\n });\n return [entityCopy, true, deleted];\n }\n\n /** All instance defaults set */\n static get defaults() {\n if (!Object.prototype.hasOwnProperty.call(this, '__defaults')) this.__defaults = new this();\n return this.__defaults;\n }\n /** Used by denormalize to set nested members */\n\n\n static set(entity, key, value) {\n entity[key] = value;\n }\n\n}\n/* istanbul ignore else */\n\nEntity.schema = {};\n\nif (process.env.NODE_ENV !== 'production') {\n const superFrom = Entity.fromJS; // for those not using TypeScript this is a good catch to ensure they are defining\n // the abstract members\n\n Entity.fromJS = function fromJS(props) {\n if (this.prototype.pk === undefined) throw new Error('cannot construct on abstract types');\n return superFrom.call(this, props);\n };\n}\n\nexport function isEntity(schema) {\n return schema !== null && schema.pk !== undefined;\n}\n\nfunction indexFromParams(params, indexes) {\n if (!indexes) return undefined;\n return indexes.find(index => Object.prototype.hasOwnProperty.call(params, index));\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0ltbXV0YWJsZSIsImRlbm9ybWFsaXplSW1tdXRhYmxlIiwiRW50aXR5IiwidG9KU09OIiwibmFtZSIsInNjaGVtYSIsImtleSIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIkVycm9yIiwicGsiLCJ2YWx1ZSIsInBhcmVudCIsInByb3RvdHlwZSIsImNhbGwiLCJ1c2VJbmNvbWluZyIsImV4aXN0aW5nTWV0YSIsImluY29taW5nTWV0YSIsImV4aXN0aW5nIiwiaW5jb21pbmciLCJmZXRjaGVkQXQiLCJtZXJnZSIsImZyb21KUyIsInByb3BzIiwiaW5zdGFuY2UiLCJPYmplY3QiLCJhc3NpZ24iLCJpbnB1dCIsImF1dG9tYXRpY1ZhbGlkYXRpb24iLCJBcnJheSIsImlzQXJyYXkiLCJlcnJvck1lc3NhZ2UiLCJKU09OIiwic3RyaW5naWZ5Iiwic2xpY2UiLCJlcnJvciIsInN0YXR1cyIsImNvbnNvbGUiLCJ3YXJuIiwibm9ybWFsaXplIiwidmlzaXQiLCJhZGRFbnRpdHkiLCJ2aXNpdGVkRW50aXRpZXMiLCJwcm9jZXNzZWRFbnRpdHkiLCJpZCIsInVuZGVmaW5lZCIsImVudGl0eVR5cGUiLCJzb21lIiwiZW50aXR5IiwidmFsaWRhdGUiLCJwdXNoIiwia2V5cyIsImZvckVhY2giLCJoYXNPd25Qcm9wZXJ0eSIsImtleXNPZlJlY29yZCIsIlNldCIsImRlZmF1bHRzIiwia2V5c09mUHJvcHMiLCJmb3VuZCIsIm1pc3NpbmciLCJ1bmV4cGVjdGVkIiwia2V5T2ZQcm9wcyIsImhhcyIsImtleU9mUmVjb3JkIiwiaW5jbHVkZXMiLCJzaXplIiwidG9vTWFueVVuZXhwZWN0ZWQiLCJNYXRoIiwibWF4IiwibGVuZ3RoIiwiZm91bmROb3RoaW5nIiwibWluIiwiZXh0cmEiLCJyZWFzb24iLCJpbmZlciIsImFyZ3MiLCJpbmRleGVzIiwicmVjdXJzZSIsImluZGV4TmFtZSIsImluZGV4RnJvbVBhcmFtcyIsImV4cGlyZXNBdCIsIm1ldGEiLCJkZW5vcm1hbGl6ZSIsInVudmlzaXQiLCJ0b0pTIiwic2V0TG9jYWwiLCJkZW5vcm1FbnRpdHkiLCJkZWxldGVkIiwidG9PYmplY3QiLCJlbnRpdHlDb3B5IiwibmV4dElucHV0IiwiZGVsZXRlZEl0ZW0iLCJzZXQiLCJfX2RlZmF1bHRzIiwic3VwZXJGcm9tIiwiaXNFbnRpdHkiLCJwYXJhbXMiLCJmaW5kIiwiaW5kZXgiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZW50aXRpZXMvRW50aXR5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXMgKi9cbmltcG9ydCAqIGFzIHNjaGVtYSBmcm9tICcuLi9zY2hlbWEuanMnO1xuaW1wb3J0IHsgQWJzdHJhY3RJbnN0YW5jZVR5cGUsIFNjaGVtYSwgTm9ybWFsaXplZEluZGV4IH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHtcbiAgaXNJbW11dGFibGUsXG4gIGRlbm9ybWFsaXplSW1tdXRhYmxlLFxufSBmcm9tICcuLi9zY2hlbWFzL0ltbXV0YWJsZVV0aWxzLmpzJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGRhdGEgdGhhdCBzaG91bGQgYmUgZGVkdXBlZCBieSBzcGVjaWZ5aW5nIGEgcHJpbWFyeSBrZXkuXG4gKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0VudGl0eVxuICovXG5leHBvcnQgZGVmYXVsdCBhYnN0cmFjdCBjbGFzcyBFbnRpdHkge1xuICBzdGF0aWMgdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hLFxuICAgICAga2V5OiB0aGlzLmtleSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIERlZmluZXMgbmVzdGVkIGVudGl0aWVzICovXG4gIHN0YXRpYyBzY2hlbWE6IHsgW2s6IHN0cmluZ106IFNjaGVtYSB9ID0ge307XG5cbiAgLyoqXG4gICAqIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGVhY2ggRW50aXR5XG4gICAqXG4gICAqIEBwYXJhbSBbcGFyZW50XSBXaGVuIG5vcm1hbGl6aW5nLCB0aGUgb2JqZWN0IHdoaWNoIGluY2x1ZGVkIHRoZSBlbnRpdHlcbiAgICogQHBhcmFtIFtrZXldIFdoZW4gbm9ybWFsaXppbmcsIHRoZSBrZXkgd2hlcmUgdGhpcyBlbnRpdHkgd2FzIGZvdW5kXG4gICAqL1xuICBhYnN0cmFjdCBwayhwYXJlbnQ/OiBhbnksIGtleT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKiogUmV0dXJucyB0aGUgZ2xvYmFsbHkgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBzdGF0aWMgRW50aXR5ICovXG4gIHN0YXRpYyBnZXQga2V5KCk6IHN0cmluZyB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAodGhpcy5uYW1lID09PSAnJyB8fCB0aGlzLm5hbWUgPT09ICdFbnRpdHknIHx8IHRoaXMubmFtZSA9PT0gJ190ZW1wJylcbiAgICApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdFbnRpdHkgY2xhc3NlcyB3aXRob3V0IGEgbmFtZSBtdXN0IGRlZmluZSBgc3RhdGljIGdldCBrZXkoKWAnLFxuICAgICAgKTtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgLyoqIERlZmluZXMgaW5kZXhlcyB0byBlbmFibGUgbG9va3VwIGJ5ICovXG4gIGRlY2xhcmUgc3RhdGljIGluZGV4ZXM/OiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKiogQ29udHJvbCBob3cgYXV0b21hdGljIHNjaGVtYSB2YWxpZGF0aW9uIGlzIGhhbmRsZWRcbiAgICpcbiAgICogYHVuZGVmaW5lZGA6IERlZmF1bHRzIC0gdGhyb3cgZXJyb3IgaW4gd29yc3Qgb2ZmZW5zZVxuICAgKiAnd2Fybic6IG9ubHkgZXZlciB3YXJuXG4gICAqICdzaWxlbnQnOiBEb24ndCBib3RoZXIgd2l0aCBwcm9jZXNzaW5nIGF0IGFsbFxuICAgKlxuICAgKiBOb3RlOiB0aGlzIG9ubHkgYXBwbGllcyB0byBub24tbmVzdGVkIG1lbWJlcnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgZGVjbGFyZSBzdGF0aWMgYXV0b21hdGljVmFsaWRhdGlvbj86ICd3YXJuJyB8ICdzaWxlbnQnO1xuXG4gIC8qKlxuICAgKiBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciBlYWNoIEVudGl0eVxuICAgKlxuICAgKiBAcGFyYW0gW3ZhbHVlXSBQT0pPIG9mIHRoZSBlbnRpdHkgb3Igc3Vic2V0IHVzZWRcbiAgICogQHBhcmFtIFtwYXJlbnRdIFdoZW4gbm9ybWFsaXppbmcsIHRoZSBvYmplY3Qgd2hpY2ggaW5jbHVkZWQgdGhlIGVudGl0eVxuICAgKiBAcGFyYW0gW2tleV0gV2hlbiBub3JtYWxpemluZywgdGhlIGtleSB3aGVyZSB0aGlzIGVudGl0eSB3YXMgZm91bmRcbiAgICovXG4gIHN0YXRpYyBwazxUIGV4dGVuZHMgdHlwZW9mIEVudGl0eT4oXG4gICAgdGhpczogVCxcbiAgICB2YWx1ZTogUGFydGlhbDxBYnN0cmFjdEluc3RhbmNlVHlwZTxUPj4sXG4gICAgcGFyZW50PzogYW55LFxuICAgIGtleT86IHN0cmluZyxcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcm90b3R5cGUucGsuY2FsbCh2YWx1ZSwgcGFyZW50LCBrZXkpO1xuICB9XG5cbiAgLyoqIFJldHVybiB0cnVlIHRvIG1lcmdlIGluY29taW5nIGRhdGE7IGZhbHNlIGtlZXBzIGV4aXN0aW5nIGVudGl0eSAqL1xuICBzdGF0aWMgdXNlSW5jb21pbmcoXG4gICAgZXhpc3RpbmdNZXRhOiB7IGRhdGU6IG51bWJlcjsgZmV0Y2hlZEF0OiBudW1iZXIgfSxcbiAgICBpbmNvbWluZ01ldGE6IHsgZGF0ZTogbnVtYmVyOyBmZXRjaGVkQXQ6IG51bWJlciB9LFxuICAgIGV4aXN0aW5nOiBhbnksXG4gICAgaW5jb21pbmc6IGFueSxcbiAgKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nTWV0YS5mZXRjaGVkQXQgPD0gaW5jb21pbmdNZXRhLmZldGNoZWRBdDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIG5ldyBpbnN0YW5jZSBjb3B5aW5nIG92ZXIgZGVmaW5lZCB2YWx1ZXMgb2YgYXJndW1lbnRzICovXG4gIHN0YXRpYyBtZXJnZShleGlzdGluZzogYW55LCBpbmNvbWluZzogYW55KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmV4aXN0aW5nLFxuICAgICAgLi4uaW5jb21pbmcsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBGYWN0b3J5IG1ldGhvZCB0byBjb252ZXJ0IGZyb20gUGxhaW4gSlMgT2JqZWN0cy5cbiAgICpcbiAgICogQHBhcmFtIFtwcm9wc10gUGxhaW4gT2JqZWN0IG9mIHByb3BlcnRpZXMgdG8gYXNzaWduLlxuICAgKiBAcGFyYW0gW3BhcmVudF0gV2hlbiBub3JtYWxpemluZywgdGhlIG9iamVjdCB3aGljaCBpbmNsdWRlZCB0aGUgcmVjb3JkXG4gICAqIEBwYXJhbSBba2V5XSBXaGVuIG5vcm1hbGl6aW5nLCB0aGUga2V5IHdoZXJlIHRoaXMgcmVjb3JkIHdhcyBmb3VuZFxuICAgKi9cbiAgc3RhdGljIGZyb21KUzxUIGV4dGVuZHMgdHlwZW9mIEVudGl0eT4oXG4gICAgdGhpczogVCxcbiAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBvbmx5IGFjY2VwdCBtZW1iZXJzIHRoYXQgYXJlIG5vdCBmdW5jdGlvbnNcbiAgICBwcm9wczogUGFydGlhbDxBYnN0cmFjdEluc3RhbmNlVHlwZTxUPj4gPSB7fSxcbiAgKTogQWJzdHJhY3RJbnN0YW5jZVR5cGU8VD4ge1xuICAgIC8vIHdlIHR5cGUgZ3VhcmRlZCBhYnN0cmFjdCBjYXNlIGFib3ZlLCBzbyBvayB0byBmb3JjZSB0eXBlc2NyaXB0IHRvIGFsbG93IGNvbnN0cnVjdG9yIGNhbGxcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyAodGhpcyBhcyBhbnkpKHByb3BzKSBhcyBBYnN0cmFjdEluc3RhbmNlVHlwZTxUPjtcbiAgICAvLyB3ZSBjYW4ndCByZWx5IG9uIGNvbnN0cnVjdG9ycyBhbmQgb3ZlcnJpZGUgdGhlIGRlZmF1bHRzIHByb3ZpZGVkIGFzIHByb3BlcnR5IGFzc2lnbm1lbnRzXG4gICAgLy8gYWxsIG9jY3VyIGFmdGVyIHRoZSBjb25zdHJ1Y3RvclxuICAgIE9iamVjdC5hc3NpZ24oaW5zdGFuY2UsIHByb3BzKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKiogRG8gYW55IHRyYW5zZm9ybWF0aW9ucyB3aGVuIGZpcnN0IHJlY2VpdmluZyBpbnB1dCAqL1xuICBzdGF0aWMgcHJvY2VzcyhpbnB1dDogYW55LCBwYXJlbnQ6IGFueSwga2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBhbnkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKFxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgdGhpcy5hdXRvbWF0aWNWYWxpZGF0aW9uICE9PSAnc2lsZW50J1xuICAgICkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBBdHRlbXB0ZWQgdG8gaW5pdGlhbGl6ZSAke1xuICAgICAgICAgIHRoaXMubmFtZVxuICAgICAgICB9IHdpdGggYW4gYXJyYXksIGJ1dCBuYW1lZCBtZW1iZXJzIHdlcmUgZXhwZWN0ZWRcblxuVGhpcyBpcyBsaWtlbHkgZHVlIHRvIGEgbWFsZm9ybWVkIHJlc3BvbnNlLlxuVHJ5IGluc3BlY3RpbmcgdGhlIG5ldHdvcmsgcmVzcG9uc2Ugb3IgZmV0Y2goKSByZXR1cm4gdmFsdWUuXG5PciB1c2UgZGVidWdnaW5nIHRvb2xzOiBodHRwczovL3Jlc3Rob29rcy5pby9kb2NzL2d1aWRlcy9kZWJ1Z2dpbmdcbkxlYXJuIG1vcmUgYWJvdXQgc2NoZW1hczogaHR0cHM6Ly9yZXN0aG9va3MuaW8vZG9jcy9hcGkvc2NoZW1hXG5JZiB0aGlzIGlzIGEgbWlzdGFrZSwgeW91IGNhbiBkaXNhYmxlIHRoaXMgY2hlY2sgYnkgc2V0dGluZyBzdGF0aWMgYXV0b21hdGljVmFsaWRhdGlvbiA9ICdzaWxlbnQnXG5cbkZpcnN0IHRocmVlIG1lbWJlcnM6ICR7SlNPTi5zdHJpbmdpZnkoaW5wdXQuc2xpY2UoMCwgMyksIG51bGwsIDIpfWA7XG4gICAgICAgIGlmICh0aGlzLmF1dG9tYXRpY1ZhbGlkYXRpb24gIT09ICd3YXJuJykge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgKGVycm9yIGFzIGFueSkuc3RhdHVzID0gNDAwO1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUud2FybihlcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IC4uLmlucHV0IH07XG4gIH1cblxuICBzdGF0aWMgbm9ybWFsaXplKFxuICAgIGlucHV0OiBhbnksXG4gICAgcGFyZW50OiBhbnksXG4gICAga2V5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgdmlzaXQ6ICguLi5hcmdzOiBhbnkpID0+IGFueSxcbiAgICBhZGRFbnRpdHk6ICguLi5hcmdzOiBhbnkpID0+IGFueSxcbiAgICB2aXNpdGVkRW50aXRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICk6IGFueSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkRW50aXR5ID0gdGhpcy5wcm9jZXNzKGlucHV0LCBwYXJlbnQsIGtleSk7XG4gICAgY29uc3QgaWQgPSB0aGlzLnBrKHByb2Nlc3NlZEVudGl0eSwgcGFyZW50LCBrZXkpO1xuICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkIHx8IGlkID09PSAnJykge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgYE1pc3NpbmcgdXNhYmxlIHByaW1hcnkga2V5IHdoZW4gbm9ybWFsaXppbmcgcmVzcG9uc2UuXG5cbiAgVGhpcyBpcyBsaWtlbHkgZHVlIHRvIGEgbWFsZm9ybWVkIHJlc3BvbnNlLlxuICBUcnkgaW5zcGVjdGluZyB0aGUgbmV0d29yayByZXNwb25zZSBvciBmZXRjaCgpIHJldHVybiB2YWx1ZS5cbiAgT3IgdXNlIGRlYnVnZ2luZyB0b29sczogaHR0cHM6Ly9yZXN0aG9va3MuaW8vZG9jcy9ndWlkZXMvZGVidWdnaW5nXG4gIExlYXJuIG1vcmUgYWJvdXQgc2NoZW1hczogaHR0cHM6Ly9yZXN0aG9va3MuaW8vZG9jcy9hcGkvc2NoZW1hXG5cbiAgRW50aXR5OiAke3RoaXMubmFtZX1cbiAgVmFsdWUgKHByb2Nlc3NlZCk6ICR7XG4gICAgcHJvY2Vzc2VkRW50aXR5ICYmIEpTT04uc3RyaW5naWZ5KHByb2Nlc3NlZEVudGl0eSwgbnVsbCwgMilcbiAgfVxuICBgLFxuICAgICAgICApO1xuICAgICAgICAoZXJyb3IgYXMgYW55KS5zdGF0dXMgPSA0MDA7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhlc2UgbWFrZSB0aGUga2V5cyBnZXQgZGVsZXRlZFxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBlbnRpdHlUeXBlID0gdGhpcy5rZXk7XG5cbiAgICBpZiAoIShlbnRpdHlUeXBlIGluIHZpc2l0ZWRFbnRpdGllcykpIHtcbiAgICAgIHZpc2l0ZWRFbnRpdGllc1tlbnRpdHlUeXBlXSA9IHt9O1xuICAgIH1cbiAgICBpZiAoIShpZCBpbiB2aXNpdGVkRW50aXRpZXNbZW50aXR5VHlwZV0pKSB7XG4gICAgICB2aXNpdGVkRW50aXRpZXNbZW50aXR5VHlwZV1baWRdID0gW107XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHZpc2l0ZWRFbnRpdGllc1tlbnRpdHlUeXBlXVtpZF0uc29tZSgoZW50aXR5OiBhbnkpID0+IGVudGl0eSA9PT0gaW5wdXQpXG4gICAgKSB7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHRoaXMudmFsaWRhdGUocHJvY2Vzc2VkRW50aXR5KTtcbiAgICBpZiAoZXJyb3JNZXNzYWdlKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgKGVycm9yIGFzIGFueSkuc3RhdHVzID0gNDAwO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHZpc2l0ZWRFbnRpdGllc1tlbnRpdHlUeXBlXVtpZF0ucHVzaChpbnB1dCk7XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm9jZXNzZWRFbnRpdHksIGtleSkpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5zY2hlbWFba2V5XTtcbiAgICAgICAgcHJvY2Vzc2VkRW50aXR5W2tleV0gPSB2aXNpdChcbiAgICAgICAgICBwcm9jZXNzZWRFbnRpdHlba2V5XSxcbiAgICAgICAgICBwcm9jZXNzZWRFbnRpdHksXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICBhZGRFbnRpdHksXG4gICAgICAgICAgdmlzaXRlZEVudGl0aWVzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWRkRW50aXR5KHRoaXMsIHByb2Nlc3NlZEVudGl0eSwgaWQpO1xuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGF0aWMgdmFsaWRhdGUocHJvY2Vzc2VkRW50aXR5OiBhbnkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKFxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgdGhpcy5hdXRvbWF0aWNWYWxpZGF0aW9uICE9PSAnc2lsZW50J1xuICAgICkge1xuICAgICAgY29uc3Qga2V5c09mUmVjb3JkID0gbmV3IFNldChPYmplY3Qua2V5cyh0aGlzLmRlZmF1bHRzKSk7XG4gICAgICBjb25zdCBrZXlzT2ZQcm9wcyA9IE9iamVjdC5rZXlzKHByb2Nlc3NlZEVudGl0eSk7XG4gICAgICBjb25zdCBbZm91bmQsIG1pc3NpbmcsIHVuZXhwZWN0ZWRdID0gW1tdLCBbXSwgW11dIGFzIFtcbiAgICAgICAgc3RyaW5nW10sXG4gICAgICAgIHN0cmluZ1tdLFxuICAgICAgICBzdHJpbmdbXSxcbiAgICAgIF07XG4gICAgICBmb3IgKGNvbnN0IGtleU9mUHJvcHMgb2Yga2V5c09mUHJvcHMpIHtcbiAgICAgICAgaWYgKGtleXNPZlJlY29yZC5oYXMoa2V5T2ZQcm9wcykpIHtcbiAgICAgICAgICBmb3VuZC5wdXNoKGtleU9mUHJvcHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVuZXhwZWN0ZWQucHVzaChrZXlPZlByb3BzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBrZXlPZlJlY29yZCBvZiBrZXlzT2ZSZWNvcmQpIHtcbiAgICAgICAgaWYgKCFmb3VuZC5pbmNsdWRlcyhrZXlPZlJlY29yZCkpIHtcbiAgICAgICAgICBtaXNzaW5nLnB1c2goa2V5T2ZSZWNvcmQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIG9ubHkgYm90aGVyIHdpdGggdGhpcyBpZiB0aGV5IHVzZWQgKmFueSogZGVmYXVsdHNcbiAgICAgIGlmIChrZXlzT2ZSZWNvcmQuc2l6ZSkge1xuICAgICAgICBjb25zdCB0b29NYW55VW5leHBlY3RlZCA9XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCBjb21wYXJlZCB0byBtZW1iZXJzIGluIHJlc3BvbnNlXG4gICAgICAgICAgTWF0aC5tYXgoa2V5c09mUHJvcHMubGVuZ3RoIC8gMiwgMSkgPD0gdW5leHBlY3RlZC5sZW5ndGggJiZcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIGNvbXBhcmVkIHRvIHdoYXQgd2Ugc3BlY2lmaWVkXG4gICAgICAgICAga2V5c09mUmVjb3JkLnNpemUgPiBNYXRoLm1heCh1bmV4cGVjdGVkLmxlbmd0aCwgMikgJiZcbiAgICAgICAgICAvLyBhcyB3ZSBmaW5kIG1vcmUgYW5kIG1vcmUgYmUgbW9yZSBlYXNpbHkgYXNzdXJlZCBpdCBpcyBjb3JyZWN0XG4gICAgICAgICAgZm91bmQubGVuZ3RoICoqIDEuNSAvIDIgPD0gdW5leHBlY3RlZC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGZvdW5kTm90aGluZyA9IGZvdW5kLmxlbmd0aCA8IE1hdGgubWluKDEsIGtleXNPZlJlY29yZC5zaXplIC8gMik7XG4gICAgICAgIC8vIGlmIHdlIGZpbmQgbm90aGluZyAod2UgZXhwZWN0IGF0IGxlYXN0IG9uZSBtZW1iZXIgZm9yIGEgcGspXG4gICAgICAgIC8vIG9yIHdlIGZpbmQgdG9vIG1hbnkgdW5leHBlY3RlZCBtZW1iZXJzXG4gICAgICAgIGlmICh0b29NYW55VW5leHBlY3RlZCB8fCBmb3VuZE5vdGhpbmcpIHtcbiAgICAgICAgICBsZXQgZXh0cmEgPSAnJztcbiAgICAgICAgICBsZXQgcmVhc29uID0gJ3N1YnN0YW50aWFsbHkgZGlmZmVyZW50IHRoYW4gZXhwZWN0ZWQga2V5cyc7XG4gICAgICAgICAgaWYgKGZvdW5kTm90aGluZykge1xuICAgICAgICAgICAgZXh0cmEgKz0gYFxcbiAgICBNaXNzaW5nOiAke21pc3Npbmd9YDtcbiAgICAgICAgICAgIHJlYXNvbiA9ICdubyBtYXRjaGluZyBrZXlzIGZvdW5kJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRvb01hbnlVbmV4cGVjdGVkKSB7XG4gICAgICAgICAgICBleHRyYSArPSBgXFxuICAgIFVuZXhwZWN0ZWQga2V5czogJHt1bmV4cGVjdGVkfWA7XG4gICAgICAgICAgICByZWFzb24gPSAnYSBsYXJnZSBudW1iZXIgb2YgdW5leHBlY3RlZCBrZXlzIGZvdW5kJztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYEF0dGVtcHRlZCB0byBpbml0aWFsaXplICR7XG4gICAgICAgICAgICB0aGlzLm5hbWVcbiAgICAgICAgICB9IHdpdGggJHtyZWFzb259XG5cbiAgVGhpcyBpcyBsaWtlbHkgZHVlIHRvIGEgbWFsZm9ybWVkIHJlc3BvbnNlLlxuICBUcnkgaW5zcGVjdGluZyB0aGUgbmV0d29yayByZXNwb25zZSBvciBmZXRjaCgpIHJldHVybiB2YWx1ZS5cbiAgT3IgdXNlIGRlYnVnZ2luZyB0b29sczogaHR0cHM6Ly9yZXN0aG9va3MuaW8vZG9jcy9ndWlkZXMvZGVidWdnaW5nXG4gIExlYXJuIG1vcmUgYWJvdXQgc2NoZW1hczogaHR0cHM6Ly9yZXN0aG9va3MuaW8vZG9jcy9hcGkvc2NoZW1hXG4gIElmIHRoaXMgaXMgYSBtaXN0YWtlLCB5b3UgY2FuIGRpc2FibGUgdGhpcyBjaGVjayBieSBzZXR0aW5nIHN0YXRpYyBhdXRvbWF0aWNWYWxpZGF0aW9uID0gJ3NpbGVudCdcblxuICBFeHBlY3RlZCBrZXlzOlxuICAgIEZvdW5kOiAke2ZvdW5kfSR7ZXh0cmF9XG4gIFZhbHVlIChwcm9jZXNzZWQpOiAke0pTT04uc3RyaW5naWZ5KHByb2Nlc3NlZEVudGl0eSwgbnVsbCwgMil9YDtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoZm91bmQubGVuZ3RoID49IDQgJiYgdG9vTWFueVVuZXhwZWN0ZWQpIHx8XG4gICAgICAgICAgICB0aGlzLmF1dG9tYXRpY1ZhbGlkYXRpb24gPT09ICd3YXJuJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYSkpIHtcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvY2Vzc2VkRW50aXR5LCBrZXkpKSB7XG4gICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5kZWZhdWx0cywga2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGBTY2hlbWEga2V5IGlzIG1pc3NpbmcgaW4gRW50aXR5XG5cbiAgQmUgc3VyZSBhbGwgc2NoZW1hIG1lbWJlcnMgYXJlIGFsc28gcGFydCBvZiB0aGUgZW50aXR5XG4gIE9yIHVzZSBkZWJ1Z2dpbmcgdG9vbHM6IGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvZ3VpZGVzL2RlYnVnZ2luZ1xuICBMZWFybiBtb3JlIGFib3V0IG5lc3Rpbmcgc2NoZW1hczogaHR0cHM6Ly9yZXN0aG9va3MuaW8vZG9jcy9ndWlkZXMvbmVzdGVkLXJlc3BvbnNlXG5cbiAgRW50aXR5IGtleXM6ICR7T2JqZWN0LmtleXModGhpcy5kZWZhdWx0cyl9XG4gIFNjaGVtYSBrZXkobWlzc2luZyk6ICR7a2V5fVxuICBgO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBpbmZlcihcbiAgICBhcmdzOiByZWFkb25seSBhbnlbXSxcbiAgICBpbmRleGVzOiBOb3JtYWxpemVkSW5kZXgsXG4gICAgcmVjdXJzZTogYW55LFxuICApOiBhbnkge1xuICAgIGlmICghYXJnc1swXSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBpZCA9IHRoaXMucGsoYXJnc1swXSwgdW5kZWZpbmVkLCAnJyk7XG4gICAgLy8gV2FzIGFibGUgdG8gaW5mZXIgdGhlIGVudGl0eSdzIHByaW1hcnkga2V5IGZyb20gcGFyYW1zXG4gICAgaWYgKGlkICE9PSB1bmRlZmluZWQgJiYgaWQgIT09ICcnKSByZXR1cm4gaWQ7XG4gICAgLy8gbm93IGF0dGVtcHQgbG9va3VwIGluIGluZGV4ZXNcbiAgICBjb25zdCBpbmRleE5hbWUgPSBpbmRleEZyb21QYXJhbXMoYXJnc1swXSwgdGhpcy5pbmRleGVzKTtcbiAgICBpZiAoaW5kZXhOYW1lICYmIGluZGV4ZXNbdGhpcy5rZXldKSB7XG4gICAgICAvLyAnYXMgUmVjb3JkPHN0cmluZywgYW55Pic6IGluZGV4TmFtZSBjYW4gb25seSBiZSBmb3VuZCBpZiBwYXJhbXMgaXMgYSBzdHJpbmcga2V5J2Qgb2JqZWN0XG4gICAgICBjb25zdCBpZCA9XG4gICAgICAgIGluZGV4ZXNbdGhpcy5rZXldW2luZGV4TmFtZV1bXG4gICAgICAgICAgKGFyZ3NbMF0gYXMgUmVjb3JkPHN0cmluZywgYW55PilbaW5kZXhOYW1lXVxuICAgICAgICBdO1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgc3RhdGljIGV4cGlyZXNBdChcbiAgICBtZXRhOiB7IGV4cGlyZXNBdDogbnVtYmVyOyBkYXRlOiBudW1iZXI7IGZldGNoZWRBdDogbnVtYmVyIH0sXG4gICAgaW5wdXQ6IGFueSxcbiAgKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbWV0YS5leHBpcmVzQXQ7XG4gIH1cblxuICBzdGF0aWMgZGVub3JtYWxpemU8VCBleHRlbmRzIHR5cGVvZiBFbnRpdHk+KFxuICAgIHRoaXM6IFQsXG4gICAgaW5wdXQ6IFJlYWRvbmx5PFBhcnRpYWw8QWJzdHJhY3RJbnN0YW5jZVR5cGU8VD4+PixcbiAgICB1bnZpc2l0OiBzY2hlbWEuVW52aXNpdEZ1bmN0aW9uLFxuICApOiBbZGVub3JtYWxpemVkOiBBYnN0cmFjdEluc3RhbmNlVHlwZTxUPiwgZm91bmQ6IGJvb2xlYW4sIHN1c3BlbmQ6IGJvb2xlYW5dIHtcbiAgICBpZiAoaXNJbW11dGFibGUoaW5wdXQpKSB7XG4gICAgICBpZiAodGhpcy52YWxpZGF0ZSgoaW5wdXQgYXMgYW55KS50b0pTKCkpKVxuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZCBhcyBhbnksIGZhbHNlLCB0cnVlXTtcbiAgICAgIC8vIE5lZWQgdG8gc2V0IHRoaXMgZmlyc3Qgc28gdGhhdCBpZiBpdCBpcyByZWZlcmVuY2VkIGZ1cnRoZXIgd2l0aGluIHRoZVxuICAgICAgLy8gZGVub3JtYWxpemF0aW9uIHRoZSByZWZlcmVuY2Ugd2lsbCBhbHJlYWR5IGV4aXN0LlxuICAgICAgdW52aXNpdC5zZXRMb2NhbD8uKGlucHV0KTtcbiAgICAgIGNvbnN0IFtkZW5vcm1FbnRpdHksIGZvdW5kLCBkZWxldGVkXSA9IGRlbm9ybWFsaXplSW1tdXRhYmxlKFxuICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHVudmlzaXQsXG4gICAgICApO1xuICAgICAgcmV0dXJuIFt0aGlzLmZyb21KUyhkZW5vcm1FbnRpdHkudG9PYmplY3QoKSksIGZvdW5kLCBkZWxldGVkXTtcbiAgICB9XG4gICAgaWYgKHRoaXMudmFsaWRhdGUoaW5wdXQpKSB7XG4gICAgICByZXR1cm4gW3VuZGVmaW5lZCBhcyBhbnksIGZhbHNlLCB0cnVlXTtcbiAgICB9XG4gICAgY29uc3QgZW50aXR5Q29weTogYW55ID0gdGhpcy5mcm9tSlMoaW5wdXQpO1xuICAgIC8vIE5lZWQgdG8gc2V0IHRoaXMgZmlyc3Qgc28gdGhhdCBpZiBpdCBpcyByZWZlcmVuY2VkIGZ1cnRoZXIgd2l0aGluIHRoZVxuICAgIC8vIGRlbm9ybWFsaXphdGlvbiB0aGUgcmVmZXJlbmNlIHdpbGwgYWxyZWFkeSBleGlzdC5cbiAgICB1bnZpc2l0LnNldExvY2FsPy4oZW50aXR5Q29weSk7XG5cbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgLy8gbm90ZTogaXRlcmF0aW9uIG9yZGVyIG11c3QgYmUgc3RhYmxlXG4gICAgT2JqZWN0LmtleXModGhpcy5zY2hlbWEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuc2NoZW1hW2tleV07XG4gICAgICBjb25zdCBuZXh0SW5wdXQgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaW5wdXQsIGtleSlcbiAgICAgICAgPyAoaW5wdXQgYXMgYW55KVtrZXldXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgW3ZhbHVlLCAsIGRlbGV0ZWRJdGVtXSA9IHVudmlzaXQobmV4dElucHV0LCBzY2hlbWEpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGRlbGV0ZWRJdGVtICYmXG4gICAgICAgICEoXG4gICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGlucHV0LCBrZXkpICYmXG4gICAgICAgICAgIXRoaXMuZGVmYXVsdHNba2V5XVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpbnB1dCwga2V5KSAmJlxuICAgICAgICAoaW5wdXQgYXMgYW55KVtrZXldICE9PSB2YWx1ZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2V0KGVudGl0eUNvcHksIGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIFtlbnRpdHlDb3B5LCB0cnVlLCBkZWxldGVkXTtcbiAgfVxuXG4gIHByaXZhdGUgZGVjbGFyZSBzdGF0aWMgX19kZWZhdWx0czogYW55O1xuICAvKiogQWxsIGluc3RhbmNlIGRlZmF1bHRzIHNldCAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIGdldCBkZWZhdWx0cygpIHtcbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLCAnX19kZWZhdWx0cycpKVxuICAgICAgdGhpcy5fX2RlZmF1bHRzID0gbmV3ICh0aGlzIGFzIGFueSkoKTtcbiAgICByZXR1cm4gdGhpcy5fX2RlZmF1bHRzO1xuICB9XG5cbiAgLyoqIFVzZWQgYnkgZGVub3JtYWxpemUgdG8gc2V0IG5lc3RlZCBtZW1iZXJzICovXG4gIHByb3RlY3RlZCBzdGF0aWMgc2V0KGVudGl0eTogYW55LCBrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGVudGl0eVtrZXldID0gdmFsdWU7XG4gIH1cbn1cblxuLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGNvbnN0IHN1cGVyRnJvbSA9IEVudGl0eS5mcm9tSlM7XG4gIC8vIGZvciB0aG9zZSBub3QgdXNpbmcgVHlwZVNjcmlwdCB0aGlzIGlzIGEgZ29vZCBjYXRjaCB0byBlbnN1cmUgdGhleSBhcmUgZGVmaW5pbmdcbiAgLy8gdGhlIGFic3RyYWN0IG1lbWJlcnNcbiAgRW50aXR5LmZyb21KUyA9IGZ1bmN0aW9uIGZyb21KUzxUIGV4dGVuZHMgdHlwZW9mIEVudGl0eT4oXG4gICAgdGhpczogVCxcbiAgICBwcm9wczogUGFydGlhbDxBYnN0cmFjdEluc3RhbmNlVHlwZTxUPj4sXG4gICk6IEFic3RyYWN0SW5zdGFuY2VUeXBlPFQ+IHtcbiAgICBpZiAoKHRoaXMgYXMgYW55KS5wcm90b3R5cGUucGsgPT09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IGNvbnN0cnVjdCBvbiBhYnN0cmFjdCB0eXBlcycpO1xuICAgIHJldHVybiBzdXBlckZyb20uY2FsbCh0aGlzLCBwcm9wcykgYXMgYW55O1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbnRpdHkoc2NoZW1hOiBTY2hlbWEpOiBzY2hlbWEgaXMgdHlwZW9mIEVudGl0eSB7XG4gIHJldHVybiBzY2hlbWEgIT09IG51bGwgJiYgKHNjaGVtYSBhcyBhbnkpLnBrICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGluZGV4RnJvbVBhcmFtczxJIGV4dGVuZHMgc3RyaW5nPihcbiAgcGFyYW1zOiBSZWFkb25seTxvYmplY3Q+LFxuICBpbmRleGVzPzogUmVhZG9ubHk8SVtdPixcbikge1xuICBpZiAoIWluZGV4ZXMpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBpbmRleGVzLmZpbmQoaW5kZXggPT5cbiAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyYW1zLCBpbmRleCksXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBR0EsU0FDRUEsV0FERixFQUVFQyxvQkFGRixRQUdPLDhCQUhQO0FBS0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsZUFBZSxNQUFlQyxNQUFmLENBQXNCO0VBQ3RCLE9BQU5DLE1BQU0sR0FBRztJQUNkLE9BQU87TUFDTEMsSUFBSSxFQUFFLEtBQUtBLElBRE47TUFFTEMsTUFBTSxFQUFFLEtBQUtBLE1BRlI7TUFHTEMsR0FBRyxFQUFFLEtBQUtBO0lBSEwsQ0FBUDtFQUtEO0VBRUQ7OztFQVdBO0VBQ2MsV0FBSEEsR0FBRyxHQUFXO0lBQ3ZCO0lBQ0EsSUFDRUMsT0FBTyxDQUFDQyxHQUFSLENBQVlDLFFBQVosS0FBeUIsWUFBekIsS0FDQyxLQUFLTCxJQUFMLEtBQWMsRUFBZCxJQUFvQixLQUFLQSxJQUFMLEtBQWMsUUFBbEMsSUFBOEMsS0FBS0EsSUFBTCxLQUFjLE9BRDdELENBREYsRUFJRSxNQUFNLElBQUlNLEtBQUosQ0FDSiw4REFESSxDQUFOO0lBR0YsT0FBTyxLQUFLTixJQUFaO0VBQ0Q7RUFFRDs7O0VBYUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDVyxPQUFGTyxFQUFFLENBRVBDLEtBRk8sRUFHUEMsTUFITyxFQUlQUCxHQUpPLEVBS2E7SUFDcEIs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","import { isImmutable } from './ImmutableUtils.js';\nexport default class PolymorphicSchema {\n constructor(definition, schemaAttribute) {\n this.schema = void 0;\n\n if (schemaAttribute) {\n this._schemaAttribute = typeof schemaAttribute === 'string' ? input => input[schemaAttribute] : schemaAttribute;\n }\n\n this.define(definition);\n }\n\n get isSingleSchema() {\n return !this._schemaAttribute;\n }\n\n define(definition) {\n this.schema = definition;\n }\n\n getSchemaAttribute(input, parent, key) {\n return !this.isSingleSchema && this._schemaAttribute(input, parent, key);\n }\n\n inferSchema(input, parent, key) {\n if (this.isSingleSchema) {\n return this.schema;\n }\n\n const attr = this.getSchemaAttribute(input, parent, key);\n return this.schema[attr];\n }\n\n normalizeValue(value, parent, key, visit, addEntity, visitedEntities) {\n const schema = this.inferSchema(value, parent, key);\n\n if (!schema) {\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n const attr = this.getSchemaAttribute(value, parent, key);\n console.warn(`Schema attribute ${JSON.stringify(attr, undefined, 2)} is not expected.\nExpected one of: ${Object.keys(this.schema).map(k => `\"${k}\"`).join(', ')}\n\nValue: ${JSON.stringify(value, undefined, 2)}`);\n }\n\n return value;\n }\n\n const normalizedValue = visit(value, parent, key, schema, addEntity, visitedEntities);\n return this.isSingleSchema || normalizedValue === undefined || normalizedValue === null ? normalizedValue : {\n id: normalizedValue,\n schema: this.getSchemaAttribute(value, parent, key)\n };\n } // value is guaranteed by caller to not be null\n\n\n denormalizeValue(value, unvisit) {\n const schemaKey = isImmutable(value) ? value.get('schema') : value.schema;\n\n if (!this.isSingleSchema && !schemaKey) {\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`TypeError: Unable to infer schema for ${this.constructor.name}\nValue: ${JSON.stringify(value, undefined, 2)}.`);\n }\n\n return [value, true, false];\n }\n\n const id = this.isSingleSchema ? undefined : isImmutable(value) ? value.get('id') : value.id;\n const schema = this.isSingleSchema ? this.schema : this.schema[schemaKey];\n return unvisit(id || value, schema);\n }\n\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0ltbXV0YWJsZSIsIlBvbHltb3JwaGljU2NoZW1hIiwiY29uc3RydWN0b3IiLCJkZWZpbml0aW9uIiwic2NoZW1hQXR0cmlidXRlIiwic2NoZW1hIiwiX3NjaGVtYUF0dHJpYnV0ZSIsImlucHV0IiwiZGVmaW5lIiwiaXNTaW5nbGVTY2hlbWEiLCJnZXRTY2hlbWFBdHRyaWJ1dGUiLCJwYXJlbnQiLCJrZXkiLCJpbmZlclNjaGVtYSIsImF0dHIiLCJub3JtYWxpemVWYWx1ZSIsInZhbHVlIiwidmlzaXQiLCJhZGRFbnRpdHkiLCJ2aXNpdGVkRW50aXRpZXMiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJjb25zb2xlIiwid2FybiIsIkpTT04iLCJzdHJpbmdpZnkiLCJ1bmRlZmluZWQiLCJPYmplY3QiLCJrZXlzIiwibWFwIiwiayIsImpvaW4iLCJub3JtYWxpemVkVmFsdWUiLCJpZCIsImRlbm9ybWFsaXplVmFsdWUiLCJ1bnZpc2l0Iiwic2NoZW1hS2V5IiwiZ2V0IiwibmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWFzL1BvbHltb3JwaGljLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzSW1tdXRhYmxlIH0gZnJvbSAnLi9JbW11dGFibGVVdGlscy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBvbHltb3JwaGljU2NoZW1hIHtcbiAgcHJpdmF0ZSBkZWNsYXJlIF9zY2hlbWFBdHRyaWJ1dGU6IGFueTtcbiAgcHJvdGVjdGVkIHNjaGVtYTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKGRlZmluaXRpb24sIHNjaGVtYUF0dHJpYnV0ZSkge1xuICAgIGlmIChzY2hlbWFBdHRyaWJ1dGUpIHtcbiAgICAgIHRoaXMuX3NjaGVtYUF0dHJpYnV0ZSA9XG4gICAgICAgIHR5cGVvZiBzY2hlbWFBdHRyaWJ1dGUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBpbnB1dCA9PiBpbnB1dFtzY2hlbWFBdHRyaWJ1dGVdXG4gICAgICAgICAgOiBzY2hlbWFBdHRyaWJ1dGU7XG4gICAgfVxuICAgIHRoaXMuZGVmaW5lKGRlZmluaXRpb24pO1xuICB9XG5cbiAgZ2V0IGlzU2luZ2xlU2NoZW1hKCkge1xuICAgIHJldHVybiAhdGhpcy5fc2NoZW1hQXR0cmlidXRlO1xuICB9XG5cbiAgZGVmaW5lKGRlZmluaXRpb246IGFueSkge1xuICAgIHRoaXMuc2NoZW1hID0gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIGdldFNjaGVtYUF0dHJpYnV0ZShpbnB1dDogYW55LCBwYXJlbnQ6IGFueSwga2V5OiBhbnkpIHtcbiAgICByZXR1cm4gIXRoaXMuaXNTaW5nbGVTY2hlbWEgJiYgdGhpcy5fc2NoZW1hQXR0cmlidXRlKGlucHV0LCBwYXJlbnQsIGtleSk7XG4gIH1cblxuICBpbmZlclNjaGVtYShpbnB1dDogYW55LCBwYXJlbnQ6IGFueSwga2V5OiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc1NpbmdsZVNjaGVtYSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hO1xuICAgIH1cblxuICAgIGNvbnN0IGF0dHIgPSB0aGlzLmdldFNjaGVtYUF0dHJpYnV0ZShpbnB1dCwgcGFyZW50LCBrZXkpO1xuICAgIHJldHVybiB0aGlzLnNjaGVtYVthdHRyXTtcbiAgfVxuXG4gIG5vcm1hbGl6ZVZhbHVlKFxuICAgIHZhbHVlOiBhbnksXG4gICAgcGFyZW50OiBhbnksXG4gICAga2V5OiBhbnksXG4gICAgdmlzaXQ6IGFueSxcbiAgICBhZGRFbnRpdHk6IGFueSxcbiAgICB2aXNpdGVkRW50aXRpZXM6IGFueSxcbiAgKSB7XG4gICAgY29uc3Qgc2NoZW1hID0gdGhpcy5pbmZlclNjaGVtYSh2YWx1ZSwgcGFyZW50LCBrZXkpO1xuICAgIGlmICghc2NoZW1hKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgY29uc3QgYXR0ciA9IHRoaXMuZ2V0U2NoZW1hQXR0cmlidXRlKHZhbHVlLCBwYXJlbnQsIGtleSk7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgU2NoZW1hIGF0dHJpYnV0ZSAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgYXR0cixcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIDIsXG4gICAgICAgICAgKX0gaXMgbm90IGV4cGVjdGVkLlxuRXhwZWN0ZWQgb25lIG9mOiAke09iamVjdC5rZXlzKHRoaXMuc2NoZW1hKVxuICAgICAgICAgICAgLm1hcChrID0+IGBcIiR7a31cImApXG4gICAgICAgICAgICAuam9pbignLCAnKX1cblxuVmFsdWU6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUsIHVuZGVmaW5lZCwgMil9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gdmlzaXQoXG4gICAgICB2YWx1ZSxcbiAgICAgIHBhcmVudCxcbiAgICAgIGtleSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIGFkZEVudGl0eSxcbiAgICAgIHZpc2l0ZWRFbnRpdGllcyxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmlzU2luZ2xlU2NoZW1hIHx8XG4gICAgICBub3JtYWxpemVkVmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgbm9ybWFsaXplZFZhbHVlID09PSBudWxsXG4gICAgICA/IG5vcm1hbGl6ZWRWYWx1ZVxuICAgICAgOiB7XG4gICAgICAgICAgaWQ6IG5vcm1hbGl6ZWRWYWx1ZSxcbiAgICAgICAgICBzY2hlbWE6IHRoaXMuZ2V0U2NoZW1hQXR0cmlidXRlKHZhbHVlLCBwYXJlbnQsIGtleSksXG4gICAgICAgIH07XG4gIH1cblxuICAvLyB2YWx1ZSBpcyBndWFyYW50ZWVkIGJ5IGNhbGxlciB0byBub3QgYmUgbnVsbFxuICBkZW5vcm1hbGl6ZVZhbHVlKHZhbHVlOiBhbnksIHVudmlzaXQ6IGFueSkge1xuICAgIGNvbnN0IHNjaGVtYUtleSA9IGlzSW1tdXRhYmxlKHZhbHVlKSA/IHZhbHVlLmdldCgnc2NoZW1hJykgOiB2YWx1ZS5zY2hlbWE7XG4gICAgaWYgKCF0aGlzLmlzU2luZ2xlU2NoZW1hICYmICFzY2hlbWFLZXkpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFR5cGVFcnJvcjogVW5hYmxlIHRvIGluZmVyIHNjaGVtYSBmb3IgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9XG5WYWx1ZTogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSwgdW5kZWZpbmVkLCAyKX0uYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbdmFsdWUsIHRydWUsIGZhbHNlXTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSB0aGlzLmlzU2luZ2xlU2NoZW1hXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBpc0ltbXV0YWJsZSh2YWx1ZSlcbiAgICAgID8gdmFsdWUuZ2V0KCdpZCcpXG4gICAgICA6IHZhbHVlLmlkO1xuICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuaXNTaW5nbGVTY2hlbWEgPyB0aGlzLnNjaGVtYSA6IHRoaXMuc2NoZW1hW3NjaGVtYUtleV07XG4gICAgcmV0dXJuIHVudmlzaXQoaWQgfHwgdmFsdWUsIHNjaGVtYSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsV0FBVCxRQUE0QixxQkFBNUI7QUFFQSxlQUFlLE1BQU1DLGlCQUFOLENBQXdCO0VBSXJDQyxXQUFXLENBQUNDLFVBQUQsRUFBYUMsZUFBYixFQUE4QjtJQUFBLEtBRi9CQyxNQUUrQjs7SUFDdkMsSUFBSUQsZUFBSixFQUFxQjtNQUNuQixLQUFLRSxnQkFBTCxHQUNFLE9BQU9GLGVBQVAsS0FBMkIsUUFBM0IsR0FDSUcsS0FB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","import PolymorphicSchema from './Polymorphic.js';\n\nconst validateSchema = definition => {\n const isArray = Array.isArray(definition);\n\n if (isArray && definition.length > 1) {\n throw new Error(`Expected schema definition to be a single schema, but found ${definition.length}.`);\n }\n\n return definition[0];\n};\n\nconst getValues = input => Array.isArray(input) ? input : Object.keys(input).map(key => input[key]);\n\nconst filterEmpty = ([item,, deletedItem]) => item !== undefined && !deletedItem;\n\nexport const normalize = (schema, input, parent, key, visit, addEntity, visitedEntities) => {\n schema = validateSchema(schema);\n const values = getValues(input); // Special case: Arrays pass *their* parent on to their children, since there\n // is not any special information that can be gathered from themselves directly\n\n return values.map((value, index) => visit(value, parent, key, schema, addEntity, visitedEntities));\n};\nexport const denormalize = (schema, input, unvisit) => {\n schema = validateSchema(schema);\n return [input.map ? input.map(entityOrId => unvisit(entityOrId, schema)).filter(filterEmpty).map(([value]) => value) : input, true, false];\n};\nexport function infer(schema, args, indexes, recurse) {\n return undefined;\n}\n/**\n * Represents arrays\n * @see https://resthooks.io/docs/api/Array\n */\n\nexport default class ArraySchema extends PolymorphicSchema {\n normalize(input, parent, key, visit, addEntity, visitedEntities) {\n const values = getValues(input);\n return values.map((value, index) => this.normalizeValue(value, parent, key, visit, addEntity, visitedEntities)).filter(value => value !== undefined && value !== null);\n }\n\n denormalize(input, unvisit) {\n return [input.map ? input.map(entityOrId => this.denormalizeValue(entityOrId, unvisit)).filter(filterEmpty).map(([value]) => value) : input, true, false];\n }\n\n infer(args, indexes, recurse) {\n return infer(this.schema, args, indexes, recurse);\n }\n\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQb2x5bW9ycGhpY1NjaGVtYSIsInZhbGlkYXRlU2NoZW1hIiwiZGVmaW5pdGlvbiIsImlzQXJyYXkiLCJBcnJheSIsImxlbmd0aCIsIkVycm9yIiwiZ2V0VmFsdWVzIiwiaW5wdXQiLCJPYmplY3QiLCJrZXlzIiwibWFwIiwia2V5IiwiZmlsdGVyRW1wdHkiLCJpdGVtIiwiZGVsZXRlZEl0ZW0iLCJ1bmRlZmluZWQiLCJub3JtYWxpemUiLCJzY2hlbWEiLCJwYXJlbnQiLCJ2aXNpdCIsImFkZEVudGl0eSIsInZpc2l0ZWRFbnRpdGllcyIsInZhbHVlcyIsInZhbHVlIiwiaW5kZXgiLCJkZW5vcm1hbGl6ZSIsInVudmlzaXQiLCJlbnRpdHlPcklkIiwiZmlsdGVyIiwiaW5mZXIiLCJhcmdzIiwiaW5kZXhlcyIsInJlY3Vyc2UiLCJBcnJheVNjaGVtYSIsIm5vcm1hbGl6ZVZhbHVlIiwiZGVub3JtYWxpemVWYWx1ZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWFzL0FycmF5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQb2x5bW9ycGhpY1NjaGVtYSBmcm9tICcuL1BvbHltb3JwaGljLmpzJztcblxuY29uc3QgdmFsaWRhdGVTY2hlbWEgPSBkZWZpbml0aW9uID0+IHtcbiAgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbik7XG4gIGlmIChpc0FycmF5ICYmIGRlZmluaXRpb24ubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBFeHBlY3RlZCBzY2hlbWEgZGVmaW5pdGlvbiB0byBiZSBhIHNpbmdsZSBzY2hlbWEsIGJ1dCBmb3VuZCAke2RlZmluaXRpb24ubGVuZ3RofS5gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZGVmaW5pdGlvblswXTtcbn07XG5cbmNvbnN0IGdldFZhbHVlcyA9IGlucHV0ID0+XG4gIEFycmF5LmlzQXJyYXkoaW5wdXQpID8gaW5wdXQgOiBPYmplY3Qua2V5cyhpbnB1dCkubWFwKGtleSA9PiBpbnB1dFtrZXldKTtcblxuY29uc3QgZmlsdGVyRW1wdHkgPSAoW2l0ZW0sICwgZGVsZXRlZEl0ZW1dKSA9PlxuICBpdGVtICE9PSB1bmRlZmluZWQgJiYgIWRlbGV0ZWRJdGVtO1xuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplID0gKFxuICBzY2hlbWE6IGFueSxcbiAgaW5wdXQ6IGFueSxcbiAgcGFyZW50OiBhbnksXG4gIGtleTogYW55LFxuICB2aXNpdDogYW55LFxuICBhZGRFbnRpdHk6IGFueSxcbiAgdmlzaXRlZEVudGl0aWVzOiBhbnksXG4pID0+IHtcbiAgc2NoZW1hID0gdmFsaWRhdGVTY2hlbWEoc2NoZW1hKTtcblxuICBjb25zdCB2YWx1ZXMgPSBnZXRWYWx1ZXMoaW5wdXQpO1xuXG4gIC8vIFNwZWNpYWwgY2FzZTogQXJyYXlzIHBhc3MgKnRoZWlyKiBwYXJlbnQgb24gdG8gdGhlaXIgY2hpbGRyZW4sIHNpbmNlIHRoZXJlXG4gIC8vIGlzIG5vdCBhbnkgc3BlY2lhbCBpbmZvcm1hdGlvbiB0aGF0IGNhbiBiZSBnYXRoZXJlZCBmcm9tIHRoZW1zZWx2ZXMgZGlyZWN0bHlcbiAgcmV0dXJuIHZhbHVlcy5tYXAoKHZhbHVlLCBpbmRleCkgPT5cbiAgICB2aXNpdCh2YWx1ZSwgcGFyZW50LCBrZXksIHNjaGVtYSwgYWRkRW50aXR5LCB2aXNpdGVkRW50aXRpZXMpLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbm9ybWFsaXplID0gKFxuICBzY2hlbWE6IGFueSxcbiAgaW5wdXQ6IGFueSxcbiAgdW52aXNpdDogYW55LFxuKTogW2Rlbm9ybWFsaXplZDogYW55LCBmb3VuZDogYm9vbGVhbiwgc3VzcGVuZDogYm9vbGVhbl0gPT4ge1xuICBzY2hlbWEgPSB2YWxpZGF0ZVNjaGVtYShzY2hlbWEpO1xuICByZXR1cm4gW1xuICAgIGlucHV0Lm1hcFxuICAgICAgPyBpbnB1dFxuICAgICAgICAgIC5tYXAoZW50aXR5T3JJZCA9PiB1bnZpc2l0KGVudGl0eU9ySWQsIHNjaGVtYSkpXG4gICAgICAgICAgLmZpbHRlcihmaWx0ZXJFbXB0eSlcbiAgICAgICAgICAubWFwKChbdmFsdWVdKSA9PiB2YWx1ZSlcbiAgICAgIDogaW5wdXQsXG4gICAgdHJ1ZSxcbiAgICBmYWxzZSxcbiAgXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmZlcihzY2hlbWE6IGFueSwgYXJnczogYW55LCBpbmRleGVzOiBhbnksIHJlY3Vyc2U6IGFueSkge1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYXJyYXlzXG4gKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0FycmF5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFycmF5U2NoZW1hIGV4dGVuZHMgUG9seW1vcnBoaWNTY2hlbWEge1xuICBub3JtYWxpemUoXG4gICAgaW5wdXQ6IGFueSxcbiAgICBwYXJlbnQ6IGFueSxcbiAgICBrZXk6IGFueSxcbiAgICB2aXNpdDogYW55LFxuICAgIGFkZEVudGl0eTogYW55LFxuICAgIHZpc2l0ZWRFbnRpdGllczogYW55LFxuICApIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBnZXRWYWx1ZXMoaW5wdXQpO1xuXG4gICAgcmV0dXJuIHZhbHVlc1xuICAgICAgLm1hcCgodmFsdWUsIGluZGV4KSA9PlxuICAgICAgICB0aGlzLm5vcm1hbGl6ZVZhbHVlKFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdmlzaXQsXG4gICAgICAgICAgYWRkRW50aXR5LFxuICAgICAgICAgIHZpc2l0ZWRFbnRpdGllcyxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIodmFsdWUgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCk7XG4gIH1cblxuICBkZW5vcm1hbGl6ZShpbnB1dDogYW55LCB1bnZpc2l0OiBhbnkpIHtcbiAgICByZXR1cm4gW1xuICAgICAgaW5wdXQubWFwXG4gICAgICAgID8gaW5wdXRcbiAgICAgICAgICAgIC5tYXAoZW50aXR5T3JJZCA9PiB0aGlzLmRlbm9ybWFsaXplVmFsdWUoZW50aXR5T3JJZCwgdW52aXNpdCkpXG4gICAgICAgICAgICAuZmlsdGVyKGZpbHRlckVtcHR5KVxuICAgICAgICAgICAgLm1hcCgoW3ZhbHVlXSkgPT4gdmFsdWUpXG4gICAgICAgIDogaW5wdXQsXG4gICAgICB0cnVlLFxuICAgICAgZmFsc2UsXG4gICAgXTtcbiAgfVxuXG4gIGluZmVyKGFyZ3M6IGFueSwgaW5kZXhlczogYW55LCByZWN1cnNlOiBhbnkpIHtcbiAgICByZXR1cm4gaW5mZXIodGhpcy5zY2hlbWEsIGFyZ3MsIGluZGV4ZXMsIHJlY3Vyc2UpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLGlCQUFQLE1BQThCLGtCQUE5Qjs7QUFFQSxNQUFNQyxjQUFjLEdBQUdDLFVBQVUsSUFBSTtFQUNuQyxNQUFNQyxPQUFPLEdBQUdDLEtBQUssQ0FBQ0QsT0FBTixDQUFjRCxVQUFkLENBQWhCOztFQUNBLElBQUlDLE9BQU8sSUFBSUQsVUFBVSxDQUFDRyxNQUFYLEdBQW9CLENBQW5DLEVBQXNDO0lBQ3BDLE1BQU0sSUFBSUMsS0FBSixDQUNILCtEQUE4REosVUFBVSxDQUFDRyxNQUFPLEdBRDdFLENBQU47RUFHRDs7RUFFRCxPQUFPSCxVQUFVLENBQUMsQ0FBRCxDQUFqQjtBQUNELENBVEQ7O0FBV0EsTUFBTUssU0FBUyxHQUFHQyxLQUFLLElBQ3JCSixLQUFLLENBQUNELE9BQU4sQ0FBY0ssS0FBZCxJQUF1QkEsS0FBdkIsR0FBK0JDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZRixLQUFaLEVBQW1CRyxHQUFuQixDQUF1QkMsR0FBRyxJQUFJSixLQUFLLENBQUNJLEdBQUQsQ0FBbkMsQ0FEakM7O0FBR0EsTUFBTUMsV0FBVyxHQUFHLENBQUMsQ0FBQ0MsSUFBRCxHQUFTQyxXQUFULENBQUQsS0FDbEJELElBQUksS0FBS0Us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","/**\n * Helpers to enable Immutable compatibility *without* bringing in\n * the 'immutable' package as a dependency.\n */\n\n/**\n * Check if an object is immutable by checking if it has a key specific\n * to the immutable library.\n *\n * @param {any} object\n * @return {bool}\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isImmutable(object) {\n return !!(typeof object.hasOwnProperty === 'function' && (Object.hasOwnProperty.call(object, '__ownerID') || // Immutable.Map\n object._map && Object.hasOwnProperty.call(object._map, '__ownerID'))); // Immutable.Record\n}\n/**\n * Denormalize an immutable entity.\n *\n * @param {Schema} schema\n * @param {Immutable.Map|Immutable.Record} input\n * @param {function} unvisit\n * @param {function} getDenormalizedEntity\n * @return {Immutable.Map|Immutable.Record}\n */\n\nexport function denormalizeImmutable(schema, input, unvisit) {\n let found = true;\n let deleted = false;\n return [Object.keys(schema).reduce((object, key) => {\n // Immutable maps cast keys to strings on write so we need to ensure\n // we're accessing them using string keys.\n const stringKey = `${key}`;\n const [item, foundItem, deletedItem] = unvisit(object.get(stringKey), schema[stringKey]);\n\n if (!foundItem) {\n found = false;\n }\n\n if (deletedItem) {\n deleted = true;\n }\n\n if (object.has(stringKey)) {\n return object.set(stringKey, item);\n } else {\n return object;\n }\n }, input), found, deleted];\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0ltbXV0YWJsZSIsIm9iamVjdCIsImhhc093blByb3BlcnR5IiwiT2JqZWN0IiwiY2FsbCIsIl9tYXAiLCJkZW5vcm1hbGl6ZUltbXV0YWJsZSIsInNjaGVtYSIsImlucHV0IiwidW52aXNpdCIsImZvdW5kIiwiZGVsZXRlZCIsImtleXMiLCJyZWR1Y2UiLCJrZXkiLCJzdHJpbmdLZXkiLCJpdGVtIiwiZm91bmRJdGVtIiwiZGVsZXRlZEl0ZW0iLCJnZXQiLCJoYXMiLCJzZXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NoZW1hcy9JbW11dGFibGVVdGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEhlbHBlcnMgdG8gZW5hYmxlIEltbXV0YWJsZSBjb21wYXRpYmlsaXR5ICp3aXRob3V0KiBicmluZ2luZyBpblxuICogdGhlICdpbW11dGFibGUnIHBhY2thZ2UgYXMgYSBkZXBlbmRlbmN5LlxuICovXG5cbmltcG9ydCBJbW11dGFibGUgZnJvbSAnaW1tdXRhYmxlJztcblxuLyoqXG4gKiBDaGVjayBpZiBhbiBvYmplY3QgaXMgaW1tdXRhYmxlIGJ5IGNoZWNraW5nIGlmIGl0IGhhcyBhIGtleSBzcGVjaWZpY1xuICogdG8gdGhlIGltbXV0YWJsZSBsaWJyYXJ5LlxuICpcbiAqIEBwYXJhbSAge2FueX0gb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sfVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW1tdXRhYmxlKG9iamVjdDoge30pOiBvYmplY3QgaXMge1xuICBnZXQoazogc3RyaW5nKTogYW55O1xuICBbazogc3RyaW5nXTogYW55O1xufSB7XG4gIHJldHVybiAhIShcbiAgICB0eXBlb2Ygb2JqZWN0Lmhhc093blByb3BlcnR5ID09PSAnZnVuY3Rpb24nICYmXG4gICAgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fb3duZXJJRCcpIHx8IC8vIEltbXV0YWJsZS5NYXBcbiAgICAgICgob2JqZWN0IGFzIGFueSkuX21hcCAmJlxuICAgICAgICBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCgob2JqZWN0IGFzIGFueSkuX21hcCwgJ19fb3duZXJJRCcpKSlcbiAgKTsgLy8gSW1tdXRhYmxlLlJlY29yZFxufVxuXG4vKipcbiAqIERlbm9ybWFsaXplIGFuIGltbXV0YWJsZSBlbnRpdHkuXG4gKlxuICogQHBhcmFtICB7U2NoZW1hfSBzY2hlbWFcbiAqIEBwYXJhbSAge0ltbXV0YWJsZS5NYXB8SW1tdXRhYmxlLlJlY29yZH0gaW5wdXRcbiAqIEBwYXJhbSAge2Z1bmN0aW9ufSB1bnZpc2l0XG4gKiBAcGFyYW0gIHtmdW5jdGlvbn0gZ2V0RGVub3JtYWxpemVkRW50aXR5XG4gKiBAcmV0dXJuIHtJbW11dGFibGUuTWFwfEltbXV0YWJsZS5SZWNvcmR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZW5vcm1hbGl6ZUltbXV0YWJsZShcbiAgc2NoZW1hOiBhbnksXG4gIGlucHV0OiBhbnksXG4gIHVudmlzaXQ6IGFueSxcbik6IFtkZW5vcm1hbGl6ZWQ6IGFueSwgZm91bmQ6IGJvb2xlYW4sIGRlbGV0ZWQ6IGJvb2xlYW5dIHtcbiAgbGV0IGZvdW5kID0gdHJ1ZTtcbiAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcbiAgcmV0dXJuIFtcbiAgICBPYmplY3Qua2V5cyhzY2hlbWEpLnJlZHVjZSgob2JqZWN0LCBrZXkpID0+IHtcbiAgICAgIC8vIEltbXV0YWJsZSBtYXBzIGNhc3Qga2V5cyB0byBzdHJpbmdzIG9uIHdyaXRlIHNvIHdlIG5lZWQgdG8gZW5zdXJlXG4gICAgICAvLyB3ZSdyZSBhY2Nlc3NpbmcgdGhlbSB1c2luZyBzdHJpbmcga2V5cy5cbiAgICAgIGNvbnN0IHN0cmluZ0tleSA9IGAke2tleX1gO1xuXG4gICAgICBjb25zdCBbaXRlbSwgZm91bmRJdGVtLCBkZWxldGVkSXRlbV0gPSB1bnZpc2l0KFxuICAgICAgICBvYmplY3QuZ2V0KHN0cmluZ0tleSksXG4gICAgICAgIHNjaGVtYVtzdHJpbmdLZXldLFxuICAgICAgKTtcbiAgICAgIGlmICghZm91bmRJdGVtKSB7XG4gICAgICAgIGZvdW5kID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoZGVsZXRlZEl0ZW0pIHtcbiAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0LmhhcyhzdHJpbmdLZXkpKSB7XG4gICAgICAgIHJldHVybiBvYmplY3Quc2V0KHN0cmluZ0tleSwgaXRlbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgfVxuICAgIH0sIGlucHV0KSxcbiAgICBmb3VuZCxcbiAgICBkZWxldGVkLFxuICBdO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTQSxXQUFULENBQXFCQyxNQUFyQixFQUdMO0VBQ0EsT0FBTyxDQUFDLEVBQ04sT0FBT0EsTUFBTSxDQUFDQyxjQUFkLEtBQWlDLFVBQWpDLEtBQ0NDLE1BQU0sQ0FBQ0QsY0FBUCxDQUFzQkUsSUFBdEIsQ0FBMkJILE1BQTNCLEVBQW1DLFdBQW5DLEtBQW1EO0VBQ2hEQSxNQUFELENBQWdCSSxJQUFoQixJQUNDRixNQUFNLENBQUNELGNBQVAsQ0FBc0JFLElBQXRCLENBQTRCSCxNQUFELENBQWdCSSxJQUEzQyxFQUFpRCxXQUFqRCxDQUhKLENBRE0sQ0FBUixDQURBLENBTUc7QUFDSjtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxPQUFPLFNBQVNDLG9CQUFULENBQ0xDLE1BREssRUFFTEMsS0FGSyxFQUdMQyxPQUhLLEVBSWtEO0VBQ3ZELElBQUlDLEtBQUssR0FBRyxJQUFaO0VBQ0EsSUFBSUMsT0FBTyxHQUFHLEtBQWQ7RUFDQSxPQUFPLENBQ0xSLE1BQU0sQ0FBQ1MsSUFBUCxDQUFZTCxNQUFaLEVBQW9CTSxNQUFwQixDQUEyQixDQUFDWixNQUFELEVBQVNhLEdBQVQsS0FBaUI7SUFDMUM7SUFDQTtJQUNBLE1BQU1DLFNBQVMsR0FBSSxHQUFFRCxHQUFJLEVBQXpCO0lBRUEsTUFBTSxDQUFDRSxJQUFELEVBQU9DLFNBQVAsRUFBa0JDLFdBQWxCLElBQWlDVCxPQUFPLENBQzVDUixNQUFNLENBQUNrQixHQUFQLENBQVdKLFNBQVgsQ0FENEMsRUFFNUNSLE1BQU0sQ0FBQ1EsU0FBRCxDQUZzQyxDQUE5Qzs7SUFJQSxJQUFJLENBQUNFLFNBQUwsRUFBZ0I7TUFDZFAsS0FBSyxHQUFHLEtBQVI7SUFDRDs7SUFDRCxJQUFJUSxXQUFKLEVBQWlCO01BQ2ZQLE9BQU8sR0FBRyxJQUFWO0lBQ0Q7O0lBQ0QsSUFBSVYsTUFBTSxDQUFDbUIsR0FBUCxDQUFXTCxTQUFYLENBQUosRUFBMkI7TUFDekIsT0FBT2QsTUFBTSxDQUFDb0IsR0FBUCxDQUFXTixTQUFYLEVBQXNCQyxJQUF0QixDQUFQO0lBQ0QsQ0FGRCxNQUVPO01BQ0wsT0FBT2YsTUFBUDtJQUNEO0VBQ0YsQ0FwQkQsRUFvQkdPLEtBcEJILENBREssRUFzQkxFLEtBdEJLLEVBdUJMQyxPQXZCSyxDQUFQO0FBeUJEIn0=","import { isImmutable, denormalizeImmutable } from './ImmutableUtils.js';\nexport const normalize = (schema, input, parent, key, visit, addEntity, visitedEntities) => {\n const object = { ...input\n };\n Object.keys(schema).forEach(key => {\n const localSchema = schema[key];\n const value = visit(input[key], input, key, localSchema, addEntity, visitedEntities);\n\n if (value === undefined || value === null) {\n delete object[key];\n } else {\n object[key] = value;\n }\n });\n return object;\n};\nexport const denormalize = (schema, input, unvisit) => {\n if (isImmutable(input)) {\n return denormalizeImmutable(schema, input, unvisit);\n }\n\n const object = { ...input\n };\n let found = true;\n let deleted = false;\n Object.keys(schema).forEach(key => {\n const [item, foundItem, deletedItem] = unvisit(object[key], schema[key]);\n\n if (object[key] !== undefined) {\n object[key] = item;\n }\n\n if (deletedItem) {\n deleted = true;\n }\n\n if (!foundItem) {\n found = false;\n }\n });\n return [object, found, deleted];\n};\nexport function infer(schema, args, indexes, recurse) {\n const resultObject = {};\n\n for (const k of Object.keys(schema)) {\n resultObject[k] = recurse(schema[k], args, indexes);\n }\n\n return resultObject;\n}\n/**\n * Represents fixed objects\n * @see https://resthooks.io/docs/api/Object\n */\n\nexport default class ObjectSchema {\n constructor(definition) {\n this.schema = void 0;\n this.define(definition);\n }\n\n define(definition) {\n this.schema = Object.keys(definition).reduce((entitySchema, key) => {\n const schema = definition[key];\n return { ...entitySchema,\n [key]: schema\n };\n }, this.schema || {});\n }\n\n normalize(...args) {\n return normalize(this.schema, ...args);\n } // eslint-disable-next-line @typescript-eslint/ban-types\n\n\n denormalize(...args) {\n return denormalize(this.schema, ...args);\n }\n\n infer(args, indexes, recurse) {\n return infer(this.schema, args, indexes, recurse);\n }\n\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0ltbXV0YWJsZSIsImRlbm9ybWFsaXplSW1tdXRhYmxlIiwibm9ybWFsaXplIiwic2NoZW1hIiwiaW5wdXQiLCJwYXJlbnQiLCJrZXkiLCJ2aXNpdCIsImFkZEVudGl0eSIsInZpc2l0ZWRFbnRpdGllcyIsIm9iamVjdCIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwibG9jYWxTY2hlbWEiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsImRlbm9ybWFsaXplIiwidW52aXNpdCIsImZvdW5kIiwiZGVsZXRlZCIsIml0ZW0iLCJmb3VuZEl0ZW0iLCJkZWxldGVkSXRlbSIsImluZmVyIiwiYXJncyIsImluZGV4ZXMiLCJyZWN1cnNlIiwicmVzdWx0T2JqZWN0IiwiayIsIk9iamVjdFNjaGVtYSIsImNvbnN0cnVjdG9yIiwiZGVmaW5pdGlvbiIsImRlZmluZSIsInJlZHVjZSIsImVudGl0eVNjaGVtYSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWFzL09iamVjdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0ltbXV0YWJsZSwgZGVub3JtYWxpemVJbW11dGFibGUgfSBmcm9tICcuL0ltbXV0YWJsZVV0aWxzLmpzJztcblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZSA9IChcbiAgc2NoZW1hOiBhbnksXG4gIGlucHV0OiBhbnksXG4gIHBhcmVudDogYW55LFxuICBrZXk6IGFueSxcbiAgdmlzaXQ6IGFueSxcbiAgYWRkRW50aXR5OiBhbnksXG4gIHZpc2l0ZWRFbnRpdGllczogYW55LFxuKSA9PiB7XG4gIGNvbnN0IG9iamVjdCA9IHsgLi4uaW5wdXQgfTtcbiAgT2JqZWN0LmtleXMoc2NoZW1hKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgY29uc3QgbG9jYWxTY2hlbWEgPSBzY2hlbWFba2V5XTtcbiAgICBjb25zdCB2YWx1ZSA9IHZpc2l0KFxuICAgICAgaW5wdXRba2V5XSxcbiAgICAgIGlucHV0LFxuICAgICAga2V5LFxuICAgICAgbG9jYWxTY2hlbWEsXG4gICAgICBhZGRFbnRpdHksXG4gICAgICB2aXNpdGVkRW50aXRpZXMsXG4gICAgKTtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgZGVsZXRlIG9iamVjdFtrZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuXG5leHBvcnQgY29uc3QgZGVub3JtYWxpemUgPSAoXG4gIHNjaGVtYTogYW55LFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuICBpbnB1dDoge30sXG4gIHVudmlzaXQ6IGFueSxcbik6IFtkZW5vcm1hbGl6ZWQ6IGFueSwgZm91bmQ6IGJvb2xlYW4sIGRlbGV0ZWQ6IGJvb2xlYW5dID0+IHtcbiAgaWYgKGlzSW1tdXRhYmxlKGlucHV0KSkge1xuICAgIHJldHVybiBkZW5vcm1hbGl6ZUltbXV0YWJsZShzY2hlbWEsIGlucHV0LCB1bnZpc2l0KTtcbiAgfVxuXG4gIGNvbnN0IG9iamVjdCA9IHsgLi4uaW5wdXQgfTtcbiAgbGV0IGZvdW5kID0gdHJ1ZTtcbiAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcbiAgT2JqZWN0LmtleXMoc2NoZW1hKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgY29uc3QgW2l0ZW0sIGZvdW5kSXRlbSwgZGVsZXRlZEl0ZW1dID0gdW52aXNpdChvYmplY3Rba2V5XSwgc2NoZW1hW2tleV0pO1xuICAgIGlmIChvYmplY3Rba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvYmplY3Rba2V5XSA9IGl0ZW07XG4gICAgfVxuICAgIGlmIChkZWxldGVkSXRlbSkge1xuICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgfVxuICAgIGlmICghZm91bmRJdGVtKSB7XG4gICAgICBmb3VuZCA9IGZhbHNlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBbb2JqZWN0LCBmb3VuZCwgZGVsZXRlZF07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaW5mZXIoXG4gIHNjaGVtYTogYW55LFxuICBhcmdzOiByZWFkb25seSBhbnlbXSxcbiAgaW5kZXhlczogYW55LFxuICByZWN1cnNlOiBhbnksXG4pIHtcbiAgY29uc3QgcmVzdWx0T2JqZWN0OiBhbnkgPSB7fTtcbiAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHNjaGVtYSkpIHtcbiAgICByZXN1bHRPYmplY3Rba10gPSByZWN1cnNlKHNjaGVtYVtrXSwgYXJncywgaW5kZXhlcyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdE9iamVjdDtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGZpeGVkIG9iamVjdHNcbiAqIEBzZWUgaHR0cHM6Ly9yZXN0aG9va3MuaW8vZG9jcy9hcGkvT2JqZWN0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9iamVjdFNjaGVtYSB7XG4gIHByb3RlY3RlZCBzY2hlbWE6IGFueTtcblxuICBjb25zdHJ1Y3RvcihkZWZpbml0aW9uKSB7XG4gICAgdGhpcy5kZWZpbmUoZGVmaW5pdGlvbik7XG4gIH1cblxuICBkZWZpbmUoZGVmaW5pdGlvbikge1xuICAgIHRoaXMuc2NoZW1hID0gT2JqZWN0LmtleXMoZGVmaW5pdGlvbikucmVkdWNlKChlbnRpdHlTY2hlbWEsIGtleSkgPT4ge1xuICAgICAgY29uc3Qgc2NoZW1hID0gZGVmaW5pdGlvbltrZXldO1xuICAgICAgcmV0dXJuIHsgLi4uZW50aXR5U2NoZW1hLCBba2V5XTogc2NoZW1hIH07XG4gICAgfSwgdGhpcy5zY2hlbWEgfHwge30pO1xuICB9XG5cbiAgbm9ybWFsaXplKFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFtcbiAgICAgIGlucHV0OiBhbnksXG4gICAgICBwYXJlbnQ6IGFueSxcbiAgICAgIGtleTogYW55LFxuICAgICAgdmlzaXQ6IGFueSxcbiAgICAgIGFkZEVudGl0eTogYW55LFxuICAgICAgdmlzaXRlZEVudGl0aWVzOiBhbnksXG4gICAgXVxuICApIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHRoaXMuc2NoZW1hLCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG4gIGRlbm9ybWFsaXplKC4uLmFyZ3M6IHJlYWRvbmx5IFtpbnB1dDoge30sIHVudmlzaXQ6IGFueV0pIHtcbiAgICByZXR1cm4gZGVub3JtYWxpemUodGhpcy5zY2hlbWEsIC4uLmFyZ3MpO1xuICB9XG5cbiAgaW5mZXIoYXJnczogYW55LCBpbmRleGVzOiBhbnksIHJlY3Vyc2U6IGFueSkge1xuICAgIHJldHVybiBpbmZlcih0aGlzLnNjaGVtYSwgYXJncywgaW5kZXhlcywgcmVjdXJzZSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsV0FBVCxFQUFzQkMsb0JBQXRCLFFBQWtELHFCQUFsRDtBQUVBLE9BQU8sTUFBTUMsU0FBUyxHQUFHLENBQ3ZCQyxNQUR1QixFQUV2QkMsS0FGdUIsRUFHdkJDLE1BSHVCLEVBSXZCQyxHQUp1QixFQUt2QkMsS0FMdUIsRUFNdkJDLFNBTnVCLEVBT3ZCQyxlQVB1QixLQVFwQjtFQUNILE1BQU1DLE1BQU0sR0FBRyxFQUFFLEdBQUdOO0VBQUwsQ0FBZjtFQUNBTyxNQUFNLENBQUNDLElBQVAsQ0FBWVQsTUFBWixFQUFvQlUsT0FBcEIsQ0FBNEJQLEdBQUcsSUFBSTtJQUNqQyxNQUFNUSxXQUFXLEdBQUdYLE1BQU0sQ0FBQ0csR0FBRCxDQUExQjtJQUNBLE1BQU1TLEtBQUssR0FBR1IsS0FBSyxDQUNqQkgsS0FBSyxDQUFDRSxHQUFELENBRFksRUFFakJGLEtBRmlCLEVBR2pCRSxHQUhpQixFQUlqQlEsV0FKaUIsRUFLakJOLFNBTGlCLEVBTWpCQyxlQU5pQixDQUFuQjs7SUFRQSxJQUFJTSxLQUFLLEtBQUtDLFNBQVYsSUFBdUJELEtBQUssS0FBSyxJQUFyQyxFQUEyQztNQUN6QyxPQUFPTCxNQUFNLENBQUNK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","export const DELETED = Symbol('ENTITY WAS DELETED');\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUxFVEVEIiwiU3ltYm9sIl0sInNvdXJjZXMiOlsiLi4vc3JjL3NwZWNpYWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IERFTEVURUQgPSBTeW1ib2woJ0VOVElUWSBXQVMgREVMRVRFRCcpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU1BLE9BQU8sR0FBR0MsTUFBTSxDQUFDLG9CQUFELENBQXRCIn0=","// cheap lodash replacements\nexport function memoize(fn) {\n let result = null;\n const memoized = ()=>{\n if (result == null) {\n result = fn();\n }\n return result;\n };\n return memoized;\n}\n/**\n * drop-in replacement for _.without\n */ export function without(items, item) {\n return items.filter((i)=>i !== item\n );\n}\nexport function union(itemsA, itemsB) {\n const set = new Set();\n const insertItem = (item)=>set.add(item)\n ;\n itemsA.forEach(insertItem);\n itemsB.forEach(insertItem);\n const result = [];\n set.forEach((key)=>result.push(key)\n );\n return result;\n}\n\n//# sourceMappingURL=js_utils.js.map","import { union, without } from './utils/js_utils.js';\nexport class EnterLeaveCounter {\n enter(enteringNode) {\n const previousLength = this.entered.length;\n const isNodeEntered = (node)=>this.isNodeInDocument(node) && (!node.contains || node.contains(enteringNode))\n ;\n this.entered = union(this.entered.filter(isNodeEntered), [\n enteringNode\n ]);\n return previousLength === 0 && this.entered.length > 0;\n }\n leave(leavingNode) {\n const previousLength = this.entered.length;\n this.entered = without(this.entered.filter(this.isNodeInDocument), leavingNode);\n return previousLength > 0 && this.entered.length === 0;\n }\n reset() {\n this.entered = [];\n }\n constructor(isNodeInDocument){\n this.entered = [];\n this.isNodeInDocument = isNodeInDocument;\n }\n}\n\n//# sourceMappingURL=EnterLeaveCounter.js.map","export class NativeDragSource {\n initializeExposedProperties() {\n Object.keys(this.config.exposeProperties).forEach((property)=>{\n Object.defineProperty(this.item, property, {\n configurable: true,\n enumerable: true,\n get () {\n // eslint-disable-next-line no-console\n console.warn(`Browser doesn't allow reading \"${property}\" until the drop event.`);\n return null;\n }\n });\n });\n }\n loadDataTransfer(dataTransfer) {\n if (dataTransfer) {\n const newProperties = {};\n Object.keys(this.config.exposeProperties).forEach((property)=>{\n const propertyFn = this.config.exposeProperties[property];\n if (propertyFn != null) {\n newProperties[property] = {\n value: propertyFn(dataTransfer, this.config.matchesTypes),\n configurable: true,\n enumerable: true\n };\n }\n });\n Object.defineProperties(this.item, newProperties);\n }\n }\n canDrag() {\n return true;\n }\n beginDrag() {\n return this.item;\n }\n isDragging(monitor, handle) {\n return handle === monitor.getSourceId();\n }\n endDrag() {\n // empty\n }\n constructor(config){\n this.config = config;\n this.item = {};\n this.initializeExposedProperties();\n }\n}\n\n//# sourceMappingURL=NativeDragSource.js.map","export const FILE = '__NATIVE_FILE__';\nexport const URL = '__NATIVE_URL__';\nexport const TEXT = '__NATIVE_TEXT__';\nexport const HTML = '__NATIVE_HTML__';\n\n//# sourceMappingURL=NativeTypes.js.map","export function getDataFromDataTransfer(dataTransfer, typesToTry, defaultValue) {\n const result = typesToTry.reduce((resultSoFar, typeToTry)=>resultSoFar || dataTransfer.getData(typeToTry)\n , '');\n return result != null ? result : defaultValue;\n}\n\n//# sourceMappingURL=getDataFromDataTransfer.js.map","import * as NativeTypes from '../NativeTypes.js';\nimport { getDataFromDataTransfer } from './getDataFromDataTransfer.js';\nexport const nativeTypesConfig = {\n [NativeTypes.FILE]: {\n exposeProperties: {\n files: (dataTransfer)=>Array.prototype.slice.call(dataTransfer.files)\n ,\n items: (dataTransfer)=>dataTransfer.items\n ,\n dataTransfer: (dataTransfer)=>dataTransfer\n },\n matchesTypes: [\n 'Files'\n ]\n },\n [NativeTypes.HTML]: {\n exposeProperties: {\n html: (dataTransfer, matchesTypes)=>getDataFromDataTransfer(dataTransfer, matchesTypes, '')\n ,\n dataTransfer: (dataTransfer)=>dataTransfer\n },\n matchesTypes: [\n 'Html',\n 'text/html'\n ]\n },\n [NativeTypes.URL]: {\n exposeProperties: {\n urls: (dataTransfer, matchesTypes)=>getDataFromDataTransfer(dataTransfer, matchesTypes, '').split('\\n')\n ,\n dataTransfer: (dataTransfer)=>dataTransfer\n },\n matchesTypes: [\n 'Url',\n 'text/uri-list'\n ]\n },\n [NativeTypes.TEXT]: {\n exposeProperties: {\n text: (dataTransfer, matchesTypes)=>getDataFromDataTransfer(dataTransfer, matchesTypes, '')\n ,\n dataTransfer: (dataTransfer)=>dataTransfer\n },\n matchesTypes: [\n 'Text',\n 'text/plain'\n ]\n }\n};\n\n//# sourceMappingURL=nativeTypesConfig.js.map","import { NativeDragSource } from './NativeDragSource.js';\nimport { nativeTypesConfig } from './nativeTypesConfig.js';\nexport function createNativeDragSource(type, dataTransfer) {\n const config = nativeTypesConfig[type];\n if (!config) {\n throw new Error(`native type ${type} has no configuration`);\n }\n const result = new NativeDragSource(config);\n result.loadDataTransfer(dataTransfer);\n return result;\n}\nexport function matchNativeItemType(dataTransfer) {\n if (!dataTransfer) {\n return null;\n }\n const dataTransferTypes = Array.prototype.slice.call(dataTransfer.types || []);\n return Object.keys(nativeTypesConfig).filter((nativeItemType)=>{\n const typeConfig = nativeTypesConfig[nativeItemType];\n if (!(typeConfig === null || typeConfig === void 0 ? void 0 : typeConfig.matchesTypes)) {\n return false;\n }\n return typeConfig.matchesTypes.some((t)=>dataTransferTypes.indexOf(t) > -1\n );\n })[0] || null;\n}\n\n//# sourceMappingURL=index.js.map","import { memoize } from './utils/js_utils.js';\nexport const isFirefox = memoize(()=>/firefox/i.test(navigator.userAgent)\n);\nexport const isSafari = memoize(()=>Boolean(window.safari)\n);\n\n//# sourceMappingURL=BrowserDetector.js.map","export class MonotonicInterpolant {\n interpolate(x) {\n const { xs , ys , c1s , c2s , c3s } = this;\n // The rightmost point in the dataset should give an exact result\n let i = xs.length - 1;\n if (x === xs[i]) {\n return ys[i];\n }\n // Search for the interval x is in, returning the corresponding y if x is one of the original xs\n let low = 0;\n let high = c3s.length - 1;\n let mid;\n while(low <= high){\n mid = Math.floor(0.5 * (low + high));\n const xHere = xs[mid];\n if (xHere < x) {\n low = mid + 1;\n } else if (xHere > x) {\n high = mid - 1;\n } else {\n return ys[mid];\n }\n }\n i = Math.max(0, high);\n // Interpolate\n const diff = x - xs[i];\n const diffSq = diff * diff;\n return ys[i] + c1s[i] * diff + c2s[i] * diffSq + c3s[i] * diff * diffSq;\n }\n constructor(xs, ys){\n const { length } = xs;\n // Rearrange xs and ys so that xs is sorted\n const indexes = [];\n for(let i = 0; i < length; i++){\n indexes.push(i);\n }\n indexes.sort((a, b)=>xs[a] < xs[b] ? -1 : 1\n );\n // Get consecutive differences and slopes\n const dys = [];\n const dxs = [];\n const ms = [];\n let dx;\n let dy;\n for(let i1 = 0; i1 < length - 1; i1++){\n dx = xs[i1 + 1] - xs[i1];\n dy = ys[i1 + 1] - ys[i1];\n dxs.push(dx);\n dys.push(dy);\n ms.push(dy / dx);\n }\n // Get degree-1 coefficients\n const c1s = [\n ms[0]\n ];\n for(let i2 = 0; i2 < dxs.length - 1; i2++){\n const m2 = ms[i2];\n const mNext = ms[i2 + 1];\n if (m2 * mNext <= 0) {\n c1s.push(0);\n } else {\n dx = dxs[i2];\n const dxNext = dxs[i2 + 1];\n const common = dx + dxNext;\n c1s.push(3 * common / ((common + dxNext) / m2 + (common + dx) / mNext));\n }\n }\n c1s.push(ms[ms.length - 1]);\n // Get degree-2 and degree-3 coefficients\n const c2s = [];\n const c3s = [];\n let m;\n for(let i3 = 0; i3 < c1s.length - 1; i3++){\n m = ms[i3];\n const c1 = c1s[i3];\n const invDx = 1 / dxs[i3];\n const common = c1 + c1s[i3 + 1] - m - m;\n c2s.push((m - c1 - common) * invDx);\n c3s.push(common * invDx * invDx);\n }\n this.xs = xs;\n this.ys = ys;\n this.c1s = c1s;\n this.c2s = c2s;\n this.c3s = c3s;\n }\n}\n\n//# sourceMappingURL=MonotonicInterpolant.js.map","import { isFirefox, isSafari } from './BrowserDetector.js';\nimport { MonotonicInterpolant } from './MonotonicInterpolant.js';\nconst ELEMENT_NODE = 1;\nexport function getNodeClientOffset(node) {\n const el = node.nodeType === ELEMENT_NODE ? node : node.parentElement;\n if (!el) {\n return null;\n }\n const { top , left } = el.getBoundingClientRect();\n return {\n x: left,\n y: top\n };\n}\nexport function getEventClientOffset(e) {\n return {\n x: e.clientX,\n y: e.clientY\n };\n}\nfunction isImageNode(node) {\n var ref;\n return node.nodeName === 'IMG' && (isFirefox() || !((ref = document.documentElement) === null || ref === void 0 ? void 0 : ref.contains(node)));\n}\nfunction getDragPreviewSize(isImage, dragPreview, sourceWidth, sourceHeight) {\n let dragPreviewWidth = isImage ? dragPreview.width : sourceWidth;\n let dragPreviewHeight = isImage ? dragPreview.height : sourceHeight;\n // Work around @2x coordinate discrepancies in browsers\n if (isSafari() && isImage) {\n dragPreviewHeight /= window.devicePixelRatio;\n dragPreviewWidth /= window.devicePixelRatio;\n }\n return {\n dragPreviewWidth,\n dragPreviewHeight\n };\n}\nexport function getDragPreviewOffset(sourceNode, dragPreview, clientOffset, anchorPoint, offsetPoint) {\n // The browsers will use the image intrinsic size under different conditions.\n // Firefox only cares if it's an image, but WebKit also wants it to be detached.\n const isImage = isImageNode(dragPreview);\n const dragPreviewNode = isImage ? sourceNode : dragPreview;\n const dragPreviewNodeOffsetFromClient = getNodeClientOffset(dragPreviewNode);\n const offsetFromDragPreview = {\n x: clientOffset.x - dragPreviewNodeOffsetFromClient.x,\n y: clientOffset.y - dragPreviewNodeOffsetFromClient.y\n };\n const { offsetWidth: sourceWidth , offsetHeight: sourceHeight } = sourceNode;\n const { anchorX , anchorY } = anchorPoint;\n const { dragPreviewWidth , dragPreviewHeight } = getDragPreviewSize(isImage, dragPreview, sourceWidth, sourceHeight);\n const calculateYOffset = ()=>{\n const interpolantY = new MonotonicInterpolant([\n 0,\n 0.5,\n 1\n ], [\n // Dock to the top\n offsetFromDragPreview.y,\n // Align at the center\n (offsetFromDragPreview.y / sourceHeight) * dragPreviewHeight,\n // Dock to the bottom\n offsetFromDragPreview.y + dragPreviewHeight - sourceHeight, \n ]);\n let y = interpolantY.interpolate(anchorY);\n // Work around Safari 8 positioning bug\n if (isSafari() && isImage) {\n // We'll have to wait for @3x to see if this is entirely correct\n y += (window.devicePixelRatio - 1) * dragPreviewHeight;\n }\n return y;\n };\n const calculateXOffset = ()=>{\n // Interpolate coordinates depending on anchor point\n // If you know a simpler way to do this, let me know\n const interpolantX = new MonotonicInterpolant([\n 0,\n 0.5,\n 1\n ], [\n // Dock to the left\n offsetFromDragPreview.x,\n // Align at the center\n (offsetFromDragPreview.x / sourceWidth) * dragPreviewWidth,\n // Dock to the right\n offsetFromDragPreview.x + dragPreviewWidth - sourceWidth, \n ]);\n return interpolantX.interpolate(anchorX);\n };\n // Force offsets if specified in the options.\n const { offsetX , offsetY } = offsetPoint;\n const isManualOffsetX = offsetX === 0 || offsetX;\n const isManualOffsetY = offsetY === 0 || offsetY;\n return {\n x: isManualOffsetX ? offsetX : calculateXOffset(),\n y: isManualOffsetY ? offsetY : calculateYOffset()\n };\n}\n\n//# sourceMappingURL=OffsetUtils.js.map","export class OptionsReader {\n get window() {\n if (this.globalContext) {\n return this.globalContext;\n } else if (typeof window !== 'undefined') {\n return window;\n }\n return undefined;\n }\n get document() {\n var ref;\n if ((ref = this.globalContext) === null || ref === void 0 ? void 0 : ref.document) {\n return this.globalContext.document;\n } else if (this.window) {\n return this.window.document;\n } else {\n return undefined;\n }\n }\n get rootElement() {\n var ref;\n return ((ref = this.optionsArgs) === null || ref === void 0 ? void 0 : ref.rootElement) || this.window;\n }\n constructor(globalContext, options){\n this.ownerDocument = null;\n this.globalContext = globalContext;\n this.optionsArgs = options;\n }\n}\n\n//# sourceMappingURL=OptionsReader.js.map","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _objectSpread(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function(key) {\n _defineProperty(target, key, source[key]);\n });\n }\n return target;\n}\nimport { EnterLeaveCounter } from './EnterLeaveCounter.js';\nimport { createNativeDragSource, matchNativeItemType } from './NativeDragSources/index.js';\nimport * as NativeTypes from './NativeTypes.js';\nimport { getDragPreviewOffset, getEventClientOffset, getNodeClientOffset } from './OffsetUtils.js';\nimport { OptionsReader } from './OptionsReader.js';\nexport class HTML5BackendImpl {\n /**\n\t * Generate profiling statistics for the HTML5Backend.\n\t */ profile() {\n var ref, ref1;\n return {\n sourcePreviewNodes: this.sourcePreviewNodes.size,\n sourcePreviewNodeOptions: this.sourcePreviewNodeOptions.size,\n sourceNodeOptions: this.sourceNodeOptions.size,\n sourceNodes: this.sourceNodes.size,\n dragStartSourceIds: ((ref = this.dragStartSourceIds) === null || ref === void 0 ? void 0 : ref.length) || 0,\n dropTargetIds: this.dropTargetIds.length,\n dragEnterTargetIds: this.dragEnterTargetIds.length,\n dragOverTargetIds: ((ref1 = this.dragOverTargetIds) === null || ref1 === void 0 ? void 0 : ref1.length) || 0\n };\n }\n // public for test\n get window() {\n return this.options.window;\n }\n get document() {\n return this.options.document;\n }\n /**\n\t * Get the root element to use for event subscriptions\n\t */ get rootElement() {\n return this.options.rootElement;\n }\n setup() {\n const root = this.rootElement;\n if (root === undefined) {\n return;\n }\n if (root.__isReactDndBackendSetUp) {\n throw new Error('Cannot have two HTML5 backends at the same time.');\n }\n root.__isReactDndBackendSetUp = true;\n this.addEventListeners(root);\n }\n teardown() {\n const root = this.rootElement;\n if (root === undefined) {\n return;\n }\n root.__isReactDndBackendSetUp = false;\n this.removeEventListeners(this.rootElement);\n this.clearCurrentDragSourceNode();\n if (this.asyncEndDragFrameId) {\n var ref;\n (ref = this.window) === null || ref === void 0 ? void 0 : ref.cancelAnimationFrame(this.asyncEndDragFrameId);\n }\n }\n connectDragPreview(sourceId, node, options) {\n this.sourcePreviewNodeOptions.set(sourceId, options);\n this.sourcePreviewNodes.set(sourceId, node);\n return ()=>{\n this.sourcePreviewNodes.delete(sourceId);\n this.sourcePreviewNodeOptions.delete(sourceId);\n };\n }\n connectDragSource(sourceId, node, options) {\n this.sourceNodes.set(sourceId, node);\n this.sourceNodeOptions.set(sourceId, options);\n const handleDragStart = (e)=>this.handleDragStart(e, sourceId)\n ;\n const handleSelectStart = (e)=>this.handleSelectStart(e)\n ;\n node.setAttribute('draggable', 'true');\n node.addEventListener('dragstart', handleDragStart);\n node.addEventListener('selectstart', handleSelectStart);\n return ()=>{\n this.sourceNodes.delete(sourceId);\n this.sourceNodeOptions.delete(sourceId);\n node.removeEventListener('dragstart', handleDragStart);\n node.removeEventListener('selectstart', handleSelectStart);\n node.setAttribute('draggable', 'false');\n };\n }\n connectDropTarget(targetId, node) {\n const handleDragEnter = (e)=>this.handleDragEnter(e, targetId)\n ;\n const handleDragOver = (e)=>this.handleDragOver(e, targetId)\n ;\n const handleDrop = (e)=>this.handleDrop(e, targetId)\n ;\n node.addEventListener('dragenter', handleDragEnter);\n node.addEventListener('dragover', handleDragOver);\n node.addEventListener('drop', handleDrop);\n return ()=>{\n node.removeEventListener('dragenter', handleDragEnter);\n node.removeEventListener('dragover', handleDragOver);\n node.removeEventListener('drop', handleDrop);\n };\n }\n addEventListeners(target) {\n // SSR Fix (https://github.com/react-dnd/react-dnd/pull/813\n if (!target.addEventListener) {\n return;\n }\n target.addEventListener('dragstart', this.handleTopDragStart);\n target.addEventListener('dragstart', this.handleTopDragStartCapture, true);\n target.addEventListener('dragend', this.handleTopDragEndCapture, true);\n target.addEventListener('dragenter', this.handleTopDragEnter);\n target.addEventListener('dragenter', this.handleTopDragEnterCapture, true);\n target.addEventListener('dragleave', this.handleTopDragLeaveCapture, true);\n target.addEventListener('dragover', this.handleTopDragOver);\n target.addEventListener('dragover', this.handleTopDragOverCapture, true);\n target.addEventListener('drop', this.handleTopDrop);\n target.addEventListener('drop', this.handleTopDropCapture, true);\n }\n removeEventListeners(target) {\n // SSR Fix (https://github.com/react-dnd/react-dnd/pull/813\n if (!target.removeEventListener) {\n return;\n }\n target.removeEventListener('dragstart', this.handleTopDragStart);\n target.removeEventListener('dragstart', this.handleTopDragStartCapture, true);\n target.removeEventListener('dragend', this.handleTopDragEndCapture, true);\n target.removeEventListener('dragenter', this.handleTopDragEnter);\n target.removeEventListener('dragenter', this.handleTopDragEnterCapture, true);\n target.removeEventListener('dragleave', this.handleTopDragLeaveCapture, true);\n target.removeEventListener('dragover', this.handleTopDragOver);\n target.removeEventListener('dragover', this.handleTopDragOverCapture, true);\n target.removeEventListener('drop', this.handleTopDrop);\n target.removeEventListener('drop', this.handleTopDropCapture, true);\n }\n getCurrentSourceNodeOptions() {\n const sourceId = this.monitor.getSourceId();\n const sourceNodeOptions = this.sourceNodeOptions.get(sourceId);\n return _objectSpread({\n dropEffect: this.altKeyPressed ? 'copy' : 'move'\n }, sourceNodeOptions || {});\n }\n getCurrentDropEffect() {\n if (this.isDraggingNativeItem()) {\n // It makes more sense to default to 'copy' for native resources\n return 'copy';\n }\n return this.getCurrentSourceNodeOptions().dropEffect;\n }\n getCurrentSourcePreviewNodeOptions() {\n const sourceId = this.monitor.getSourceId();\n const sourcePreviewNodeOptions = this.sourcePreviewNodeOptions.get(sourceId);\n return _objectSpread({\n anchorX: 0.5,\n anchorY: 0.5,\n captureDraggingState: false\n }, sourcePreviewNodeOptions || {});\n }\n isDraggingNativeItem() {\n const itemType = this.monitor.getItemType();\n return Object.keys(NativeTypes).some((key)=>NativeTypes[key] === itemType\n );\n }\n beginDragNativeItem(type, dataTransfer) {\n this.clearCurrentDragSourceNode();\n this.currentNativeSource = createNativeDragSource(type, dataTransfer);\n this.currentNativeHandle = this.registry.addSource(type, this.currentNativeSource);\n this.actions.beginDrag([\n this.currentNativeHandle\n ]);\n }\n setCurrentDragSourceNode(node) {\n this.clearCurrentDragSourceNode();\n this.currentDragSourceNode = node;\n // A timeout of > 0 is necessary to resolve Firefox issue referenced\n // See:\n // * https://github.com/react-dnd/react-dnd/pull/928\n // * https://github.com/react-dnd/react-dnd/issues/869\n const MOUSE_MOVE_TIMEOUT = 1000;\n // Receiving a mouse event in the middle of a dragging operation\n // means it has ended and the drag source node disappeared from DOM,\n // so the browser didn't dispatch the dragend event.\n //\n // We need to wait before we start listening for mousemove events.\n // This is needed because the drag preview needs to be drawn or else it fires an 'mousemove' event\n // immediately in some browsers.\n //\n // See:\n // * https://github.com/react-dnd/react-dnd/pull/928\n // * https://github.com/react-dnd/react-dnd/issues/869\n //\n this.mouseMoveTimeoutTimer = setTimeout(()=>{\n var ref;\n return (ref = this.rootElement) === null || ref === void 0 ? void 0 : ref.addEventListener('mousemove', this.endDragIfSourceWasRemovedFromDOM, true);\n }, MOUSE_MOVE_TIMEOUT);\n }\n clearCurrentDragSourceNode() {\n if (this.currentDragSourceNode) {\n this.currentDragSourceNode = null;\n if (this.rootElement) {\n var ref;\n (ref = this.window) === null || ref === void 0 ? void 0 : ref.clearTimeout(this.mouseMoveTimeoutTimer || undefined);\n this.rootElement.removeEventListener('mousemove', this.endDragIfSourceWasRemovedFromDOM, true);\n }\n this.mouseMoveTimeoutTimer = null;\n return true;\n }\n return false;\n }\n handleDragStart(e, sourceId) {\n if (e.defaultPrevented) {\n return;\n }\n if (!this.dragStartSourceIds) {\n this.dragStartSourceIds = [];\n }\n this.dragStartSourceIds.unshift(sourceId);\n }\n handleDragEnter(_e, targetId) {\n this.dragEnterTargetIds.unshift(targetId);\n }\n handleDragOver(_e, targetId) {\n if (this.dragOverTargetIds === null) {\n this.dragOverTargetIds = [];\n }\n this.dragOverTargetIds.unshift(targetId);\n }\n handleDrop(_e, targetId) {\n this.dropTargetIds.unshift(targetId);\n }\n constructor(manager, globalContext, options){\n this.sourcePreviewNodes = new Map();\n this.sourcePreviewNodeOptions = new Map();\n this.sourceNodes = new Map();\n this.sourceNodeOptions = new Map();\n this.dragStartSourceIds = null;\n this.dropTargetIds = [];\n this.dragEnterTargetIds = [];\n this.currentNativeSource = null;\n this.currentNativeHandle = null;\n this.currentDragSourceNode = null;\n this.altKeyPressed = false;\n this.mouseMoveTimeoutTimer = null;\n this.asyncEndDragFrameId = null;\n this.dragOverTargetIds = null;\n this.lastClientOffset = null;\n this.hoverRafId = null;\n this.getSourceClientOffset = (sourceId)=>{\n const source = this.sourceNodes.get(sourceId);\n return source && getNodeClientOffset(source) || null;\n };\n this.endDragNativeItem = ()=>{\n if (!this.isDraggingNativeItem()) {\n return;\n }\n this.actions.endDrag();\n if (this.currentNativeHandle) {\n this.registry.removeSource(this.currentNativeHandle);\n }\n this.currentNativeHandle = null;\n this.currentNativeSource = null;\n };\n this.isNodeInDocument = (node)=>{\n // Check the node either in the main document or in the current context\n return Boolean(node && this.document && this.document.body && this.document.body.contains(node));\n };\n this.endDragIfSourceWasRemovedFromDOM = ()=>{\n const node = this.currentDragSourceNode;\n if (node == null || this.isNodeInDocument(node)) {\n return;\n }\n if (this.clearCurrentDragSourceNode() && this.monitor.isDragging()) {\n this.actions.endDrag();\n }\n this.cancelHover();\n };\n this.scheduleHover = (dragOverTargetIds)=>{\n if (this.hoverRafId === null && typeof requestAnimationFrame !== 'undefined') {\n this.hoverRafId = requestAnimationFrame(()=>{\n if (this.monitor.isDragging()) {\n this.actions.hover(dragOverTargetIds || [], {\n clientOffset: this.lastClientOffset\n });\n }\n this.hoverRafId = null;\n });\n }\n };\n this.cancelHover = ()=>{\n if (this.hoverRafId !== null && typeof cancelAnimationFrame !== 'undefined') {\n cancelAnimationFrame(this.hoverRafId);\n this.hoverRafId = null;\n }\n };\n this.handleTopDragStartCapture = ()=>{\n this.clearCurrentDragSourceNode();\n this.dragStartSourceIds = [];\n };\n this.handleTopDragStart = (e)=>{\n if (e.defaultPrevented) {\n return;\n }\n const { dragStartSourceIds } = this;\n this.dragStartSourceIds = null;\n const clientOffset = getEventClientOffset(e);\n // Avoid crashing if we missed a drop event or our previous drag died\n if (this.monitor.isDragging()) {\n this.actions.endDrag();\n this.cancelHover();\n }\n // Don't publish the source just yet (see why below)\n this.actions.beginDrag(dragStartSourceIds || [], {\n publishSource: false,\n getSourceClientOffset: this.getSourceClientOffset,\n clientOffset\n });\n const { dataTransfer } = e;\n const nativeType = matchNativeItemType(dataTransfer);\n if (this.monitor.isDragging()) {\n if (dataTransfer && typeof dataTransfer.setDragImage === 'function') {\n // Use custom drag image if user specifies it.\n // If child drag source refuses drag but parent agrees,\n // use parent's node as drag image. Neither works in IE though.\n const sourceId = this.monitor.getSourceId();\n const sourceNode = this.sourceNodes.get(sourceId);\n const dragPreview = this.sourcePreviewNodes.get(sourceId) || sourceNode;\n if (dragPreview) {\n const { anchorX , anchorY , offsetX , offsetY } = this.getCurrentSourcePreviewNodeOptions();\n const anchorPoint = {\n anchorX,\n anchorY\n };\n const offsetPoint = {\n offsetX,\n offsetY\n };\n const dragPreviewOffset = getDragPreviewOffset(sourceNode, dragPreview, clientOffset, anchorPoint, offsetPoint);\n dataTransfer.setDragImage(dragPreview, dragPreviewOffset.x, dragPreviewOffset.y);\n }\n }\n try {\n // Firefox won't drag without setting data\n dataTransfer === null || dataTransfer === void 0 ? void 0 : dataTransfer.setData('application/json', {});\n } catch (err) {\n // IE doesn't support MIME types in setData\n }\n // Store drag source node so we can check whether\n // it is removed from DOM and trigger endDrag manually.\n this.setCurrentDragSourceNode(e.target);\n // Now we are ready to publish the drag source.. or are we not?\n const { captureDraggingState } = this.getCurrentSourcePreviewNodeOptions();\n if (!captureDraggingState) {\n // Usually we want to publish it in the next tick so that browser\n // is able to screenshot the current (not yet dragging) state.\n //\n // It also neatly avoids a situation where render() returns null\n // in the same tick for the source element, and browser freaks out.\n setTimeout(()=>this.actions.publishDragSource()\n , 0);\n } else {\n // In some cases the user may want to override this behavior, e.g.\n // to work around IE not supporting custom drag previews.\n //\n // When using a custom drag layer, the only way to prevent\n // the default drag preview from drawing in IE is to screenshot\n // the dragging state in which the node itself has zero opacity\n // and height. In this case, though, returning null from render()\n // will abruptly end the dragging, which is not obvious.\n //\n // This is the reason such behavior is strictly opt-in.\n this.actions.publishDragSource();\n }\n } else if (nativeType) {\n // A native item (such as URL) dragged from inside the document\n this.beginDragNativeItem(nativeType);\n } else if (dataTransfer && !dataTransfer.types && (e.target && !e.target.hasAttribute || !e.target.hasAttribute('draggable'))) {\n // Looks like a Safari bug: dataTransfer.types is null, but there was no draggable.\n // Just let it drag. It's a native type (URL or text) and will be picked up in\n // dragenter handler.\n return;\n } else {\n // If by this time no drag source reacted, tell browser not to drag.\n e.preventDefault();\n }\n };\n this.handleTopDragEndCapture = ()=>{\n if (this.clearCurrentDragSourceNode() && this.monitor.isDragging()) {\n // Firefox can dispatch this event in an infinite loop\n // if dragend handler does something like showing an alert.\n // Only proceed if we have not handled it already.\n this.actions.endDrag();\n }\n this.cancelHover();\n };\n this.handleTopDragEnterCapture = (e)=>{\n this.dragEnterTargetIds = [];\n if (this.isDraggingNativeItem()) {\n var ref;\n (ref = this.currentNativeSource) === null || ref === void 0 ? void 0 : ref.loadDataTransfer(e.dataTransfer);\n }\n const isFirstEnter = this.enterLeaveCounter.enter(e.target);\n if (!isFirstEnter || this.monitor.isDragging()) {\n return;\n }\n const { dataTransfer } = e;\n const nativeType = matchNativeItemType(dataTransfer);\n if (nativeType) {\n // A native item (such as file or URL) dragged from outside the document\n this.beginDragNativeItem(nativeType, dataTransfer);\n }\n };\n this.handleTopDragEnter = (e)=>{\n const { dragEnterTargetIds } = this;\n this.dragEnterTargetIds = [];\n if (!this.monitor.isDragging()) {\n // This is probably a native item type we don't understand.\n return;\n }\n this.altKeyPressed = e.altKey;\n // If the target changes position as the result of `dragenter`, `dragover` might still\n // get dispatched despite target being no longer there. The easy solution is to check\n // whether there actually is a target before firing `hover`.\n if (dragEnterTargetIds.length > 0) {\n this.actions.hover(dragEnterTargetIds, {\n clientOffset: getEventClientOffset(e)\n });\n }\n const canDrop = dragEnterTargetIds.some((targetId)=>this.monitor.canDropOnTarget(targetId)\n );\n if (canDrop) {\n // IE requires this to fire dragover events\n e.preventDefault();\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = this.getCurrentDropEffect();\n }\n }\n };\n this.handleTopDragOverCapture = (e)=>{\n this.dragOverTargetIds = [];\n if (this.isDraggingNativeItem()) {\n var ref;\n (ref = this.currentNativeSource) === null || ref === void 0 ? void 0 : ref.loadDataTransfer(e.dataTransfer);\n }\n };\n this.handleTopDragOver = (e)=>{\n const { dragOverTargetIds } = this;\n this.dragOverTargetIds = [];\n if (!this.monitor.isDragging()) {\n // This is probably a native item type we don't understand.\n // Prevent default \"drop and blow away the whole document\" action.\n e.preventDefault();\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = 'none';\n }\n return;\n }\n this.altKeyPressed = e.altKey;\n this.lastClientOffset = getEventClientOffset(e);\n this.scheduleHover(dragOverTargetIds);\n const canDrop = (dragOverTargetIds || []).some((targetId)=>this.monitor.canDropOnTarget(targetId)\n );\n if (canDrop) {\n // Show user-specified drop effect.\n e.preventDefault();\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = this.getCurrentDropEffect();\n }\n } else if (this.isDraggingNativeItem()) {\n // Don't show a nice cursor but still prevent default\n // \"drop and blow away the whole document\" action.\n e.preventDefault();\n } else {\n e.preventDefault();\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = 'none';\n }\n }\n };\n this.handleTopDragLeaveCapture = (e)=>{\n if (this.isDraggingNativeItem()) {\n e.preventDefault();\n }\n const isLastLeave = this.enterLeaveCounter.leave(e.target);\n if (!isLastLeave) {\n return;\n }\n if (this.isDraggingNativeItem()) {\n setTimeout(()=>this.endDragNativeItem()\n , 0);\n }\n this.cancelHover();\n };\n this.handleTopDropCapture = (e)=>{\n this.dropTargetIds = [];\n if (this.isDraggingNativeItem()) {\n var ref;\n e.preventDefault();\n (ref = this.currentNativeSource) === null || ref === void 0 ? void 0 : ref.loadDataTransfer(e.dataTransfer);\n } else if (matchNativeItemType(e.dataTransfer)) {\n // Dragging some elements, like and may still behave like a native drag event,\n // even if the current drag event matches a user-defined type.\n // Stop the default behavior when we're not expecting a native item to be dropped.\n e.preventDefault();\n }\n this.enterLeaveCounter.reset();\n };\n this.handleTopDrop = (e)=>{\n const { dropTargetIds } = this;\n this.dropTargetIds = [];\n this.actions.hover(dropTargetIds, {\n clientOffset: getEventClientOffset(e)\n });\n this.actions.drop({\n dropEffect: this.getCurrentDropEffect()\n });\n if (this.isDraggingNativeItem()) {\n this.endDragNativeItem();\n } else if (this.monitor.isDragging()) {\n this.actions.endDrag();\n }\n this.cancelHover();\n };\n this.handleSelectStart = (e)=>{\n const target = e.target;\n // Only IE requires us to explicitly say\n // we want drag drop operation to start\n if (typeof target.dragDrop !== 'function') {\n return;\n }\n // Inputs and textareas should be selectable\n if (target.tagName === 'INPUT' || target.tagName === 'SELECT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return;\n }\n // For other targets, ask IE\n // to enable drag and drop\n e.preventDefault();\n target.dragDrop();\n };\n this.options = new OptionsReader(globalContext, options);\n this.actions = manager.getActions();\n this.monitor = manager.getMonitor();\n this.registry = manager.getRegistry();\n this.enterLeaveCounter = new EnterLeaveCounter(this.isNodeInDocument);\n }\n}\n\n//# sourceMappingURL=HTML5BackendImpl.js.map","import { HTML5BackendImpl } from './HTML5BackendImpl.js';\nimport * as _NativeTypes from './NativeTypes.js';\nexport { getEmptyImage } from './getEmptyImage.js';\nexport { _NativeTypes as NativeTypes };\nexport const HTML5Backend = function createBackend(manager, context, options) {\n return new HTML5BackendImpl(manager, context, options);\n};\n\n//# sourceMappingURL=index.js.map","import { createContext } from 'react';\n/**\n * Create the React Context\n */ export const DndContext = createContext({\n dragDropManager: undefined\n});\n\n//# sourceMappingURL=DndContext.js.map","import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\n\n/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nfunction formatProdErrorMessage(code) {\n return \"Minified Redux error #\" + code + \"; visit https://redux.js.org/Errors?code=\" + code + \" for the full message or \" + 'use the non-minified dev environment for full errors. ';\n}\n\n// Inlined version of the `symbol-observable` polyfill\nvar $$observable = (function () {\n return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n})();\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n INIT: \"@@redux/INIT\" + randomString(),\n REPLACE: \"@@redux/REPLACE\" + randomString(),\n PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n if (typeof obj !== 'object' || obj === null) return false;\n var proto = obj;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n}\n\n// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\nfunction miniKindOf(val) {\n if (val === void 0) return 'undefined';\n if (val === null) return 'null';\n var type = typeof val;\n\n switch (type) {\n case 'boolean':\n case 'string':\n case 'number':\n case 'symbol':\n case 'function':\n {\n return type;\n }\n }\n\n if (Array.isArray(val)) return 'array';\n if (isDate(val)) return 'date';\n if (isError(val)) return 'error';\n var constructorName = ctorName(val);\n\n switch (constructorName) {\n case 'Symbol':\n case 'Promise':\n case 'WeakMap':\n case 'WeakSet':\n case 'Map':\n case 'Set':\n return constructorName;\n } // other\n\n\n return type.slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\n\nfunction ctorName(val) {\n return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\n\nfunction isError(val) {\n return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\n\nfunction isDate(val) {\n if (val instanceof Date) return true;\n return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\n\nfunction kindOf(val) {\n var typeOfVal = typeof val;\n\n if (process.env.NODE_ENV !== 'production') {\n typeOfVal = miniKindOf(val);\n }\n\n return typeOfVal;\n}\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n }\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : \"Expected the enhancer to be a function. Instead, received: '\" + kindOf(enhancer) + \"'\");\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : \"Expected the root reducer to be a function. Instead, received: '\" + kindOf(reducer) + \"'\");\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n /**\n * This makes a shallow copy of currentListeners so we can use\n * nextListeners as a temporary list while dispatching.\n *\n * This prevents any bugs around consumers calling\n * subscribe/unsubscribe in the middle of a dispatch.\n */\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n\n\n function getState() {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n }\n\n return currentState;\n }\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n\n\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : \"Expected the listener to be a function. Instead, received: '\" + kindOf(listener) + \"'\");\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n\n var isSubscribed = true;\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n\n isSubscribed = false;\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n currentListeners = null;\n };\n }\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n\n\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : \"Actions must be plain objects. Instead, the actual type was: '\" + kindOf(action) + \"'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.\");\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : 'Reducers may not dispatch actions.');\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n\n return action;\n }\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n\n\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : \"Expected the nextReducer to be a function. Instead, received: '\" + kindOf(nextReducer));\n }\n\n currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n // Any reducers that existed in both the new and old rootReducer\n // will receive the previous state. This effectively populates\n // the new state tree with any relevant data from the old one.\n\n dispatch({\n type: ActionTypes.REPLACE\n });\n }\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n\n\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : \"Expected the observer to be an object. Instead, received: '\" + kindOf(observer) + \"'\");\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n } // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n\n\n dispatch({\n type: ActionTypes.INIT\n });\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[$$observable] = observable, _ref2;\n}\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nvar legacy_createStore = createStore;\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n\n\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n var reducerKeys = Object.keys(reducers);\n var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n\n if (!isPlainObject(inputState)) {\n return \"The \" + argumentName + \" has unexpected type of \\\"\" + kindOf(inputState) + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n }\n\n var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n });\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === ActionTypes.REPLACE) return;\n\n if (unexpectedKeys.length > 0) {\n return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n }\n}\n\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, {\n type: ActionTypes.INIT\n });\n\n if (typeof initialState === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n }\n\n if (typeof reducer(undefined, {\n type: ActionTypes.PROBE_UNKNOWN_ACTION()\n }) === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle '\" + ActionTypes.INIT + \"' or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n }\n });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\n\n for (var i = 0; i < reducerKeys.length; i++) {\n var key = reducerKeys[i];\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n }\n }\n\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n\n var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n // keys multiple times.\n\n var unexpectedKeyCache;\n\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n\n var shapeAssertionError;\n\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n\n return function combination(state, action) {\n if (state === void 0) {\n state = {};\n }\n\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n\n var hasChanged = false;\n var nextState = {};\n\n for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n var _key = finalReducerKeys[_i];\n var reducer = finalReducers[_key];\n var previousStateForKey = state[_key];\n var nextStateForKey = reducer(previousStateForKey, action);\n\n if (typeof nextStateForKey === 'undefined') {\n var actionType = action && action.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : \"When called with an action of type \" + (actionType ? \"\\\"\" + String(actionType) + \"\\\"\" : '(unknown type)') + \", the slice reducer for key \\\"\" + _key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\");\n }\n\n nextState[_key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(this, arguments));\n };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : \"bindActionCreators expected an object or a function, but instead received: '\" + kindOf(actionCreators) + \"'. \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n }\n\n var boundActionCreators = {};\n\n for (var key in actionCreators) {\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n\n return boundActionCreators;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(void 0, arguments));\n };\n });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function () {\n var store = createStore.apply(void 0, arguments);\n\n var _dispatch = function dispatch() {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n };\n\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch() {\n return _dispatch.apply(void 0, arguments);\n }\n };\n var chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = compose.apply(void 0, chain)(store.dispatch);\n return _objectSpread(_objectSpread({}, store), {}, {\n dispatch: _dispatch\n });\n };\n };\n}\n\n/*\n * This is a dummy function to check if the function name has been altered by minification.\n * If the function has been minified and NODE_ENV !== 'production', warn the user.\n */\n\nfunction isCrushed() {}\n\nif (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') {\n warning('You are currently using minified code outside of NODE_ENV === \"production\". ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or setting mode to production in webpack (https://webpack.js.org/concepts/mode/) ' + 'to ensure you have the correct code for your production build.');\n}\n\nexport { ActionTypes as __DO_NOT_USE__ActionTypes, applyMiddleware, bindActionCreators, combineReducers, compose, createStore, legacy_createStore };\n","// cheap lodash replacements\n/**\n * drop-in replacement for _.get\n * @param obj\n * @param path\n * @param defaultValue\n */ export function get(obj, path, defaultValue) {\n return path.split('.').reduce((a, c)=>a && a[c] ? a[c] : defaultValue || null\n , obj);\n}\n/**\n * drop-in replacement for _.without\n */ export function without(items, item) {\n return items.filter((i)=>i !== item\n );\n}\n/**\n * drop-in replacement for _.isString\n * @param input\n */ export function isString(input) {\n return typeof input === 'string';\n}\n/**\n * drop-in replacement for _.isString\n * @param input\n */ export function isObject(input) {\n return typeof input === 'object';\n}\n/**\n * replacement for _.xor\n * @param itemsA\n * @param itemsB\n */ export function xor(itemsA, itemsB) {\n const map = new Map();\n const insertItem = (item)=>{\n map.set(item, map.has(item) ? map.get(item) + 1 : 1);\n };\n itemsA.forEach(insertItem);\n itemsB.forEach(insertItem);\n const result = [];\n map.forEach((count, key)=>{\n if (count === 1) {\n result.push(key);\n }\n });\n return result;\n}\n/**\n * replacement for _.intersection\n * @param itemsA\n * @param itemsB\n */ export function intersection(itemsA, itemsB) {\n return itemsA.filter((t)=>itemsB.indexOf(t) > -1\n );\n}\n\n//# sourceMappingURL=js_utils.js.map","export const INIT_COORDS = 'dnd-core/INIT_COORDS';\nexport const BEGIN_DRAG = 'dnd-core/BEGIN_DRAG';\nexport const PUBLISH_DRAG_SOURCE = 'dnd-core/PUBLISH_DRAG_SOURCE';\nexport const HOVER = 'dnd-core/HOVER';\nexport const DROP = 'dnd-core/DROP';\nexport const END_DRAG = 'dnd-core/END_DRAG';\n\n//# sourceMappingURL=types.js.map","import { INIT_COORDS } from '../types.js';\nexport function setClientOffset(clientOffset, sourceClientOffset) {\n return {\n type: INIT_COORDS,\n payload: {\n sourceClientOffset: sourceClientOffset || null,\n clientOffset: clientOffset || null\n }\n };\n}\n\n//# sourceMappingURL=setClientOffset.js.map","import { invariant } from '@react-dnd/invariant';\nimport { isObject } from '../../utils/js_utils.js';\nimport { setClientOffset } from './local/setClientOffset.js';\nimport { BEGIN_DRAG, INIT_COORDS } from './types.js';\nconst ResetCoordinatesAction = {\n type: INIT_COORDS,\n payload: {\n clientOffset: null,\n sourceClientOffset: null\n }\n};\nexport function createBeginDrag(manager) {\n return function beginDrag(sourceIds = [], options = {\n publishSource: true\n }) {\n const { publishSource =true , clientOffset , getSourceClientOffset , } = options;\n const monitor = manager.getMonitor();\n const registry = manager.getRegistry();\n // Initialize the coordinates using the client offset\n manager.dispatch(setClientOffset(clientOffset));\n verifyInvariants(sourceIds, monitor, registry);\n // Get the draggable source\n const sourceId = getDraggableSource(sourceIds, monitor);\n if (sourceId == null) {\n manager.dispatch(ResetCoordinatesAction);\n return;\n }\n // Get the source client offset\n let sourceClientOffset = null;\n if (clientOffset) {\n if (!getSourceClientOffset) {\n throw new Error('getSourceClientOffset must be defined');\n }\n verifyGetSourceClientOffsetIsFunction(getSourceClientOffset);\n sourceClientOffset = getSourceClientOffset(sourceId);\n }\n // Initialize the full coordinates\n manager.dispatch(setClientOffset(clientOffset, sourceClientOffset));\n const source = registry.getSource(sourceId);\n const item = source.beginDrag(monitor, sourceId);\n // If source.beginDrag returns null, this is an indicator to cancel the drag\n if (item == null) {\n return undefined;\n }\n verifyItemIsObject(item);\n registry.pinSource(sourceId);\n const itemType = registry.getSourceType(sourceId);\n return {\n type: BEGIN_DRAG,\n payload: {\n itemType,\n item,\n sourceId,\n clientOffset: clientOffset || null,\n sourceClientOffset: sourceClientOffset || null,\n isSourcePublic: !!publishSource\n }\n };\n };\n}\nfunction verifyInvariants(sourceIds, monitor, registry) {\n invariant(!monitor.isDragging(), 'Cannot call beginDrag while dragging.');\n sourceIds.forEach(function(sourceId) {\n invariant(registry.getSource(sourceId), 'Expected sourceIds to be registered.');\n });\n}\nfunction verifyGetSourceClientOffsetIsFunction(getSourceClientOffset) {\n invariant(typeof getSourceClientOffset === 'function', 'When clientOffset is provided, getSourceClientOffset must be a function.');\n}\nfunction verifyItemIsObject(item) {\n invariant(isObject(item), 'Item must be an object.');\n}\nfunction getDraggableSource(sourceIds, monitor) {\n let sourceId = null;\n for(let i = sourceIds.length - 1; i >= 0; i--){\n if (monitor.canDragSource(sourceIds[i])) {\n sourceId = sourceIds[i];\n break;\n }\n }\n return sourceId;\n}\n\n//# sourceMappingURL=beginDrag.js.map","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _objectSpread(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function(key) {\n _defineProperty(target, key, source[key]);\n });\n }\n return target;\n}\nimport { invariant } from '@react-dnd/invariant';\nimport { isObject } from '../../utils/js_utils.js';\nimport { DROP } from './types.js';\nexport function createDrop(manager) {\n return function drop(options = {}) {\n const monitor = manager.getMonitor();\n const registry = manager.getRegistry();\n verifyInvariants(monitor);\n const targetIds = getDroppableTargets(monitor);\n // Multiple actions are dispatched here, which is why this doesn't return an action\n targetIds.forEach((targetId, index)=>{\n const dropResult = determineDropResult(targetId, index, registry, monitor);\n const action = {\n type: DROP,\n payload: {\n dropResult: _objectSpread({}, options, dropResult)\n }\n };\n manager.dispatch(action);\n });\n };\n}\nfunction verifyInvariants(monitor) {\n invariant(monitor.isDragging(), 'Cannot call drop while not dragging.');\n invariant(!monitor.didDrop(), 'Cannot call drop twice during one drag operation.');\n}\nfunction determineDropResult(targetId, index, registry, monitor) {\n const target = registry.getTarget(targetId);\n let dropResult = target ? target.drop(monitor, targetId) : undefined;\n verifyDropResultType(dropResult);\n if (typeof dropResult === 'undefined') {\n dropResult = index === 0 ? {} : monitor.getDropResult();\n }\n return dropResult;\n}\nfunction verifyDropResultType(dropResult) {\n invariant(typeof dropResult === 'undefined' || isObject(dropResult), 'Drop result must either be an object or undefined.');\n}\nfunction getDroppableTargets(monitor) {\n const targetIds = monitor.getTargetIds().filter(monitor.canDropOnTarget, monitor);\n targetIds.reverse();\n return targetIds;\n}\n\n//# sourceMappingURL=drop.js.map","import { invariant } from '@react-dnd/invariant';\nimport { END_DRAG } from './types.js';\nexport function createEndDrag(manager) {\n return function endDrag() {\n const monitor = manager.getMonitor();\n const registry = manager.getRegistry();\n verifyIsDragging(monitor);\n const sourceId = monitor.getSourceId();\n if (sourceId != null) {\n const source = registry.getSource(sourceId, true);\n source.endDrag(monitor, sourceId);\n registry.unpinSource();\n }\n return {\n type: END_DRAG\n };\n };\n}\nfunction verifyIsDragging(monitor) {\n invariant(monitor.isDragging(), 'Cannot call endDrag while not dragging.');\n}\n\n//# sourceMappingURL=endDrag.js.map","export function matchesType(targetType, draggedItemType) {\n if (draggedItemType === null) {\n return targetType === null;\n }\n return Array.isArray(targetType) ? targetType.some((t)=>t === draggedItemType\n ) : targetType === draggedItemType;\n}\n\n//# sourceMappingURL=matchesType.js.map","import { invariant } from '@react-dnd/invariant';\nimport { matchesType } from '../../utils/matchesType.js';\nimport { HOVER } from './types.js';\nexport function createHover(manager) {\n return function hover(targetIdsArg, { clientOffset } = {}) {\n verifyTargetIdsIsArray(targetIdsArg);\n const targetIds = targetIdsArg.slice(0);\n const monitor = manager.getMonitor();\n const registry = manager.getRegistry();\n const draggedItemType = monitor.getItemType();\n removeNonMatchingTargetIds(targetIds, registry, draggedItemType);\n checkInvariants(targetIds, monitor, registry);\n hoverAllTargets(targetIds, monitor, registry);\n return {\n type: HOVER,\n payload: {\n targetIds,\n clientOffset: clientOffset || null\n }\n };\n };\n}\nfunction verifyTargetIdsIsArray(targetIdsArg) {\n invariant(Array.isArray(targetIdsArg), 'Expected targetIds to be an array.');\n}\nfunction checkInvariants(targetIds, monitor, registry) {\n invariant(monitor.isDragging(), 'Cannot call hover while not dragging.');\n invariant(!monitor.didDrop(), 'Cannot call hover after drop.');\n for(let i = 0; i < targetIds.length; i++){\n const targetId = targetIds[i];\n invariant(targetIds.lastIndexOf(targetId) === i, 'Expected targetIds to be unique in the passed array.');\n const target = registry.getTarget(targetId);\n invariant(target, 'Expected targetIds to be registered.');\n }\n}\nfunction removeNonMatchingTargetIds(targetIds, registry, draggedItemType) {\n // Remove those targetIds that don't match the targetType. This\n // fixes shallow isOver which would only be non-shallow because of\n // non-matching targets.\n for(let i = targetIds.length - 1; i >= 0; i--){\n const targetId = targetIds[i];\n const targetType = registry.getTargetType(targetId);\n if (!matchesType(targetType, draggedItemType)) {\n targetIds.splice(i, 1);\n }\n }\n}\nfunction hoverAllTargets(targetIds, monitor, registry) {\n // Finally call hover on all matching targets.\n targetIds.forEach(function(targetId) {\n const target = registry.getTarget(targetId);\n target.hover(monitor, targetId);\n });\n}\n\n//# sourceMappingURL=hover.js.map","import { PUBLISH_DRAG_SOURCE } from './types.js';\nexport function createPublishDragSource(manager) {\n return function publishDragSource() {\n const monitor = manager.getMonitor();\n if (monitor.isDragging()) {\n return {\n type: PUBLISH_DRAG_SOURCE\n };\n }\n return;\n };\n}\n\n//# sourceMappingURL=publishDragSource.js.map","import { createDragDropActions } from '../actions/dragDrop/index.js';\nexport class DragDropManagerImpl {\n receiveBackend(backend) {\n this.backend = backend;\n }\n getMonitor() {\n return this.monitor;\n }\n getBackend() {\n return this.backend;\n }\n getRegistry() {\n return this.monitor.registry;\n }\n getActions() {\n /* eslint-disable-next-line @typescript-eslint/no-this-alias */ const manager = this;\n const { dispatch } = this.store;\n function bindActionCreator(actionCreator) {\n return (...args)=>{\n const action = actionCreator.apply(manager, args);\n if (typeof action !== 'undefined') {\n dispatch(action);\n }\n };\n }\n const actions = createDragDropActions(this);\n return Object.keys(actions).reduce((boundActions, key)=>{\n const action = actions[key];\n boundActions[key] = bindActionCreator(action);\n return boundActions;\n }, {});\n }\n dispatch(action) {\n this.store.dispatch(action);\n }\n constructor(store, monitor){\n this.isSetUp = false;\n this.handleRefCountChange = ()=>{\n const shouldSetUp = this.store.getState().refCount > 0;\n if (this.backend) {\n if (shouldSetUp && !this.isSetUp) {\n this.backend.setup();\n this.isSetUp = true;\n } else if (!shouldSetUp && this.isSetUp) {\n this.backend.teardown();\n this.isSetUp = false;\n }\n }\n };\n this.store = store;\n this.monitor = monitor;\n store.subscribe(this.handleRefCountChange);\n }\n}\n\n//# sourceMappingURL=DragDropManagerImpl.js.map","import { createBeginDrag } from './beginDrag.js';\nimport { createDrop } from './drop.js';\nimport { createEndDrag } from './endDrag.js';\nimport { createHover } from './hover.js';\nimport { createPublishDragSource } from './publishDragSource.js';\nexport * from './types.js';\nexport function createDragDropActions(manager) {\n return {\n beginDrag: createBeginDrag(manager),\n publishDragSource: createPublishDragSource(manager),\n hover: createHover(manager),\n drop: createDrop(manager),\n endDrag: createEndDrag(manager)\n };\n}\n\n//# sourceMappingURL=index.js.map","/**\n * Coordinate addition\n * @param a The first coordinate\n * @param b The second coordinate\n */ export function add(a, b) {\n return {\n x: a.x + b.x,\n y: a.y + b.y\n };\n}\n/**\n * Coordinate subtraction\n * @param a The first coordinate\n * @param b The second coordinate\n */ export function subtract(a, b) {\n return {\n x: a.x - b.x,\n y: a.y - b.y\n };\n}\n/**\n * Returns the cartesian distance of the drag source component's position, based on its position\n * at the time when the current drag operation has started, and the movement difference.\n *\n * Returns null if no item is being dragged.\n *\n * @param state The offset state to compute from\n */ export function getSourceClientOffset(state) {\n const { clientOffset , initialClientOffset , initialSourceClientOffset } = state;\n if (!clientOffset || !initialClientOffset || !initialSourceClientOffset) {\n return null;\n }\n return subtract(add(clientOffset, initialSourceClientOffset), initialClientOffset);\n}\n/**\n * Determines the x,y offset between the client offset and the initial client offset\n *\n * @param state The offset state to compute from\n */ export function getDifferenceFromInitialOffset(state) {\n const { clientOffset , initialClientOffset } = state;\n if (!clientOffset || !initialClientOffset) {\n return null;\n }\n return subtract(clientOffset, initialClientOffset);\n}\n\n//# sourceMappingURL=coords.js.map","import { intersection } from './js_utils.js';\nexport const NONE = [];\nexport const ALL = [];\nNONE.__IS_NONE__ = true;\nALL.__IS_ALL__ = true;\n/**\n * Determines if the given handler IDs are dirty or not.\n *\n * @param dirtyIds The set of dirty handler ids\n * @param handlerIds The set of handler ids to check\n */ export function areDirty(dirtyIds, handlerIds) {\n if (dirtyIds === NONE) {\n return false;\n }\n if (dirtyIds === ALL || typeof handlerIds === 'undefined') {\n return true;\n }\n const commonIds = intersection(handlerIds, dirtyIds);\n return commonIds.length > 0;\n}\n\n//# sourceMappingURL=dirtiness.js.map","import { invariant } from '@react-dnd/invariant';\nimport { getDifferenceFromInitialOffset, getSourceClientOffset } from '../utils/coords.js';\nimport { areDirty } from '../utils/dirtiness.js';\nimport { matchesType } from '../utils/matchesType.js';\nexport class DragDropMonitorImpl {\n subscribeToStateChange(listener, options = {}) {\n const { handlerIds } = options;\n invariant(typeof listener === 'function', 'listener must be a function.');\n invariant(typeof handlerIds === 'undefined' || Array.isArray(handlerIds), 'handlerIds, when specified, must be an array of strings.');\n let prevStateId = this.store.getState().stateId;\n const handleChange = ()=>{\n const state = this.store.getState();\n const currentStateId = state.stateId;\n try {\n const canSkipListener = currentStateId === prevStateId || currentStateId === prevStateId + 1 && !areDirty(state.dirtyHandlerIds, handlerIds);\n if (!canSkipListener) {\n listener();\n }\n } finally{\n prevStateId = currentStateId;\n }\n };\n return this.store.subscribe(handleChange);\n }\n subscribeToOffsetChange(listener) {\n invariant(typeof listener === 'function', 'listener must be a function.');\n let previousState = this.store.getState().dragOffset;\n const handleChange = ()=>{\n const nextState = this.store.getState().dragOffset;\n if (nextState === previousState) {\n return;\n }\n previousState = nextState;\n listener();\n };\n return this.store.subscribe(handleChange);\n }\n canDragSource(sourceId) {\n if (!sourceId) {\n return false;\n }\n const source = this.registry.getSource(sourceId);\n invariant(source, `Expected to find a valid source. sourceId=${sourceId}`);\n if (this.isDragging()) {\n return false;\n }\n return source.canDrag(this, sourceId);\n }\n canDropOnTarget(targetId) {\n // undefined on initial render\n if (!targetId) {\n return false;\n }\n const target = this.registry.getTarget(targetId);\n invariant(target, `Expected to find a valid target. targetId=${targetId}`);\n if (!this.isDragging() || this.didDrop()) {\n return false;\n }\n const targetType = this.registry.getTargetType(targetId);\n const draggedItemType = this.getItemType();\n return matchesType(targetType, draggedItemType) && target.canDrop(this, targetId);\n }\n isDragging() {\n return Boolean(this.getItemType());\n }\n isDraggingSource(sourceId) {\n // undefined on initial render\n if (!sourceId) {\n return false;\n }\n const source = this.registry.getSource(sourceId, true);\n invariant(source, `Expected to find a valid source. sourceId=${sourceId}`);\n if (!this.isDragging() || !this.isSourcePublic()) {\n return false;\n }\n const sourceType = this.registry.getSourceType(sourceId);\n const draggedItemType = this.getItemType();\n if (sourceType !== draggedItemType) {\n return false;\n }\n return source.isDragging(this, sourceId);\n }\n isOverTarget(targetId, options = {\n shallow: false\n }) {\n // undefined on initial render\n if (!targetId) {\n return false;\n }\n const { shallow } = options;\n if (!this.isDragging()) {\n return false;\n }\n const targetType = this.registry.getTargetType(targetId);\n const draggedItemType = this.getItemType();\n if (draggedItemType && !matchesType(targetType, draggedItemType)) {\n return false;\n }\n const targetIds = this.getTargetIds();\n if (!targetIds.length) {\n return false;\n }\n const index = targetIds.indexOf(targetId);\n if (shallow) {\n return index === targetIds.length - 1;\n } else {\n return index > -1;\n }\n }\n getItemType() {\n return this.store.getState().dragOperation.itemType;\n }\n getItem() {\n return this.store.getState().dragOperation.item;\n }\n getSourceId() {\n return this.store.getState().dragOperation.sourceId;\n }\n getTargetIds() {\n return this.store.getState().dragOperation.targetIds;\n }\n getDropResult() {\n return this.store.getState().dragOperation.dropResult;\n }\n didDrop() {\n return this.store.getState().dragOperation.didDrop;\n }\n isSourcePublic() {\n return Boolean(this.store.getState().dragOperation.isSourcePublic);\n }\n getInitialClientOffset() {\n return this.store.getState().dragOffset.initialClientOffset;\n }\n getInitialSourceClientOffset() {\n return this.store.getState().dragOffset.initialSourceClientOffset;\n }\n getClientOffset() {\n return this.store.getState().dragOffset.clientOffset;\n }\n getSourceClientOffset() {\n return getSourceClientOffset(this.store.getState().dragOffset);\n }\n getDifferenceFromInitialOffset() {\n return getDifferenceFromInitialOffset(this.store.getState().dragOffset);\n }\n constructor(store, registry){\n this.store = store;\n this.registry = registry;\n }\n}\n\n//# sourceMappingURL=DragDropMonitorImpl.js.map","// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that\n// have WebKitMutationObserver but not un-prefixed MutationObserver.\n// Must use `global` or `self` instead of `window` to work in both frames and web\n// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop.\n/* globals self */ const scope = typeof global !== 'undefined' ? global : self;\nconst BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver;\nexport function makeRequestCallFromTimer(callback) {\n return function requestCall() {\n // We dispatch a timeout with a specified delay of 0 for engines that\n // can reliably accommodate that request. This will usually be snapped\n // to a 4 milisecond delay, but once we're flushing, there's no delay\n // between events.\n const timeoutHandle = setTimeout(handleTimer, 0);\n // However, since this timer gets frequently dropped in Firefox\n // workers, we enlist an interval handle that will try to fire\n // an event 20 times per second until it succeeds.\n const intervalHandle = setInterval(handleTimer, 50);\n function handleTimer() {\n // Whichever timer succeeds will cancel both timers and\n // execute the callback.\n clearTimeout(timeoutHandle);\n clearInterval(intervalHandle);\n callback();\n }\n };\n}\n// To request a high priority event, we induce a mutation observer by toggling\n// the text of a text node between \"1\" and \"-1\".\nexport function makeRequestCallFromMutationObserver(callback) {\n let toggle = 1;\n const observer = new BrowserMutationObserver(callback);\n const node = document.createTextNode('');\n observer.observe(node, {\n characterData: true\n });\n return function requestCall() {\n toggle = -toggle;\n node.data = toggle;\n };\n}\nexport const makeRequestCall = typeof BrowserMutationObserver === 'function' ? // reliably everywhere they are implemented.\n// They are implemented in all modern browsers.\n//\n// - Android 4-4.3\n// - Chrome 26-34\n// - Firefox 14-29\n// - Internet Explorer 11\n// - iPad Safari 6-7.1\n// - iPhone Safari 7-7.1\n// - Safari 6-7\nmakeRequestCallFromMutationObserver : // task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera\n// 11-12, and in web workers in many engines.\n// Although message channels yield to any queued rendering and IO tasks, they\n// would be better than imposing the 4ms delay of timers.\n// However, they do not work reliably in Internet Explorer or Safari.\n// Internet Explorer 10 is the only browser that has setImmediate but does\n// not have MutationObservers.\n// Although setImmediate yields to the browser's renderer, it would be\n// preferrable to falling back to setTimeout since it does not have\n// the minimum 4ms penalty.\n// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and\n// Desktop to a lesser extent) that renders both setImmediate and\n// MessageChannel useless for the purposes of ASAP.\n// https://github.com/kriskowal/q/issues/396\n// Timers are implemented universally.\n// We fall back to timers in workers in most engines, and in foreground\n// contexts in the following browsers.\n// However, note that even this simple case requires nuances to operate in a\n// broad spectrum of browsers.\n//\n// - Firefox 3-13\n// - Internet Explorer 6-9\n// - iPad Safari 4.3\n// - Lynx 2.8.7\nmakeRequestCallFromTimer;\n\n//# sourceMappingURL=makeRequestCall.js.map","// `call`, just like a function.\nexport class RawTask {\n call() {\n try {\n this.task && this.task();\n } catch (error) {\n this.onError(error);\n } finally{\n this.task = null;\n this.release(this);\n }\n }\n constructor(onError, release){\n this.onError = onError;\n this.release = release;\n this.task = null;\n }\n}\n\n//# sourceMappingURL=RawTask.js.map","import { AsapQueue } from './AsapQueue.js';\nimport { TaskFactory } from './TaskFactory.js';\nconst asapQueue = new AsapQueue();\nconst taskFactory = new TaskFactory(asapQueue.registerPendingError);\n/**\n * Calls a task as soon as possible after returning, in its own event, with priority\n * over other events like animation, reflow, and repaint. An error thrown from an\n * event will not interrupt, nor even substantially slow down the processing of\n * other events, but will be rather postponed to a lower priority event.\n * @param {{call}} task A callable object, typically a function that takes no\n * arguments.\n */ export function asap(task) {\n asapQueue.enqueueTask(taskFactory.create(task));\n}\n\n//# sourceMappingURL=asap.js.map","/* eslint-disable no-restricted-globals, @typescript-eslint/ban-ts-comment, @typescript-eslint/no-unused-vars, @typescript-eslint/no-non-null-assertion */ import { makeRequestCall, makeRequestCallFromTimer } from './makeRequestCall.js';\nexport class AsapQueue {\n // Use the fastest means possible to execute a task in its own turn, with\n // priority over other events including IO, animation, reflow, and redraw\n // events in browsers.\n //\n // An exception thrown by a task will permanently interrupt the processing of\n // subsequent tasks. The higher level `asap` function ensures that if an\n // exception is thrown by a task, that the task queue will continue flushing as\n // soon as possible, but if you use `rawAsap` directly, you are responsible to\n // either ensure that no exceptions are thrown from your task, or to manually\n // call `rawAsap.requestFlush` if an exception is thrown.\n enqueueTask(task) {\n const { queue: q , requestFlush } = this;\n if (!q.length) {\n requestFlush();\n this.flushing = true;\n }\n // Equivalent to push, but avoids a function call.\n q[q.length] = task;\n }\n constructor(){\n this.queue = [];\n // We queue errors to ensure they are thrown in right order (FIFO).\n // Array-as-queue is good enough here, since we are just dealing with exceptions.\n this.pendingErrors = [];\n // Once a flush has been requested, no further calls to `requestFlush` are\n // necessary until the next `flush` completes.\n // @ts-ignore\n this.flushing = false;\n // The position of the next task to execute in the task queue. This is\n // preserved between calls to `flush` so that it can be resumed if\n // a task throws an exception.\n this.index = 0;\n // If a task schedules additional tasks recursively, the task queue can grow\n // unbounded. To prevent memory exhaustion, the task queue will periodically\n // truncate already-completed tasks.\n this.capacity = 1024;\n // The flush function processes all tasks that have been scheduled with\n // `rawAsap` unless and until one of those tasks throws an exception.\n // If a task throws an exception, `flush` ensures that its state will remain\n // consistent and will resume where it left off when called again.\n // However, `flush` does not make any arrangements to be called again if an\n // exception is thrown.\n this.flush = ()=>{\n const { queue: q } = this;\n while(this.index < q.length){\n const currentIndex = this.index;\n // Advance the index before calling the task. This ensures that we will\n // begin flushing on the next task the task throws an error.\n this.index++;\n q[currentIndex].call();\n // Prevent leaking memory for long chains of recursive calls to `asap`.\n // If we call `asap` within tasks scheduled by `asap`, the queue will\n // grow, but to avoid an O(n) walk for every task we execute, we don't\n // shift tasks off the queue after they have been executed.\n // Instead, we periodically shift 1024 tasks off the queue.\n if (this.index > this.capacity) {\n // Manually shift all values starting at the index back to the\n // beginning of the queue.\n for(let scan = 0, newLength = q.length - this.index; scan < newLength; scan++){\n q[scan] = q[scan + this.index];\n }\n q.length -= this.index;\n this.index = 0;\n }\n }\n q.length = 0;\n this.index = 0;\n this.flushing = false;\n };\n // In a web browser, exceptions are not fatal. However, to avoid\n // slowing down the queue of pending tasks, we rethrow the error in a\n // lower priority turn.\n this.registerPendingError = (err)=>{\n this.pendingErrors.push(err);\n this.requestErrorThrow();\n };\n // `requestFlush` requests that the high priority event queue be flushed as\n // soon as possible.\n // This is useful to prevent an error thrown in a task from stalling the event\n // queue if the exception handled by Node.js’s\n // `process.on(\"uncaughtException\")` or by a domain.\n // `requestFlush` is implemented using a strategy based on data collected from\n // every available SauceLabs Selenium web driver worker at time of writing.\n // https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593\n this.requestFlush = makeRequestCall(this.flush);\n this.requestErrorThrow = makeRequestCallFromTimer(()=>{\n // Throw first error\n if (this.pendingErrors.length) {\n throw this.pendingErrors.shift();\n }\n });\n }\n} // The message channel technique was discovered by Malte Ubl and was the\n // original foundation for this library.\n // http://www.nonblocking.io/2011/06/windownexttick.html\n // Safari 6.0.5 (at least) intermittently fails to create message ports on a\n // page's first load. Thankfully, this version of Safari supports\n // MutationObservers, so we don't need to fall back in that case.\n // function makeRequestCallFromMessageChannel(callback) {\n // var channel = new MessageChannel();\n // channel.port1.onmessage = callback;\n // return function requestCall() {\n // channel.port2.postMessage(0);\n // };\n // }\n // For reasons explained above, we are also unable to use `setImmediate`\n // under any circumstances.\n // Even if we were, there is another bug in Internet Explorer 10.\n // It is not sufficient to assign `setImmediate` to `requestFlush` because\n // `setImmediate` must be called *by name* and therefore must be wrapped in a\n // closure.\n // Never forget.\n // function makeRequestCallFromSetImmediate(callback) {\n // return function requestCall() {\n // setImmediate(callback);\n // };\n // }\n // Safari 6.0 has a problem where timers will get lost while the user is\n // scrolling. This problem does not impact ASAP because Safari 6.0 supports\n // mutation observers, so that implementation is used instead.\n // However, if we ever elect to use timers in Safari, the prevalent work-around\n // is to add a scroll event listener that calls for a flush.\n // `setTimeout` does not call the passed callback if the delay is less than\n // approximately 7 in web workers in Firefox 8 through 18, and sometimes not\n // even then.\n // This is for `asap.js` only.\n // Its name will be periodically randomized to break any code that depends on\n // // its existence.\n // rawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer\n // ASAP was originally a nextTick shim included in Q. This was factored out\n // into this ASAP package. It was later adapted to RSVP which made further\n // amendments. These decisions, particularly to marginalize MessageChannel and\n // to capture the MutationObserver implementation in a closure, were integrated\n // back into ASAP proper.\n // https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js\n\n//# sourceMappingURL=AsapQueue.js.map","import { RawTask } from './RawTask.js';\nexport class TaskFactory {\n create(task) {\n const tasks = this.freeTasks;\n const t1 = tasks.length ? tasks.pop() : new RawTask(this.onError, (t)=>tasks[tasks.length] = t\n );\n t1.task = task;\n return t1;\n }\n constructor(onError){\n this.onError = onError;\n this.freeTasks = [];\n }\n}\n\n//# sourceMappingURL=TaskFactory.js.map","export const ADD_SOURCE = 'dnd-core/ADD_SOURCE';\nexport const ADD_TARGET = 'dnd-core/ADD_TARGET';\nexport const REMOVE_SOURCE = 'dnd-core/REMOVE_SOURCE';\nexport const REMOVE_TARGET = 'dnd-core/REMOVE_TARGET';\nexport function addSource(sourceId) {\n return {\n type: ADD_SOURCE,\n payload: {\n sourceId\n }\n };\n}\nexport function addTarget(targetId) {\n return {\n type: ADD_TARGET,\n payload: {\n targetId\n }\n };\n}\nexport function removeSource(sourceId) {\n return {\n type: REMOVE_SOURCE,\n payload: {\n sourceId\n }\n };\n}\nexport function removeTarget(targetId) {\n return {\n type: REMOVE_TARGET,\n payload: {\n targetId\n }\n };\n}\n\n//# sourceMappingURL=registry.js.map","import { invariant } from '@react-dnd/invariant';\nexport function validateSourceContract(source) {\n invariant(typeof source.canDrag === 'function', 'Expected canDrag to be a function.');\n invariant(typeof source.beginDrag === 'function', 'Expected beginDrag to be a function.');\n invariant(typeof source.endDrag === 'function', 'Expected endDrag to be a function.');\n}\nexport function validateTargetContract(target) {\n invariant(typeof target.canDrop === 'function', 'Expected canDrop to be a function.');\n invariant(typeof target.hover === 'function', 'Expected hover to be a function.');\n invariant(typeof target.drop === 'function', 'Expected beginDrag to be a function.');\n}\nexport function validateType(type, allowArray) {\n if (allowArray && Array.isArray(type)) {\n type.forEach((t)=>validateType(t, false)\n );\n return;\n }\n invariant(typeof type === 'string' || typeof type === 'symbol', allowArray ? 'Type can only be a string, a symbol, or an array of either.' : 'Type can only be a string or a symbol.');\n}\n\n//# sourceMappingURL=contracts.js.map","export var HandlerRole;\n(function(HandlerRole) {\n HandlerRole[\"SOURCE\"] = \"SOURCE\";\n HandlerRole[\"TARGET\"] = \"TARGET\";\n})(HandlerRole || (HandlerRole = {}));\n\n//# sourceMappingURL=interfaces.js.map","let nextUniqueId = 0;\nexport function getNextUniqueId() {\n return nextUniqueId++;\n}\n\n//# sourceMappingURL=getNextUniqueId.js.map","import { asap } from '@react-dnd/asap';\nimport { invariant } from '@react-dnd/invariant';\nimport { addSource, addTarget, removeSource, removeTarget } from '../actions/registry.js';\nimport { validateSourceContract, validateTargetContract, validateType } from '../contracts.js';\nimport { HandlerRole } from '../interfaces.js';\nimport { getNextUniqueId } from '../utils/getNextUniqueId.js';\nfunction getNextHandlerId(role) {\n const id = getNextUniqueId().toString();\n switch(role){\n case HandlerRole.SOURCE:\n return `S${id}`;\n case HandlerRole.TARGET:\n return `T${id}`;\n default:\n throw new Error(`Unknown Handler Role: ${role}`);\n }\n}\nfunction parseRoleFromHandlerId(handlerId) {\n switch(handlerId[0]){\n case 'S':\n return HandlerRole.SOURCE;\n case 'T':\n return HandlerRole.TARGET;\n default:\n throw new Error(`Cannot parse handler ID: ${handlerId}`);\n }\n}\nfunction mapContainsValue(map, searchValue) {\n const entries = map.entries();\n let isDone = false;\n do {\n const { done , value: [, value] , } = entries.next();\n if (value === searchValue) {\n return true;\n }\n isDone = !!done;\n }while (!isDone)\n return false;\n}\nexport class HandlerRegistryImpl {\n addSource(type, source) {\n validateType(type);\n validateSourceContract(source);\n const sourceId = this.addHandler(HandlerRole.SOURCE, type, source);\n this.store.dispatch(addSource(sourceId));\n return sourceId;\n }\n addTarget(type, target) {\n validateType(type, true);\n validateTargetContract(target);\n const targetId = this.addHandler(HandlerRole.TARGET, type, target);\n this.store.dispatch(addTarget(targetId));\n return targetId;\n }\n containsHandler(handler) {\n return mapContainsValue(this.dragSources, handler) || mapContainsValue(this.dropTargets, handler);\n }\n getSource(sourceId, includePinned = false) {\n invariant(this.isSourceId(sourceId), 'Expected a valid source ID.');\n const isPinned = includePinned && sourceId === this.pinnedSourceId;\n const source = isPinned ? this.pinnedSource : this.dragSources.get(sourceId);\n return source;\n }\n getTarget(targetId) {\n invariant(this.isTargetId(targetId), 'Expected a valid target ID.');\n return this.dropTargets.get(targetId);\n }\n getSourceType(sourceId) {\n invariant(this.isSourceId(sourceId), 'Expected a valid source ID.');\n return this.types.get(sourceId);\n }\n getTargetType(targetId) {\n invariant(this.isTargetId(targetId), 'Expected a valid target ID.');\n return this.types.get(targetId);\n }\n isSourceId(handlerId) {\n const role = parseRoleFromHandlerId(handlerId);\n return role === HandlerRole.SOURCE;\n }\n isTargetId(handlerId) {\n const role = parseRoleFromHandlerId(handlerId);\n return role === HandlerRole.TARGET;\n }\n removeSource(sourceId) {\n invariant(this.getSource(sourceId), 'Expected an existing source.');\n this.store.dispatch(removeSource(sourceId));\n asap(()=>{\n this.dragSources.delete(sourceId);\n this.types.delete(sourceId);\n });\n }\n removeTarget(targetId) {\n invariant(this.getTarget(targetId), 'Expected an existing target.');\n this.store.dispatch(removeTarget(targetId));\n this.dropTargets.delete(targetId);\n this.types.delete(targetId);\n }\n pinSource(sourceId) {\n const source = this.getSource(sourceId);\n invariant(source, 'Expected an existing source.');\n this.pinnedSourceId = sourceId;\n this.pinnedSource = source;\n }\n unpinSource() {\n invariant(this.pinnedSource, 'No source is pinned at the time.');\n this.pinnedSourceId = null;\n this.pinnedSource = null;\n }\n addHandler(role, type, handler) {\n const id = getNextHandlerId(role);\n this.types.set(id, type);\n if (role === HandlerRole.SOURCE) {\n this.dragSources.set(id, handler);\n } else if (role === HandlerRole.TARGET) {\n this.dropTargets.set(id, handler);\n }\n return id;\n }\n constructor(store){\n this.types = new Map();\n this.dragSources = new Map();\n this.dropTargets = new Map();\n this.pinnedSourceId = null;\n this.pinnedSource = null;\n this.store = store;\n }\n}\n\n//# sourceMappingURL=HandlerRegistryImpl.js.map","export const strictEquality = (a, b)=>a === b\n;\n/**\n * Determine if two cartesian coordinate offsets are equal\n * @param offsetA\n * @param offsetB\n */ export function areCoordsEqual(offsetA, offsetB) {\n if (!offsetA && !offsetB) {\n return true;\n } else if (!offsetA || !offsetB) {\n return false;\n } else {\n return offsetA.x === offsetB.x && offsetA.y === offsetB.y;\n }\n}\n/**\n * Determines if two arrays of items are equal\n * @param a The first array of items\n * @param b The second array of items\n */ export function areArraysEqual(a, b, isEqual = strictEquality) {\n if (a.length !== b.length) {\n return false;\n }\n for(let i = 0; i < a.length; ++i){\n if (!isEqual(a[i], b[i])) {\n return false;\n }\n }\n return true;\n}\n\n//# sourceMappingURL=equality.js.map","import { BEGIN_DRAG, DROP, END_DRAG, HOVER, PUBLISH_DRAG_SOURCE } from '../actions/dragDrop/index.js';\nimport { ADD_SOURCE, ADD_TARGET, REMOVE_SOURCE, REMOVE_TARGET } from '../actions/registry.js';\nimport { ALL, NONE } from '../utils/dirtiness.js';\nimport { areArraysEqual } from '../utils/equality.js';\nimport { xor } from '../utils/js_utils.js';\nexport function reduce(// eslint-disable-next-line @typescript-eslint/no-unused-vars\n_state = NONE, action) {\n switch(action.type){\n case HOVER:\n break;\n case ADD_SOURCE:\n case ADD_TARGET:\n case REMOVE_TARGET:\n case REMOVE_SOURCE:\n return NONE;\n case BEGIN_DRAG:\n case PUBLISH_DRAG_SOURCE:\n case END_DRAG:\n case DROP:\n default:\n return ALL;\n }\n const { targetIds =[] , prevTargetIds =[] } = action.payload;\n const result = xor(targetIds, prevTargetIds);\n const didChange = result.length > 0 || !areArraysEqual(targetIds, prevTargetIds);\n if (!didChange) {\n return NONE;\n }\n // Check the target ids at the innermost position. If they are valid, add them\n // to the result\n const prevInnermostTargetId = prevTargetIds[prevTargetIds.length - 1];\n const innermostTargetId = targetIds[targetIds.length - 1];\n if (prevInnermostTargetId !== innermostTargetId) {\n if (prevInnermostTargetId) {\n result.push(prevInnermostTargetId);\n }\n if (innermostTargetId) {\n result.push(innermostTargetId);\n }\n }\n return result;\n}\n\n//# sourceMappingURL=dirtyHandlerIds.js.map","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _objectSpread(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function(key) {\n _defineProperty(target, key, source[key]);\n });\n }\n return target;\n}\nimport { BEGIN_DRAG, DROP, END_DRAG, HOVER, INIT_COORDS } from '../actions/dragDrop/index.js';\nimport { areCoordsEqual } from '../utils/equality.js';\nconst initialState = {\n initialSourceClientOffset: null,\n initialClientOffset: null,\n clientOffset: null\n};\nexport function reduce(state = initialState, action) {\n const { payload } = action;\n switch(action.type){\n case INIT_COORDS:\n case BEGIN_DRAG:\n return {\n initialSourceClientOffset: payload.sourceClientOffset,\n initialClientOffset: payload.clientOffset,\n clientOffset: payload.clientOffset\n };\n case HOVER:\n if (areCoordsEqual(state.clientOffset, payload.clientOffset)) {\n return state;\n }\n return _objectSpread({}, state, {\n clientOffset: payload.clientOffset\n });\n case END_DRAG:\n case DROP:\n return initialState;\n default:\n return state;\n }\n}\n\n//# sourceMappingURL=dragOffset.js.map","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _objectSpread(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function(key) {\n _defineProperty(target, key, source[key]);\n });\n }\n return target;\n}\nimport { BEGIN_DRAG, DROP, END_DRAG, HOVER, PUBLISH_DRAG_SOURCE } from '../actions/dragDrop/index.js';\nimport { REMOVE_TARGET } from '../actions/registry.js';\nimport { without } from '../utils/js_utils.js';\nconst initialState = {\n itemType: null,\n item: null,\n sourceId: null,\n targetIds: [],\n dropResult: null,\n didDrop: false,\n isSourcePublic: null\n};\nexport function reduce(state = initialState, action) {\n const { payload } = action;\n switch(action.type){\n case BEGIN_DRAG:\n return _objectSpread({}, state, {\n itemType: payload.itemType,\n item: payload.item,\n sourceId: payload.sourceId,\n isSourcePublic: payload.isSourcePublic,\n dropResult: null,\n didDrop: false\n });\n case PUBLISH_DRAG_SOURCE:\n return _objectSpread({}, state, {\n isSourcePublic: true\n });\n case HOVER:\n return _objectSpread({}, state, {\n targetIds: payload.targetIds\n });\n case REMOVE_TARGET:\n if (state.targetIds.indexOf(payload.targetId) === -1) {\n return state;\n }\n return _objectSpread({}, state, {\n targetIds: without(state.targetIds, payload.targetId)\n });\n case DROP:\n return _objectSpread({}, state, {\n dropResult: payload.dropResult,\n didDrop: true,\n targetIds: []\n });\n case END_DRAG:\n return _objectSpread({}, state, {\n itemType: null,\n item: null,\n sourceId: null,\n dropResult: null,\n didDrop: false,\n isSourcePublic: null,\n targetIds: []\n });\n default:\n return state;\n }\n}\n\n//# sourceMappingURL=dragOperation.js.map","import { ADD_SOURCE, ADD_TARGET, REMOVE_SOURCE, REMOVE_TARGET } from '../actions/registry.js';\nexport function reduce(state = 0, action) {\n switch(action.type){\n case ADD_SOURCE:\n case ADD_TARGET:\n return state + 1;\n case REMOVE_SOURCE:\n case REMOVE_TARGET:\n return state - 1;\n default:\n return state;\n }\n}\n\n//# sourceMappingURL=refCount.js.map","export function reduce(state = 0) {\n return state + 1;\n}\n\n//# sourceMappingURL=stateId.js.map","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _objectSpread(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function(key) {\n _defineProperty(target, key, source[key]);\n });\n }\n return target;\n}\nimport { get } from '../utils/js_utils.js';\nimport { reduce as dirtyHandlerIds } from './dirtyHandlerIds.js';\nimport { reduce as dragOffset } from './dragOffset.js';\nimport { reduce as dragOperation } from './dragOperation.js';\nimport { reduce as refCount } from './refCount.js';\nimport { reduce as stateId } from './stateId.js';\nexport function reduce(state = {}, action) {\n return {\n dirtyHandlerIds: dirtyHandlerIds(state.dirtyHandlerIds, {\n type: action.type,\n payload: _objectSpread({}, action.payload, {\n prevTargetIds: get(state, 'dragOperation.targetIds', [])\n })\n }),\n dragOffset: dragOffset(state.dragOffset, action),\n refCount: refCount(state.refCount, action),\n dragOperation: dragOperation(state.dragOperation, action),\n stateId: stateId(state.stateId)\n };\n}\n\n//# sourceMappingURL=index.js.map","import { createStore } from 'redux';\nimport { DragDropManagerImpl } from './classes/DragDropManagerImpl.js';\nimport { DragDropMonitorImpl } from './classes/DragDropMonitorImpl.js';\nimport { HandlerRegistryImpl } from './classes/HandlerRegistryImpl.js';\nimport { reduce } from './reducers/index.js';\nexport function createDragDropManager(backendFactory, globalContext = undefined, backendOptions = {}, debugMode = false) {\n const store = makeStoreInstance(debugMode);\n const monitor = new DragDropMonitorImpl(store, new HandlerRegistryImpl(store));\n const manager = new DragDropManagerImpl(store, monitor);\n const backend = backendFactory(manager, globalContext, backendOptions);\n manager.receiveBackend(backend);\n return manager;\n}\nfunction makeStoreInstance(debugMode) {\n // TODO: if we ever make a react-native version of this,\n // we'll need to consider how to pull off dev-tooling\n const reduxDevTools = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__;\n return createStore(reduce, debugMode && reduxDevTools && reduxDevTools({\n name: 'dnd-core',\n instanceId: 'dnd-core'\n }));\n}\n\n//# sourceMappingURL=createDragDropManager.js.map","function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for(i = 0; i < sourceSymbolKeys.length; i++){\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for(i = 0; i < sourceKeys.length; i++){\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createDragDropManager } from 'dnd-core';\nimport { memo, useEffect } from 'react';\nimport { DndContext } from './DndContext.js';\nlet refCount = 0;\nconst INSTANCE_SYM = Symbol.for('__REACT_DND_CONTEXT_INSTANCE__');\nvar DndProvider = /*#__PURE__*/ memo(function DndProvider(_param) {\n var { children } = _param, props = _objectWithoutProperties(_param, [\n \"children\"\n ]);\n const [manager, isGlobalInstance] = getDndContextValue(props) // memoized from props\n ;\n /**\n\t\t * If the global context was used to store the DND context\n\t\t * then where theres no more references to it we should\n\t\t * clean it up to avoid memory leaks\n\t\t */ useEffect(()=>{\n if (isGlobalInstance) {\n const context = getGlobalContext();\n ++refCount;\n return ()=>{\n if (--refCount === 0) {\n context[INSTANCE_SYM] = null;\n }\n };\n }\n return;\n }, []);\n return /*#__PURE__*/ _jsx(DndContext.Provider, {\n value: manager,\n children: children\n });\n});\n/**\n * A React component that provides the React-DnD context\n */ export { DndProvider, };\nfunction getDndContextValue(props) {\n if ('manager' in props) {\n const manager = {\n dragDropManager: props.manager\n };\n return [\n manager,\n false\n ];\n }\n const manager = createSingletonDndContext(props.backend, props.context, props.options, props.debugMode);\n const isGlobalInstance = !props.context;\n return [\n manager,\n isGlobalInstance\n ];\n}\nfunction createSingletonDndContext(backend, context = getGlobalContext(), options, debugMode) {\n const ctx = context;\n if (!ctx[INSTANCE_SYM]) {\n ctx[INSTANCE_SYM] = {\n dragDropManager: createDragDropManager(backend, context, options, debugMode)\n };\n }\n return ctx[INSTANCE_SYM];\n}\nfunction getGlobalContext() {\n return typeof global !== 'undefined' ? global : window;\n}\n\n//# sourceMappingURL=DndProvider.js.map","var REACT_ELEMENT_TYPE;\nexport default function _createRawReactElement(type, props, key, children) {\n REACT_ELEMENT_TYPE || (REACT_ELEMENT_TYPE = \"function\" == typeof Symbol && Symbol[\"for\"] && Symbol[\"for\"](\"react.element\") || 60103);\n var defaultProps = type && type.defaultProps,\n childrenLength = arguments.length - 3;\n if (props || 0 === childrenLength || (props = {\n children: void 0\n }), 1 === childrenLength) props.children = children;else if (childrenLength > 1) {\n for (var childArray = new Array(childrenLength), i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 3];\n }\n\n props.children = childArray;\n }\n if (props && defaultProps) for (var propName in defaultProps) {\n void 0 === props[propName] && (props[propName] = defaultProps[propName]);\n } else props || (props = defaultProps || {});\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: void 0 === key ? null : \"\" + key,\n ref: null,\n props: props,\n _owner: null\n };\n}","import _jsx from \"@babel/runtime/helpers/jsx\";\nimport React from 'react';\n\nfunction isNetworkError(error) {\n return Object.prototype.hasOwnProperty.call(error, 'status');\n}\n\n/**\n * Handles any networking errors from useResource()\n * @see https://resthooks.io/docs/api/NetworkErrorBoundary\n */\nexport default class NetworkErrorBoundary extends React.Component {\n constructor(...args) {\n super(...args);\n this.state = {};\n }\n\n static getDerivedStateFromError(error) {\n if (isNetworkError(error)) {\n return {\n error\n };\n } else {\n throw error;\n }\n }\n\n render() {\n if (!this.state.error) {\n return this.props.children;\n }\n\n return /*#__PURE__*/_jsx(this.props.fallbackComponent, {\n error: this.state.error\n });\n }\n\n}\nNetworkErrorBoundary.defaultProps = {\n fallbackComponent: ({\n error\n }) => {\n var _error$response;\n\n return /*#__PURE__*/_jsx(\"div\", {}, void 0, error.status, \" \", (_error$response = error.response) == null ? void 0 : _error$response.statusText);\n }\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsImlzTmV0d29ya0Vycm9yIiwiZXJyb3IiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJOZXR3b3JrRXJyb3JCb3VuZGFyeSIsIkNvbXBvbmVudCIsInN0YXRlIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIiwicmVuZGVyIiwicHJvcHMiLCJjaGlsZHJlbiIsImRlZmF1bHRQcm9wcyIsImZhbGxiYWNrQ29tcG9uZW50Iiwic3RhdHVzIiwicmVzcG9uc2UiLCJzdGF0dXNUZXh0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlYWN0LWludGVncmF0aW9uL05ldHdvcmtFcnJvckJvdW5kYXJ5LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBOZXR3b3JrRXJyb3IgfSBmcm9tICdAcmVzdC1ob29rcy9jb3JlJztcblxuZnVuY3Rpb24gaXNOZXR3b3JrRXJyb3IoZXJyb3I6IE5ldHdvcmtFcnJvciB8IHVua25vd24pOiBlcnJvciBpcyBOZXR3b3JrRXJyb3Ige1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVycm9yLCAnc3RhdHVzJyk7XG59XG5cbmludGVyZmFjZSBQcm9wczxFIGV4dGVuZHMgTmV0d29ya0Vycm9yPiB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGZhbGxiYWNrQ29tcG9uZW50OiBSZWFjdC5Db21wb25lbnRUeXBlPHsgZXJyb3I6IEUgfT47XG59XG5pbnRlcmZhY2UgU3RhdGU8RSBleHRlbmRzIE5ldHdvcmtFcnJvcj4ge1xuICBlcnJvcj86IEU7XG59XG4vKipcbiAqIEhhbmRsZXMgYW55IG5ldHdvcmtpbmcgZXJyb3JzIGZyb20gdXNlUmVzb3VyY2UoKVxuICogQHNlZSBodHRwczovL3Jlc3Rob29rcy5pby9kb2NzL2FwaS9OZXR3b3JrRXJyb3JCb3VuZGFyeVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXR3b3JrRXJyb3JCb3VuZGFyeTxcbiAgRSBleHRlbmRzIE5ldHdvcmtFcnJvcixcbj4gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UHJvcHM8RT4sIFN0YXRlPEU+PiB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgZmFsbGJhY2tDb21wb25lbnQ6ICh7IGVycm9yIH06IHsgZXJyb3I6IE5ldHdvcmtFcnJvciB9KSA9PiAoXG4gICAgICA8ZGl2PlxuICAgICAgICB7ZXJyb3Iuc3RhdHVzfSB7ZXJyb3IucmVzcG9uc2U/LnN0YXR1c1RleHR9XG4gICAgICA8L2Rpdj5cbiAgICApLFxuICB9O1xuXG4gIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3I6IE5ldHdvcmtFcnJvciB8IGFueSkge1xuICAgIGlmIChpc05ldHdvcmtFcnJvcihlcnJvcikpIHtcbiAgICAgIHJldHVybiB7IGVycm9yIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRlOiBTdGF0ZTxFPiA9IHt9O1xuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmVycm9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbiBhcyBhbnk7XG4gICAgfVxuICAgIHJldHVybiA8dGhpcy5wcm9wcy5mYWxsYmFja0NvbXBvbmVudCBlcnJvcj17dGhpcy5zdGF0ZS5lcnJvcn0gLz47XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU9BLEtBQVAsTUFBa0IsT0FBbEI7O0FBR0EsU0FBU0MsY0FBVCxDQUF3QkMsS0FBeEIsRUFBOEU7RUFDNUUsT0FBT0MsTUFBTSxDQUFDQyxTQUFQLENBQWlCQyxjQUFqQixDQUFnQ0MsSUFBaEMsQ0FBcUNKLEtBQXJDLEVBQTRDLFFBQTVDLENBQVA7QUFDRDs7QUFTRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTUssb0JBQU4sU0FFTFAsS0FBSyxDQUFDUSxTQUZELENBRStCO0VBQUE7SUFBQTtJQUFBLEtBaUI1Q0MsS0FqQjRDLEdBaUIxQixFQWpCMEI7RUFBQTs7RUFTYixPQUF4QkMsd0JBQXdCLENBQUNSLEtBQUQsRUFBNEI7SUFDekQsSUFBSUQsY0FBYyxDQUFDQyxLQUFELENBQWxCLEVBQTJCO01BQ3pCLE9BQU87UUFBRUE7TUFBRixDQUFQO0lBQ0QsQ0FGRCxNQUVPO01BQ0wsTUFBTUEsS0FBTjtJQUNEO0VBQ0Y7O0VBSURTLE1BQU0sR0FBZ0I7SUFDcEIsSUFBSSxDQUFDLEtBQUtGLEtBQUwsQ0FBV1AsS0FBaEIsRUFBdUI7TUFDckIsT0FBTyxLQUFLVSxLQUFMLENBQVdDLFFBQWxCO0lBQ0Q7O0lBQ0Qsb0JBQU8sVUFBTSxLQUFOLENBQVksaUJBQVo7TUFBOEIsS0FBSyxFQUFFLEtBQUtKLEtBQUwsQ0FBV1A7SUFBaEQsRUFBUDtFQUNEOztBQXhCMkM7QUFGekJLLG9CLENBR1pPLFksR0FBZTtFQUNwQkMsaUJBQWlCLEVBQUUsQ0FBQztJQUFFYjtFQUFGLENBQUQ7SUFBQTs7SUFBQSxvQkFDakIsd0JBQ0dBLEtBQUssQ0FBQ2MsTUFEVCwwQkFDa0JkLEtBQUssQ0FBQ2UsUUFEeEIscUJBQ2tCLGdCQUFnQkMsVUFEbEMsQ0FEaUI7RUFBQTtBQURDLEMifQ==","var REACT_ELEMENT_TYPE;\nexport default function _createRawReactElement(type, props, key, children) {\n REACT_ELEMENT_TYPE || (REACT_ELEMENT_TYPE = \"function\" == typeof Symbol && Symbol[\"for\"] && Symbol[\"for\"](\"react.element\") || 60103);\n var defaultProps = type && type.defaultProps,\n childrenLength = arguments.length - 3;\n if (props || 0 === childrenLength || (props = {\n children: void 0\n }), 1 === childrenLength) props.children = children;else if (childrenLength > 1) {\n for (var childArray = new Array(childrenLength), i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 3];\n }\n\n props.children = childArray;\n }\n if (props && defaultProps) for (var propName in defaultProps) {\n void 0 === props[propName] && (props[propName] = defaultProps[propName]);\n } else props || (props = defaultProps || {});\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: void 0 === key ? null : \"\" + key,\n ref: null,\n props: props,\n _owner: null\n };\n}","const RIC = typeof requestIdleCallback === 'function' ? requestIdleCallback : cb => setTimeout(cb, 0);\nexport default RIC;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSSUMiLCJyZXF1ZXN0SWRsZUNhbGxiYWNrIiwiY2IiLCJzZXRUaW1lb3V0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0YXRlL1JJQy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBSSUMgPVxuICB0eXBlb2YgcmVxdWVzdElkbGVDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gcmVxdWVzdElkbGVDYWxsYmFja1xuICAgIDogY2IgPT4gc2V0VGltZW91dChjYiwgMCk7XG5leHBvcnQgZGVmYXVsdCBSSUM7XG4iXSwibWFwcGluZ3MiOiJBQUFBLE1BQU1BLEdBQUcsR0FDUCxPQUFPQyxtQkFBUCxLQUErQixVQUEvQixHQUNJQSxtQkFESixHQUVJQyxFQUFFLElBQUlDLFVBQVUsQ0FBQ0QsRUFBRCxFQUFLLENBQUwsQ0FIdEI7QUFJQSxlQUFlRixHQUFmIn0=","import { RECEIVE_TYPE } from '../../actionTypes.js';\nexport default function createReceiveError(error, {\n schema,\n key,\n options,\n errorExpiryLength,\n fetchedAt = 0\n}) {\n /* istanbul ignore next */\n if (process.env.NODE_ENV === 'development' && errorExpiryLength < 0) {\n throw new Error('Negative errorExpiryLength are not allowed.');\n }\n\n const now = Date.now();\n return {\n type: RECEIVE_TYPE,\n payload: error,\n meta: {\n schema,\n key,\n date: now,\n fetchedAt,\n expiresAt: now + errorExpiryLength,\n errorPolicy: options == null ? void 0 : options.errorPolicy\n },\n error: true\n };\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSRUNFSVZFX1RZUEUiLCJjcmVhdGVSZWNlaXZlRXJyb3IiLCJlcnJvciIsInNjaGVtYSIsImtleSIsIm9wdGlvbnMiLCJlcnJvckV4cGlyeUxlbmd0aCIsImZldGNoZWRBdCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIkVycm9yIiwibm93IiwiRGF0ZSIsInR5cGUiLCJwYXlsb2FkIiwibWV0YSIsImRhdGUiLCJleHBpcmVzQXQiLCJlcnJvclBvbGljeSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdGF0ZS9hY3Rpb25zL2NyZWF0ZVJlY2VpdmVFcnJvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY2hlbWEgfSBmcm9tICdAcmVzdC1ob29rcy9lbmRwb2ludCc7XG5cbmltcG9ydCB7IEZldGNoQWN0aW9uLCBSZWNlaXZlQWN0aW9uLCBGZXRjaE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBSRUNFSVZFX1RZUEUgfSBmcm9tICcuLi8uLi9hY3Rpb25UeXBlcy5qcyc7XG5cbmludGVyZmFjZSBPcHRpb25zPFMgZXh0ZW5kcyBTY2hlbWEgfCB1bmRlZmluZWQgPSBhbnk+XG4gIGV4dGVuZHMgUGljazxGZXRjaEFjdGlvbjxhbnksIFM+WydtZXRhJ10sICdzY2hlbWEnIHwgJ2tleScgfCAnb3B0aW9ucyc+IHtcbiAgZXJyb3JFeHBpcnlMZW5ndGg6IE5vbk51bGxhYmxlPEZldGNoT3B0aW9uc1snZXJyb3JFeHBpcnlMZW5ndGgnXT47XG4gIGZldGNoZWRBdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUmVjZWl2ZUVycm9yPFMgZXh0ZW5kcyBTY2hlbWEgfCB1bmRlZmluZWQgPSBhbnk+KFxuICBlcnJvcjogRXJyb3IsXG4gIHsgc2NoZW1hLCBrZXksIG9wdGlvbnMsIGVycm9yRXhwaXJ5TGVuZ3RoLCBmZXRjaGVkQXQgPSAwIH06IE9wdGlvbnM8Uz4sXG4pOiBSZWNlaXZlQWN0aW9uIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnICYmIGVycm9yRXhwaXJ5TGVuZ3RoIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTmVnYXRpdmUgZXJyb3JFeHBpcnlMZW5ndGggYXJlIG5vdCBhbGxvd2VkLicpO1xuICB9XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogUkVDRUlWRV9UWVBFLFxuICAgIHBheWxvYWQ6IGVycm9yLFxuICAgIG1ldGE6IHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIGtleSxcbiAgICAgIGRhdGU6IG5vdyxcbiAgICAgIGZldGNoZWRBdCxcbiAgICAgIGV4cGlyZXNBdDogbm93ICsgZXJyb3JFeHBpcnlMZW5ndGgsXG4gICAgICBlcnJvclBvbGljeTogb3B0aW9ucz8uZXJyb3JQb2xpY3ksXG4gICAgfSxcbiAgICBlcnJvcjogdHJ1ZSxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBR0EsU0FBU0EsWUFBVCxRQUE2QixzQkFBN0I7QUFRQSxlQUFlLFNBQVNDLGtCQUFULENBQ2JDLEtBRGEsRUFFYjtFQUFFQyxNQUFGO0VBQVVDLEdBQVY7RUFBZUMsT0FBZjtFQUF3QkMsaUJBQXhCO0VBQTJDQyxTQUFTLEdBQUc7QUFBdkQsQ0FGYSxFQUdFO0VBQ2Y7RUFDQSxJQUFJQyxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsUUFBWixLQUF5QixhQUF6QixJQUEwQ0osaUJBQWlCLEdBQUcsQ0FBbEUsRUFBcUU7SUFDbkUsTUFBTSxJQUFJSyxLQUFKLENBQVUsNkNBQVYsQ0FBTjtFQUNEOztFQUNELE1BQU1DLEdBQUcsR0FBR0MsSUFBSSxDQUFDRCxHQUFMLEVBQVo7RUFDQSxPQUFPO0lBQ0xFLElBQUksRUFBRWQsWUFERDtJQUVMZSxPQUFPLEVBQUViLEtBRko7SUFHTGMsSUFBSSxFQUFFO01BQ0piLE1BREk7TUFFSkMsR0FGSTtNQUdKYSxJQUFJLEVBQUVMLEdBSEY7TUFJSkwsU0FKSTtNQUtKVyxTQUFTLEVBQUVOLEdBQUcsR0FBR04saUJBTGI7TUFNSmEsV0FBVyxFQUFFZCxPQUFGLG9CQUFFQSxPQUFPLENBQUVjO0lBTmxCLENBSEQ7SUFXTGpCLEtBQUssRUFBRTtFQVhGLENBQVA7QUFhRCJ9","import { RECEIVE_TYPE, FETCH_TYPE, RESET_TYPE } from '../actionTypes.js';\nimport RIC from './RIC.js';\nimport { createReceive, createReceiveError } from './actions/index.js';\nimport { initialState } from './createReducer.js';\nexport class ResetError extends Error {\n constructor() {\n super('Aborted due to RESET');\n this.name = 'ResetError';\n }\n\n}\n/** Handles all async network dispatches\n *\n * Dedupes concurrent requests by keeping track of all fetches in flight\n * and returning existing promises for requests already in flight.\n *\n * Interfaces with store via a redux-compatible middleware.\n */\n\nexport default class NetworkManager {\n constructor(dataExpiryLength = 60000, errorExpiryLength = 1000) {\n this.fetched = {};\n this.resolvers = {};\n this.rejectors = {};\n\n this.getState = () => initialState;\n\n this.dataExpiryLength = dataExpiryLength;\n this.errorExpiryLength = errorExpiryLength;\n\n this.middleware = ({\n dispatch,\n getState,\n controller\n }) => {\n this.getState = getState;\n return next => action => {\n var _action$endpoint;\n\n switch (action.type) {\n case FETCH_TYPE:\n this.handleFetch(action, dispatch, controller); // This is the only case that causes any state change\n // It's important to intercept other fetches as we don't want to trigger reducers during\n // render - so we need to stop 'readonly' fetches which can be triggered in render\n\n if (action.meta.optimisticResponse !== undefined || ((_action$endpoint = action.endpoint) == null ? void 0 : _action$endpoint.getOptimisticResponse) !== undefined) {\n return next(action);\n }\n\n return Promise.resolve();\n\n case RECEIVE_TYPE:\n // only receive after new state is computed\n return next(action).then(() => {\n if (action.meta.key in this.fetched) {\n var _getState$meta$action;\n\n // Note: meta *must* be set by reducer so this should be safe\n const error = (_getState$meta$action = getState().meta[action.meta.key]) == null ? void 0 : _getState$meta$action.error; // processing errors result in state meta having error, so we should reject the promise\n\n if (error) {\n this.handleReceive(createReceiveError(error, action.meta));\n } else {\n this.handleReceive(action);\n }\n }\n });\n\n case RESET_TYPE:\n {\n const rejectors = { ...this.rejectors\n };\n this.clearAll();\n return next(action).then(() => {\n // there could be external listeners to the promise\n // this must happen after commit so our own rejector knows not to dispatch an error based on this\n for (const k in rejectors) {\n rejectors[k](new ResetError());\n }\n });\n }\n\n default:\n return next(action);\n }\n };\n };\n }\n /** Used by DevtoolsManager to determine whether to log an action */\n\n\n skipLogging(action) {\n /* istanbul ignore next */\n return action.type === FETCH_TYPE && Object.prototype.hasOwnProperty.call(this.fetched, action.meta.key);\n }\n /** Ensures all promises are completed by rejecting remaining. */\n\n\n cleanup() {\n // ensure no dispatches after unmount\n const cleanupDate = Date.now();\n\n this.getLastReset = () => cleanupDate;\n\n this.clearAll();\n }\n /** Clear all promise state */\n\n\n clearAll() {\n for (const k in this.rejectors) {\n this.clear(k);\n }\n }\n /** Clear promise state for a given key */\n\n\n clear(key) {\n delete this.resolvers[key];\n delete this.rejectors[key];\n delete this.fetched[key];\n }\n\n getLastReset() {\n const lastReset = this.getState().lastReset;\n if (lastReset instanceof Date) return lastReset.valueOf();\n if (typeof lastReset !== 'number') return -Infinity;\n return lastReset;\n }\n /** Called when middleware intercepts 'rest-hooks/fetch' action.\n *\n * Will then start a promise for a key and potentially start the network\n * fetch.\n *\n * Uses throttle only when instructed by action meta. This is valuable\n * for ensures mutation requests always go through.\n */\n\n\n handleFetch(action, dispatch, controller) {\n const fetch = action.payload;\n const {\n key,\n throttle,\n resolve,\n reject\n } = action.meta; // TODO(breaking): remove support for Date type in 'Receive' action\n\n const createdAt = typeof action.meta.createdAt !== 'number' ? action.meta.createdAt.getTime() : action.meta.createdAt;\n\n const deferedFetch = () => {\n let promise = fetch();\n\n const resolvePromise = promise => promise.then(data => {\n resolve(data);\n return data;\n }).catch(error => {\n reject(error);\n throw error;\n }); // schedule non-throttled resolutions in a microtask before receive\n // this enables users awaiting their fetch to trigger any react updates needed to deal\n // with upcoming changes because of the fetch (for instance avoiding suspense if something is deleted)\n\n\n if (!throttle && action.endpoint) {\n promise = resolvePromise(promise);\n }\n\n promise = promise.then(data => {\n let lastReset = this.getLastReset();\n /* istanbul ignore else */\n\n if (process.env.NODE_ENV !== 'production' && isNaN(lastReset)) {\n console.error('state.lastReset is NaN. Only positive timestamps are valid.');\n lastReset = 0;\n } // don't update state with promises started before last clear\n\n\n if (createdAt >= lastReset) {\n // we still check for controller in case someone didn't have type protection since this didn't always exist\n if (action.endpoint && controller) {\n controller.resolve(action.endpoint, {\n args: action.meta.args,\n response: data,\n fetchedAt: createdAt\n });\n } else {\n var _action$meta$options$, _action$meta$options;\n\n // does this throw if the reducer fails? - no because reducer is wrapped in try/catch\n dispatch(createReceive(data, { ...action.meta,\n fetchedAt: createdAt,\n dataExpiryLength: (_action$meta$options$ = (_action$meta$options = action.meta.options) == null ? void 0 : _action$meta$options.dataExpiryLength) != null ? _action$meta$options$ : this.dataExpiryLength\n }));\n }\n }\n\n return data;\n }).catch(error => {\n const lastReset = this.getLastReset(); // don't update state with promises started before last clear\n\n if (createdAt >= lastReset) {\n if (action.endpoint && controller) {\n controller.resolve(action.endpoint, {\n args: action.meta.args,\n response: error,\n fetchedAt: createdAt,\n error: true\n });\n } else {\n var _action$meta$options$2, _action$meta$options2;\n\n dispatch(createReceiveError(error, { ...action.meta,\n errorExpiryLength: (_action$meta$options$2 = (_action$meta$options2 = action.meta.options) == null ? void 0 : _action$meta$options2.errorExpiryLength) != null ? _action$meta$options$2 : this.errorExpiryLength,\n fetchedAt: createdAt\n }));\n }\n }\n\n throw error;\n }); // legacy behavior schedules resolution after dispatch\n\n if (!throttle && !action.endpoint) {\n promise = resolvePromise(promise);\n }\n\n return promise;\n };\n\n if (throttle) {\n return this.throttle(key, deferedFetch).then(data => resolve(data)).catch(error => reject(error));\n } else {\n return deferedFetch().catch(() => {});\n }\n }\n /** Called when middleware intercepts a receive action.\n *\n * Will resolve the promise associated with receive key.\n */\n\n\n handleReceive(action) {\n // this can still turn out to be untrue since this is async\n if (Object.prototype.hasOwnProperty.call(this.fetched, action.meta.key)) {\n let promiseHandler;\n\n if (action.error) {\n promiseHandler = this.rejectors[action.meta.key];\n } else {\n promiseHandler = this.resolvers[action.meta.key];\n }\n\n promiseHandler(action.payload); // since we're resolved we no longer need to keep track of this promise\n\n this.clear(action.meta.key);\n }\n }\n /** Attaches NetworkManager to store\n *\n * Intercepts 'rest-hooks/fetch' actions to start requests.\n *\n * Resolve/rejects a request when matching 'rest-hooks/receive' event\n * is seen.\n */\n\n\n getMiddleware() {\n return this.middleware;\n }\n /** Ensures only one request for a given key is in flight at any time\n *\n * Uses key to either retrieve in-flight promise, or if not\n * create a new promise and call fetch.\n *\n * Note: The new promise is not actually tied to fetch at all,\n * but is resolved when the expected 'recieve' action is processed.\n * This ensures promises are resolved only once their data is processed\n * by the reducer.\n */\n\n\n throttle(key, fetch) {\n // we're already fetching so reuse the promise\n if (key in this.fetched) {\n return this.fetched[key];\n }\n\n this.fetched[key] = new Promise((resolve, reject) => {\n this.resolvers[key] = resolve;\n this.rejectors[key] = reject;\n }); // since our real promise is resolved via the wrapReducer(),\n // we should just stop all errors here.\n // TODO: decouple this from useFetcher() (that's what's dispatching the error the resolves in here)\n\n RIC(() => {\n fetch().catch(() => null);\n }, {\n timeout: 500\n });\n return this.fetched[key];\n }\n\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSRUNFSVZFX1RZUEUiLCJGRVRDSF9UWVBFIiwiUkVTRVRfVFlQRSIsIlJJQyIsImNyZWF0ZVJlY2VpdmUiLCJjcmVhdGVSZWNlaXZlRXJyb3IiLCJpbml0aWFsU3RhdGUiLCJSZXNldEVycm9yIiwiRXJyb3IiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJOZXR3b3JrTWFuYWdlciIsImRhdGFFeHBpcnlMZW5ndGgiLCJlcnJvckV4cGlyeUxlbmd0aCIsImZldGNoZWQiLCJyZXNvbHZlcnMiLCJyZWplY3RvcnMiLCJnZXRTdGF0ZSIsIm1pZGRsZXdhcmUiLCJkaXNwYXRjaCIsImNvbnRyb2xsZXIiLCJuZXh0IiwiYWN0aW9uIiwidHlwZSIsImhhbmRsZUZldGNoIiwibWV0YSIsIm9wdGltaXN0aWNSZXNwb25zZSIsInVuZGVmaW5lZCIsImVuZHBvaW50IiwiZ2V0T3B0aW1pc3RpY1Jlc3BvbnNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwia2V5IiwiZXJyb3IiLCJoYW5kbGVSZWNlaXZlIiwiY2xlYXJBbGwiLCJrIiwic2tpcExvZ2dpbmciLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJjbGVhbnVwIiwiY2xlYW51cERhdGUiLCJEYXRlIiwibm93IiwiZ2V0TGFzdFJlc2V0IiwiY2xlYXIiLCJsYXN0UmVzZXQiLCJ2YWx1ZU9mIiwiSW5maW5pdHkiLCJmZXRjaCIsInBheWxvYWQiLCJ0aHJvdHRsZSIsInJlamVjdCIsImNyZWF0ZWRBdCIsImdldFRpbWUiLCJkZWZlcmVkRmV0Y2giLCJwcm9taXNlIiwicmVzb2x2ZVByb21pc2UiLCJkYXRhIiwiY2F0Y2giLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJpc05hTiIsImNvbnNvbGUiLCJhcmdzIiwicmVzcG9uc2UiLCJmZXRjaGVkQXQiLCJvcHRpb25zIiwicHJvbWlzZUhhbmRsZXIiLCJnZXRNaWRkbGV3YXJlIiwidGltZW91dCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGF0ZS9OZXR3b3JrTWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBGZXRjaEFjdGlvbixcbiAgUmVjZWl2ZUFjdGlvbixcbiAgTWFuYWdlcixcbiAgU3RhdGUsXG4gIEFjdGlvblR5cGVzLFxuICBNaWRkbGV3YXJlQVBJLFxuICBNaWRkbGV3YXJlLFxuICBEaXNwYXRjaCxcbn0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHsgUkVDRUlWRV9UWVBFLCBGRVRDSF9UWVBFLCBSRVNFVF9UWVBFIH0gZnJvbSAnLi4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IFJJQyBmcm9tICcuL1JJQy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVSZWNlaXZlLCBjcmVhdGVSZWNlaXZlRXJyb3IgfSBmcm9tICcuL2FjdGlvbnMvaW5kZXguanMnO1xuaW1wb3J0IHsgaW5pdGlhbFN0YXRlIH0gZnJvbSAnLi9jcmVhdGVSZWR1Y2VyLmpzJztcbmltcG9ydCBDb250cm9sbGVyIGZyb20gJy4uL2NvbnRyb2xsZXIvQ29udHJvbGxlci5qcyc7XG5cbmV4cG9ydCBjbGFzcyBSZXNldEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBuYW1lID0gJ1Jlc2V0RXJyb3InO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdBYm9ydGVkIGR1ZSB0byBSRVNFVCcpO1xuICB9XG59XG5cbi8qKiBIYW5kbGVzIGFsbCBhc3luYyBuZXR3b3JrIGRpc3BhdGNoZXNcbiAqXG4gKiBEZWR1cGVzIGNvbmN1cnJlbnQgcmVxdWVzdHMgYnkga2VlcGluZyB0cmFjayBvZiBhbGwgZmV0Y2hlcyBpbiBmbGlnaHRcbiAqIGFuZCByZXR1cm5pbmcgZXhpc3RpbmcgcHJvbWlzZXMgZm9yIHJlcXVlc3RzIGFscmVhZHkgaW4gZmxpZ2h0LlxuICpcbiAqIEludGVyZmFjZXMgd2l0aCBzdG9yZSB2aWEgYSByZWR1eC1jb21wYXRpYmxlIG1pZGRsZXdhcmUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ldHdvcmtNYW5hZ2VyIGltcGxlbWVudHMgTWFuYWdlciB7XG4gIHByb3RlY3RlZCBmZXRjaGVkOiB7IFtrOiBzdHJpbmddOiBQcm9taXNlPGFueT4gfSA9IHt9O1xuICBwcm90ZWN0ZWQgcmVzb2x2ZXJzOiB7IFtrOiBzdHJpbmddOiAodmFsdWU/OiBhbnkpID0+IHZvaWQgfSA9IHt9O1xuICBwcm90ZWN0ZWQgcmVqZWN0b3JzOiB7IFtrOiBzdHJpbmddOiAodmFsdWU/OiBhbnkpID0+IHZvaWQgfSA9IHt9O1xuICBkZWNsYXJlIHJlYWRvbmx5IGRhdGFFeHBpcnlMZW5ndGg6IG51bWJlcjtcbiAgZGVjbGFyZSByZWFkb25seSBlcnJvckV4cGlyeUxlbmd0aDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgZGVjbGFyZSBtaWRkbGV3YXJlOiBNaWRkbGV3YXJlO1xuICBwcm90ZWN0ZWQgZ2V0U3RhdGU6ICgpID0+IFN0YXRlPHVua25vd24+ID0gKCkgPT4gaW5pdGlhbFN0YXRlO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGFFeHBpcnlMZW5ndGggPSA2MDAwMCwgZXJyb3JFeHBpcnlMZW5ndGggPSAxMDAwKSB7XG4gICAgdGhpcy5kYXRhRXhwaXJ5TGVuZ3RoID0gZGF0YUV4cGlyeUxlbmd0aDtcbiAgICB0aGlzLmVycm9yRXhwaXJ5TGVuZ3RoID0gZXJyb3JFeHBpcnlMZW5ndGg7XG5cbiAgICB0aGlzLm1pZGRsZXdhcmUgPSA8UiBleHRlbmRzIFJlYWN0LlJlZHVjZXI8YW55LCBhbnk+Pih7XG4gICAgICBkaXNwYXRjaCxcbiAgICAgIGdldFN0YXRlLFxuICAgICAgY29udHJvbGxlcixcbiAgICB9OiBNaWRkbGV3YXJlQVBJPFI+KSA9PiB7XG4gICAgICB0aGlzLmdldFN0YXRlID0gZ2V0U3RhdGU7XG4gICAgICByZXR1cm4gKG5leHQ6IERpc3BhdGNoPFI+KSA9PlxuICAgICAgICAoYWN0aW9uOiBSZWFjdC5SZWR1Y2VyQWN0aW9uPFI+KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgICAgICAgY2FzZSBGRVRDSF9UWVBFOlxuICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZldGNoKGFjdGlvbiwgZGlzcGF0Y2gsIGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBvbmx5IGNhc2UgdGhhdCBjYXVzZXMgYW55IHN0YXRlIGNoYW5nZVxuICAgICAgICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBpbnRlcmNlcHQgb3RoZXIgZmV0Y2hlcyBhcyB3ZSBkb24ndCB3YW50IHRvIHRyaWdnZXIgcmVkdWNlcnMgZHVyaW5nXG4gICAgICAgICAgICAgIC8vIHJlbmRlciAtIHNvIHdlIG5lZWQgdG8gc3RvcCAncmVhZG9ubHknIGZldGNoZXMgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBpbiByZW5kZXJcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGFjdGlvbi5tZXRhLm9wdGltaXN0aWNSZXNwb25zZSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgYWN0aW9uLmVuZHBvaW50Py5nZXRPcHRpbWlzdGljUmVzcG9uc2UgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgIGNhc2UgUkVDRUlWRV9UWVBFOlxuICAgICAgICAgICAgICAvLyBvbmx5IHJlY2VpdmUgYWZ0ZXIgbmV3IHN0YXRlIGlzIGNvbXB1dGVkXG4gICAgICAgICAgICAgIHJldHVybiBuZXh0KGFjdGlvbikudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5tZXRhLmtleSBpbiB0aGlzLmZldGNoZWQpIHtcbiAgICAgICAgICAgICAgICAgIC8vIE5vdGU6IG1ldGEgKm11c3QqIGJlIHNldCBieSByZWR1Y2VyIHNvIHRoaXMgc2hvdWxkIGJlIHNhZmVcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gZ2V0U3RhdGUoKS5tZXRhW2FjdGlvbi5tZXRhLmtleV0/LmVycm9yO1xuICAgICAgICAgICAgICAgICAgLy8gcHJvY2Vzc2luZyBlcnJvcnMgcmVzdWx0IGluIHN0YXRlIG1ldGEgaGF2aW5nIGVycm9yLCBzbyB3ZSBzaG91bGQgcmVqZWN0IHRoZSBwcm9taXNlXG4gICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSZWNlaXZlKGNyZWF0ZVJlY2VpdmVFcnJvcihlcnJvciwgYWN0aW9uLm1ldGEpKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVjZWl2ZShhY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjYXNlIFJFU0VUX1RZUEU6IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVqZWN0b3JzID0geyAuLi50aGlzLnJlamVjdG9ycyB9O1xuXG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJBbGwoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQoYWN0aW9uKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyB0aGVyZSBjb3VsZCBiZSBleHRlcm5hbCBsaXN0ZW5lcnMgdG8gdGhlIHByb21pc2VcbiAgICAgICAgICAgICAgICAvLyB0aGlzIG11c3QgaGFwcGVuIGFmdGVyIGNvbW1pdCBzbyBvdXIgb3duIHJlamVjdG9yIGtub3dzIG5vdCB0byBkaXNwYXRjaCBhbiBlcnJvciBiYXNlZCBvbiB0aGlzXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrIGluIHJlamVjdG9ycykge1xuICAgICAgICAgICAgICAgICAgcmVqZWN0b3JzW2tdKG5ldyBSZXNldEVycm9yKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9O1xuICB9XG5cbiAgLyoqIFVzZWQgYnkgRGV2dG9vbHNNYW5hZ2VyIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGxvZyBhbiBhY3Rpb24gKi9cbiAgc2tpcExvZ2dpbmcoYWN0aW9uOiBBY3Rpb25UeXBlcykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIChcbiAgICAgIGFjdGlvbi50eXBlID09PSBGRVRDSF9UWVBFICYmXG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5mZXRjaGVkLCBhY3Rpb24ubWV0YS5rZXkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBFbnN1cmVzIGFsbCBwcm9taXNlcyBhcmUgY29tcGxldGVkIGJ5IHJlamVjdGluZyByZW1haW5pbmcuICovXG4gIGNsZWFudXAoKSB7XG4gICAgLy8gZW5zdXJlIG5vIGRpc3BhdGNoZXMgYWZ0ZXIgdW5tb3VudFxuICAgIGNvbnN0IGNsZWFudXBEYXRlID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLmdldExhc3RSZXNldCA9ICgpID0+IGNsZWFudXBEYXRlO1xuICAgIHRoaXMuY2xlYXJBbGwoKTtcbiAgfVxuXG4gIC8qKiBDbGVhciBhbGwgcHJvbWlzZSBzdGF0ZSAqL1xuICBwcm90ZWN0ZWQgY2xlYXJBbGwoKSB7XG4gICAgZm9yIChjb25zdCBrIGluIHRoaXMucmVqZWN0b3JzKSB7XG4gICAgICB0aGlzLmNsZWFyKGspO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDbGVhciBwcm9taXNlIHN0YXRlIGZvciBhIGdpdmVuIGtleSAqL1xuICBwcm90ZWN0ZWQgY2xlYXIoa2V5OiBzdHJpbmcpIHtcbiAgICBkZWxldGUgdGhpcy5yZXNvbHZlcnNba2V5XTtcbiAgICBkZWxldGUgdGhpcy5yZWplY3RvcnNba2V5XTtcbiAgICBkZWxldGUgdGhpcy5mZXRjaGVkW2tleV07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TGFzdFJlc2V0KCkge1xuICAgIGNvbnN0IGxhc3RSZXNldCA9IHRoaXMuZ2V0U3RhdGUoKS5sYXN0UmVzZXQ7XG4gICAgaWYgKGxhc3RSZXNldCBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBsYXN0UmVzZXQudmFsdWVPZigpO1xuICAgIGlmICh0eXBlb2YgbGFzdFJlc2V0ICE9PSAnbnVtYmVyJykgcmV0dXJuIC1JbmZpbml0eTtcbiAgICByZXR1cm4gbGFzdFJlc2V0O1xuICB9XG5cbiAgLyoqIENhbGxlZCB3aGVuIG1pZGRsZXdhcmUgaW50ZXJjZXB0cyAncmVzdC1ob29rcy9mZXRjaCcgYWN0aW9uLlxuICAgKlxuICAgKiBXaWxsIHRoZW4gc3RhcnQgYSBwcm9taXNlIGZvciBhIGtleSBhbmQgcG90ZW50aWFsbHkgc3RhcnQgdGhlIG5ldHdvcmtcbiAgICogZmV0Y2guXG4gICAqXG4gICAqIFVzZXMgdGhyb3R0bGUgb25seSB3aGVuIGluc3RydWN0ZWQgYnkgYWN0aW9uIG1ldGEuIFRoaXMgaXMgdmFsdWFibGVcbiAgICogZm9yIGVuc3VyZXMgbXV0YXRpb24gcmVxdWVzdHMgYWx3YXlzIGdvIHRocm91Z2guXG4gICAqL1xuICBwcm90ZWN0ZWQgaGFuZGxlRmV0Y2goXG4gICAgYWN0aW9uOiBGZXRjaEFjdGlvbixcbiAgICBkaXNwYXRjaDogRGlzcGF0Y2g8YW55PixcbiAgICBjb250cm9sbGVyOiBDb250cm9sbGVyLFxuICApIHtcbiAgICBjb25zdCBmZXRjaCA9IGFjdGlvbi5wYXlsb2FkO1xuICAgIGNvbnN0IHsga2V5LCB0aHJvdHRsZSwgcmVzb2x2ZSwgcmVqZWN0IH0gPSBhY3Rpb24ubWV0YTtcbiAgICAvLyBUT0RPKGJyZWFraW5nKTogcmVtb3ZlIHN1cHBvcnQgZm9yIERhdGUgdHlwZSBpbiAnUmVjZWl2ZScgYWN0aW9uXG4gICAgY29uc3QgY3JlYXRlZEF0ID1cbiAgICAgIHR5cGVvZiBhY3Rpb24ubWV0YS5jcmVhdGVkQXQgIT09ICdudW1iZXInXG4gICAgICAgID8gYWN0aW9uLm1ldGEuY3JlYXRlZEF0LmdldFRpbWUoKVxuICAgICAgICA6IGFjdGlvbi5tZXRhLmNyZWF0ZWRBdDtcblxuICAgIGNvbnN0IGRlZmVyZWRGZXRjaCA9ICgpID0+IHtcbiAgICAgIGxldCBwcm9taXNlID0gZmV0Y2goKTtcbiAgICAgIGNvbnN0IHJlc29sdmVQcm9taXNlID0gKFxuICAgICAgICBwcm9taXNlOiBQcm9taXNlPHN0cmluZyB8IG51bWJlciB8IG9iamVjdCB8IG51bGw+LFxuICAgICAgKSA9PlxuICAgICAgICBwcm9taXNlXG4gICAgICAgICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgIH0pO1xuICAgICAgLy8gc2NoZWR1bGUgbm9uLXRocm90dGxlZCByZXNvbHV0aW9ucyBpbiBhIG1pY3JvdGFzayBiZWZvcmUgcmVjZWl2ZVxuICAgICAgLy8gdGhpcyBlbmFibGVzIHVzZXJzIGF3YWl0aW5nIHRoZWlyIGZldGNoIHRvIHRyaWdnZXIgYW55IHJlYWN0IHVwZGF0ZXMgbmVlZGVkIHRvIGRlYWxcbiAgICAgIC8vIHdpdGggdXBjb21pbmcgY2hhbmdlcyBiZWNhdXNlIG9mIHRoZSBmZXRjaCAoZm9yIGluc3RhbmNlIGF2b2lkaW5nIHN1c3BlbnNlIGlmIHNvbWV0aGluZyBpcyBkZWxldGVkKVxuICAgICAgaWYgKCF0aHJvdHRsZSAmJiBhY3Rpb24uZW5kcG9pbnQpIHtcbiAgICAgICAgcHJvbWlzZSA9IHJlc29sdmVQcm9taXNlKHByb21pc2UpO1xuICAgICAgfVxuICAgICAgcHJvbWlzZSA9IHByb21pc2VcbiAgICAgICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgbGV0IGxhc3RSZXNldCA9IHRoaXMuZ2V0TGFzdFJlc2V0KCk7XG5cbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGlzTmFOKGxhc3RSZXNldCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICdzdGF0ZS5sYXN0UmVzZXQgaXMgTmFOLiBPbmx5IHBvc2l0aXZlIHRpbWVzdGFtcHMgYXJlIHZhbGlkLicsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGFzdFJlc2V0ID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBkb24ndCB1cGRhdGUgc3RhdGUgd2l0aCBwcm9taXNlcyBzdGFydGVkIGJlZm9yZSBsYXN0IGNsZWFyXG4gICAgICAgICAgaWYgKGNyZWF0ZWRBdCA+PSBsYXN0UmVzZXQpIHtcbiAgICAgICAgICAgIC8vIHdlIHN0aWxsIGNoZWNrIGZvciBjb250cm9sbGVyIGluIGNhc2Ugc29tZW9uZSBkaWRuJ3QgaGF2ZSB0eXBlIHByb3RlY3Rpb24gc2luY2UgdGhpcyBkaWRuJ3QgYWx3YXlzIGV4aXN0XG4gICAgICAgICAgICBpZiAoYWN0aW9uLmVuZHBvaW50ICYmIGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgY29udHJvbGxlci5yZXNvbHZlKGFjdGlvbi5lbmRwb2ludCwge1xuICAgICAgICAgICAgICAgIGFyZ3M6IGFjdGlvbi5tZXRhLmFyZ3MgYXMgYW55LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlOiBkYXRhLFxuICAgICAgICAgICAgICAgIGZldGNoZWRBdDogY3JlYXRlZEF0LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGRvZXMgdGhpcyB0aHJvdyBpZiB0aGUgcmVkdWNlciBmYWlscz8gLSBubyBiZWNhdXNlIHJlZHVjZXIgaXMgd3JhcHBlZCBpbiB0cnkvY2F0Y2hcbiAgICAgICAgICAgICAgZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAgY3JlYXRlUmVjZWl2ZShkYXRhLCB7XG4gICAgICAgICAgICAgICAgICAuLi5hY3Rpb24ubWV0YSxcbiAgICAgICAgICAgICAgICAgIGZldGNoZWRBdDogY3JlYXRlZEF0LFxuICAgICAgICAgICAgICAgICAgZGF0YUV4cGlyeUxlbmd0aDpcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLm1ldGEub3B0aW9ucz8uZGF0YUV4cGlyeUxlbmd0aCA/P1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFFeHBpcnlMZW5ndGgsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIGNvbnN0IGxhc3RSZXNldCA9IHRoaXMuZ2V0TGFzdFJlc2V0KCk7XG4gICAgICAgICAgLy8gZG9uJ3QgdXBkYXRlIHN0YXRlIHdpdGggcHJvbWlzZXMgc3RhcnRlZCBiZWZvcmUgbGFzdCBjbGVhclxuICAgICAgICAgIGlmIChjcmVhdGVkQXQgPj0gbGFzdFJlc2V0KSB7XG4gICAgICAgICAgICBpZiAoYWN0aW9uLmVuZHBvaW50ICYmIGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgY29udHJvbGxlci5yZXNvbHZlKGFjdGlvbi5lbmRwb2ludCwge1xuICAgICAgICAgICAgICAgIGFyZ3M6IGFjdGlvbi5tZXRhLmFyZ3MgYXMgYW55LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlOiBlcnJvcixcbiAgICAgICAgICAgICAgICBmZXRjaGVkQXQ6IGNyZWF0ZWRBdCxcbiAgICAgICAgICAgICAgICBlcnJvcjogdHJ1ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkaXNwYXRjaChcbiAgICAgICAgICAgICAgICBjcmVhdGVSZWNlaXZlRXJyb3IoZXJyb3IsIHtcbiAgICAgICAgICAgICAgICAgIC4uLmFjdGlvbi5tZXRhLFxuICAgICAgICAgICAgICAgICAgZXJyb3JFeHBpcnlMZW5ndGg6XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5tZXRhLm9wdGlvbnM/LmVycm9yRXhwaXJ5TGVuZ3RoID8/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JFeHBpcnlMZW5ndGgsXG4gICAgICAgICAgICAgICAgICBmZXRjaGVkQXQ6IGNyZWF0ZWRBdCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgLy8gbGVnYWN5IGJlaGF2aW9yIHNjaGVkdWxlcyByZXNvbHV0aW9uIGFmdGVyIGRpc3BhdGNoXG4gICAgICBpZiAoIXRocm90dGxlICYmICFhY3Rpb24uZW5kcG9pbnQpIHtcbiAgICAgICAgcHJvbWlzZSA9IHJlc29sdmVQcm9taXNlKHByb21pc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIGlmICh0aHJvdHRsZSkge1xuICAgICAgcmV0dXJuIHRoaXMudGhyb3R0bGUoa2V5LCBkZWZlcmVkRmV0Y2gpXG4gICAgICAgIC50aGVuKGRhdGEgPT4gcmVzb2x2ZShkYXRhKSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHJlamVjdChlcnJvcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGVmZXJlZEZldGNoKCkuY2F0Y2goKCkgPT4ge30pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDYWxsZWQgd2hlbiBtaWRkbGV3YXJlIGludGVyY2VwdHMgYSByZWNlaXZlIGFjdGlvbi5cbiAgICpcbiAgICogV2lsbCByZXNvbHZlIHRoZSBwcm9taXNlIGFzc29jaWF0ZWQgd2l0aCByZWNlaXZlIGtleS5cbiAgICovXG4gIHByb3RlY3RlZCBoYW5kbGVSZWNlaXZlKGFjdGlvbjogUmVjZWl2ZUFjdGlvbikge1xuICAgIC8vIHRoaXMgY2FuIHN0aWxsIHR1cm4gb3V0IHRvIGJlIHVudHJ1ZSBzaW5jZSB0aGlzIGlzIGFzeW5jXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmZldGNoZWQsIGFjdGlvbi5tZXRhLmtleSkpIHtcbiAgICAgIGxldCBwcm9taXNlSGFuZGxlcjogKHZhbHVlPzogYW55KSA9PiB2b2lkO1xuICAgICAgaWYgKGFjdGlvbi5lcnJvcikge1xuICAgICAgICBwcm9taXNlSGFuZGxlciA9IHRoaXMucmVqZWN0b3JzW2FjdGlvbi5tZXRhLmtleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9taXNlSGFuZGxlciA9IHRoaXMucmVzb2x2ZXJzW2FjdGlvbi5tZXRhLmtleV07XG4gICAgICB9XG4gICAgICBwcm9taXNlSGFuZGxlcihhY3Rpb24ucGF5bG9hZCk7XG4gICAgICAvLyBzaW5jZSB3ZSdyZSByZXNvbHZlZCB3ZSBubyBsb25nZXIgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoaXMgcHJvbWlzZVxuICAgICAgdGhpcy5jbGVhcihhY3Rpb24ubWV0YS5rZXkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBBdHRhY2hlcyBOZXR3b3JrTWFuYWdlciB0byBzdG9yZVxuICAgKlxuICAgKiBJbnRlcmNlcHRzICdyZXN0LWhvb2tzL2ZldGNoJyBhY3Rpb25zIHRvIHN0YXJ0IHJlcXVlc3RzLlxuICAgKlxuICAgKiBSZXNvbHZlL3JlamVjdHMgYSByZXF1ZXN0IHdoZW4gbWF0Y2hpbmcgJ3Jlc3QtaG9va3MvcmVjZWl2ZScgZXZlbnRcbiAgICogaXMgc2Vlbi5cbiAgICovXG4gIGdldE1pZGRsZXdhcmU8VCBleHRlbmRzIE5ldHdvcmtNYW5hZ2VyPih0aGlzOiBUKSB7XG4gICAgcmV0dXJuIHRoaXMubWlkZGxld2FyZTtcbiAgfVxuXG4gIC8qKiBFbnN1cmVzIG9ubHkgb25lIHJlcXVlc3QgZm9yIGEgZ2l2ZW4ga2V5IGlzIGluIGZsaWdodCBhdCBhbnkgdGltZVxuICAgKlxuICAgKiBVc2VzIGtleSB0byBlaXRoZXIgcmV0cmlldmUgaW4tZmxpZ2h0IHByb21pc2UsIG9yIGlmIG5vdFxuICAgKiBjcmVhdGUgYSBuZXcgcHJvbWlzZSBhbmQgY2FsbCBmZXRjaC5cbiAgICpcbiAgICogTm90ZTogVGhlIG5ldyBwcm9taXNlIGlzIG5vdCBhY3R1YWxseSB0aWVkIHRvIGZldGNoIGF0IGFsbCxcbiAgICogYnV0IGlzIHJlc29sdmVkIHdoZW4gdGhlIGV4cGVjdGVkICdyZWNpZXZlJyBhY3Rpb24gaXMgcHJvY2Vzc2VkLlxuICAgKiBUaGlzIGVuc3VyZXMgcHJvbWlzZXMgYXJlIHJlc29sdmVkIG9ubHkgb25jZSB0aGVpciBkYXRhIGlzIHByb2Nlc3NlZFxuICAgKiBieSB0aGUgcmVkdWNlci5cbiAgICovXG4gIHByb3RlY3RlZCB0aHJvdHRsZShrZXk6IHN0cmluZywgZmV0Y2g6ICgpID0+IFByb21pc2U8YW55Pikge1xuICAgIC8vIHdlJ3JlIGFscmVhZHkgZmV0Y2hpbmcgc28gcmV1c2UgdGhlIHByb21pc2VcbiAgICBpZiAoa2V5IGluIHRoaXMuZmV0Y2hlZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hlZFtrZXldO1xuICAgIH1cblxuICAgIHRoaXMuZmV0Y2hlZFtrZXldID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5yZXNvbHZlcnNba2V5XSA9IHJlc29sdmU7XG4gICAgICB0aGlzLnJlamVjdG9yc1trZXldID0gcmVqZWN0O1xuICAgIH0pO1xuXG4gICAgLy8gc2luY2Ugb3VyIHJlYWwgcHJvbWlzZSBpcyByZXNvbHZlZCB2aWEgdGhlIHdyYXBSZWR1Y2VyKCksXG4gICAgLy8gd2Ugc2hvdWxkIGp1c3Qgc3RvcCBhbGwgZXJyb3JzIGhlcmUuXG4gICAgLy8gVE9ETzogZGVjb3VwbGUgdGhpcyBmcm9tIHVzZUZldGNoZXIoKSAodGhhdCdzIHdoYXQncyBkaXNwYXRjaGluZyB0aGUgZXJyb3IgdGhlIHJlc29sdmVzIGluIGhlcmUpXG4gICAgUklDKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBmZXRjaCgpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgICAgfSxcbiAgICAgIHsgdGltZW91dDogNTAwIH0sXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLmZldGNoZWRba2V5XTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFVQSxTQUFTQSxZQUFULEVBQXVCQyxVQUF2QixFQUFtQ0MsVUFBbkMsUUFBcUQsbUJBQXJEO0FBQ0EsT0FBT0MsR0FBUCxNQUFnQixVQUFoQjtBQUNBLFNBQVNDLGFBQVQsRUFBd0JDLGtCQUF4QixRQUFrRCxvQkFBbEQ7QUFDQSxTQUFTQyxZQUFULFFBQTZCLG9CQUE3QjtBQUdBLE9BQU8sTUFBTUMsVUFBTixTQUF5QkMsS0FBekIsQ0FBK0I7RUFHcENDLFdBQVcsR0FBRztJQUNaLE1BQU0sc0JBQU47SUFEWSxLQUZkQyxJQUVjLEdBRlAsWUFFTztFQUViOztBQUxtQztBQVF0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxlQUFlLE1BQU1DLGNBQU4sQ0FBd0M7RUFTckRGLFdBQVcsQ0FBQ0csZ0JBQWdCLEdBQUcsS0FBcEIsRUFBMkJDLGlCQUFpQixHQUFHLElBQS9DLEVBQXFEO0lBQUEsS0FSdERDLE9BUXNELEdBUmIsRUFRYTtJQUFBLEtBUHREQyxTQU9zRCxHQVBGLEVBT0U7SUFBQSxLQU50REMsU0FNc0QsR0FORixFQU1FOztJQUFBLEtBRnREQyxRQUVzRCxHQUZyQixNQUFNWCxZQUVlOztJQUM5RCxLQUFLTSxnQkFBTCxHQUF3QkEsZ0JBQXhCO0lBQ0Es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","import _jsx from \"@babel/runtime/helpers/jsx\";\n\nvar _Loading, _span, _a;\n\nimport React, { Suspense, memo, useMemo, version } from 'react';\n/* istanbul ignore next */\n\nconst LegacyReact = version.startsWith('16') || version.startsWith('17');\n/* istanbul ignore next */\n\nconst SSR = typeof window === 'undefined'; // since Suspense does not introduce DOM elements, this should not affect rehydration.\n\nconst BackupBoundary =\n/* istanbul ignore if */\nLegacyReact && SSR ?\n/* istanbul ignore next */\n({\n children\n}) => children : ({\n children\n}) => /*#__PURE__*/_jsx(Suspense, {\n fallback: _Loading || (_Loading = /*#__PURE__*/_jsx(Loading, {}))\n}, void 0, children);\nexport default /*#__PURE__*/memo(BackupBoundary);\n\nfunction Loading() {\n let message = 'loading...';\n /* istanbul ignore else */\n\n if (process.env.NODE_ENV !== 'production') {\n // env should not change during runtime and this excludes from build\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useMemo(() => {\n console.warn(`Uncaught suspense.\nMake sure to add your own Suspense boundaries: https://resthooks.io/docs/getting-started/data-dependency#async-fallbacks`);\n }, []);\n message = /*#__PURE__*/React.createElement(React.Fragment, null, _span || (_span = /*#__PURE__*/_jsx(\"span\", {}, void 0, \"Uncaught Suspense.\")), \"Try\", _a || (_a = /*#__PURE__*/_jsx(\"a\", {\n href: \"https://resthooks.io/docs/getting-started/data-dependency#async-fallbacks\"\n }, void 0, \"adding a suspense boundary\")));\n }\n\n return /*#__PURE__*/_jsx(\"div\", {}, void 0, message);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIlN1c3BlbnNlIiwibWVtbyIsInVzZU1lbW8iLCJ2ZXJzaW9uIiwiTGVnYWN5UmVhY3QiLCJzdGFydHNXaXRoIiwiU1NSIiwid2luZG93IiwiQmFja3VwQm91bmRhcnkiLCJjaGlsZHJlbiIsIkxvYWRpbmciLCJtZXNzYWdlIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiY29uc29sZSIsIndhcm4iXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVhY3QtaW50ZWdyYXRpb24vcHJvdmlkZXIvQmFja3VwQm91bmRhcnkudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBTdXNwZW5zZSwgbWVtbywgdXNlTWVtbywgdmVyc2lvbiB9IGZyb20gJ3JlYWN0JztcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5jb25zdCBMZWdhY3lSZWFjdCA9IHZlcnNpb24uc3RhcnRzV2l0aCgnMTYnKSB8fCB2ZXJzaW9uLnN0YXJ0c1dpdGgoJzE3Jyk7XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmNvbnN0IFNTUiA9IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnO1xuXG4vLyBzaW5jZSBTdXNwZW5zZSBkb2VzIG5vdCBpbnRyb2R1Y2UgRE9NIGVsZW1lbnRzLCB0aGlzIHNob3VsZCBub3QgYWZmZWN0IHJlaHlkcmF0aW9uLlxuY29uc3QgQmFja3VwQm91bmRhcnk6IFJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50PHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB9PiA9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBMZWdhY3lSZWFjdCAmJiBTU1JcbiAgICA/IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqLyAoeyBjaGlsZHJlbiB9KSA9PiBjaGlsZHJlbiBhcyBKU1guRWxlbWVudFxuICAgIDogKHsgY2hpbGRyZW4gfSkgPT4gPFN1c3BlbnNlIGZhbGxiYWNrPXs8TG9hZGluZyAvPn0+e2NoaWxkcmVufTwvU3VzcGVuc2U+O1xuXG5leHBvcnQgZGVmYXVsdCBtZW1vKEJhY2t1cEJvdW5kYXJ5KTtcblxuZnVuY3Rpb24gTG9hZGluZygpIHtcbiAgbGV0IG1lc3NhZ2U6IFJlYWN0LlJlYWN0Tm9kZSA9ICdsb2FkaW5nLi4uJztcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlbnYgc2hvdWxkIG5vdCBjaGFuZ2UgZHVyaW5nIHJ1bnRpbWUgYW5kIHRoaXMgZXhjbHVkZXMgZnJvbSBidWlsZFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIHVzZU1lbW8oKCkgPT4ge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgVW5jYXVnaHQgc3VzcGVuc2UuXG5NYWtlIHN1cmUgdG8gYWRkIHlvdXIgb3duIFN1c3BlbnNlIGJvdW5kYXJpZXM6IGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvZ2V0dGluZy1zdGFydGVkL2RhdGEtZGVwZW5kZW5jeSNhc3luYy1mYWxsYmFja3NgLFxuICAgICAgKTtcbiAgICB9LCBbXSk7XG5cbiAgICBtZXNzYWdlID0gKFxuICAgICAgPD5cbiAgICAgICAgPHNwYW4+VW5jYXVnaHQgU3VzcGVuc2UuPC9zcGFuPlxuICAgICAgICBUcnlcbiAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvZ2V0dGluZy1zdGFydGVkL2RhdGEtZGVwZW5kZW5jeSNhc3luYy1mYWxsYmFja3NcIj5cbiAgICAgICAgICBhZGRpbmcgYSBzdXNwZW5zZSBib3VuZGFyeVxuICAgICAgICA8L2E+XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG4gIHJldHVybiA8ZGl2PnttZXNzYWdlfTwvZGl2Pjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU9BLEtBQVAsSUFBZ0JDLFFBQWhCLEVBQTBCQyxJQUExQixFQUFnQ0MsT0FBaEMsRUFBeUNDLE9BQXpDLFFBQXdELE9BQXhEO0FBRUE7O0FBQ0EsTUFBTUMsV0FBVyxHQUFHRCxPQUFPLENBQUNFLFVBQVIsQ0FBbUIsSUFBbkIsS0FBNEJGLE9BQU8sQ0FBQ0UsVUFBUixDQUFtQixJQUFuQixDQUFoRDtBQUNBOztBQUNBLE1BQU1DLEdBQUcsR0FBRyxPQUFPQyxNQUFQLEtBQWtCLFdBQTlCLEMsQ0FFQTs7QUFDQSxNQUFNQyxjQUFzRTtBQUMxRTtBQUNBSixXQUFXLElBQUlFLEdBQWY7QUFDSTtBQUE0QixDQUFDO0VBQUVHO0FBQUYsQ0FBRCxLQUFrQkEsUUFEbEQsR0FFSSxDQUFDO0VBQUVBO0FBQUYsQ0FBRCxrQkFBa0IsS0FBQyxRQUFEO0VBQVUsUUFBUSx1Q0FBRSxLQUFDLE9BQUQsS0FBRjtBQUFsQixXQUFrQ0EsUUFBbEMsQ0FKeEI7QUFNQSw0QkFBZVIsSUFBSSxDQUFDTyxjQUFELENBQW5COztBQUVBLFNBQVNFLE9BQVQsR0FBbUI7RUFDakIsSUFBSUMsT0FBd0IsR0FBRyxZQUEvQjtFQUNBOztFQUNBLElBQUlDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxRQUFaLEtBQXlCLFlBQTdCLEVBQTJDO0lBQ3pDO0lBQ0E7SUFDQVosT0FBTyxDQUFDLE1BQU07TUFDWmEsT0FBTyxDQUFDQyxJQUFSLENBQ0c7QUFDVCx5SEFGTTtJQUlELENBTE0sRUFLSixFQUxJLENBQVA7SUFPQUwsT0FBTyxnQkFDTCx5RUFDRSw4Q0FERixtQ0FHRTtNQUFHLElBQUksRUFBQztJQUFSLHdDQUhGLEVBREY7RUFTRDs7RUFDRCxvQkFBTyx3QkFBTUEsT0FBTixDQUFQO0FBQ0QifQ==","import useEnhancedReducer, { unsetDispatch } from './useEnhancedReducer';\nexport { default as usePromisifiedDispatch } from './usePromisifiedDispatch';\nexport { unsetDispatch };\nexport default useEnhancedReducer;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6WyJ1c2VFbmhhbmNlZFJlZHVjZXIiLCJ1bnNldERpc3BhdGNoIiwiZGVmYXVsdCIsInVzZVByb21pc2lmaWVkRGlzcGF0Y2giXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLGtCQUFQLElBQTZCQyxhQUE3QixRQUFrRCxzQkFBbEQ7QUFFQSxTQUFTQyxPQUFPLElBQUlDLHNCQUFwQixRQUFrRCwwQkFBbEQ7QUFFQSxTQUFTRixhQUFUO0FBQ0EsZUFBZUQsa0JBQWYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdXNlRW5oYW5jZWRSZWR1Y2VyLCB7IHVuc2V0RGlzcGF0Y2ggfSBmcm9tICcuL3VzZUVuaGFuY2VkUmVkdWNlcic7XG5leHBvcnQgdHlwZSB7IERpc3BhdGNoLCBNaWRkbGV3YXJlLCBNaWRkbGV3YXJlQVBJIH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZVByb21pc2lmaWVkRGlzcGF0Y2ggfSBmcm9tICcuL3VzZVByb21pc2lmaWVkRGlzcGF0Y2gnO1xuXG5leHBvcnQgeyB1bnNldERpc3BhdGNoIH07XG5leHBvcnQgZGVmYXVsdCB1c2VFbmhhbmNlZFJlZHVjZXI7XG4iXX0=","import _jsx from \"@babel/runtime/helpers/jsx\";\nimport useEnhancedReducer from '@rest-hooks/use-enhanced-reducer';\nimport React, { useEffect, useMemo, memo } from 'react';\nimport createReducer from '../../state/createReducer.js';\nimport { StateContext, DispatchContext } from '../context.js';\nimport BackupBoundary from './BackupBoundary.js';\n\n/**\n * This part of the provider concerns only the parts that matter for store changes\n * It expects its props to have referential stability\n */\nfunction CacheStore({\n children,\n managers,\n middlewares,\n initialState,\n controller\n}) {\n const masterReducer = useMemo(() => createReducer(controller), [controller]);\n const [state, dispatch] = useEnhancedReducer(masterReducer, initialState, middlewares);\n const optimisticState = useMemo(() => state.optimistic.reduce(masterReducer, state), [masterReducer, state]); // if we change out the manager we need to make sure it has no hanging async\n\n useEffect(() => {\n for (let i = 0; i < managers.length; ++i) {\n var _managers$i$init, _managers$i;\n\n (_managers$i$init = (_managers$i = managers[i]).init) == null ? void 0 : _managers$i$init.call(_managers$i, state);\n }\n\n return () => {\n for (let i = 0; i < managers.length; ++i) {\n managers[i].cleanup();\n }\n }; // we're ignoring state here, because it shouldn't trigger inits\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [managers]);\n return /*#__PURE__*/_jsx(DispatchContext.Provider, {\n value: dispatch\n }, void 0, /*#__PURE__*/_jsx(StateContext.Provider, {\n value: optimisticState\n }, void 0, /*#__PURE__*/_jsx(BackupBoundary, {}, void 0, children)));\n}\n\nexport default /*#__PURE__*/memo(CacheStore);\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFbmhhbmNlZFJlZHVjZXIiLCJSZWFjdCIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJtZW1vIiwiY3JlYXRlUmVkdWNlciIsIlN0YXRlQ29udGV4dCIsIkRpc3BhdGNoQ29udGV4dCIsIkJhY2t1cEJvdW5kYXJ5IiwiQ2FjaGVTdG9yZSIsImNoaWxkcmVuIiwibWFuYWdlcnMiLCJtaWRkbGV3YXJlcyIsImluaXRpYWxTdGF0ZSIsImNvbnRyb2xsZXIiLCJtYXN0ZXJSZWR1Y2VyIiwic3RhdGUiLCJkaXNwYXRjaCIsIm9wdGltaXN0aWNTdGF0ZSIsIm9wdGltaXN0aWMiLCJyZWR1Y2UiLCJpIiwibGVuZ3RoIiwiaW5pdCIsImNsZWFudXAiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVhY3QtaW50ZWdyYXRpb24vcHJvdmlkZXIvQ2FjaGVTdG9yZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHVzZUVuaGFuY2VkUmVkdWNlciBmcm9tICdAcmVzdC1ob29rcy91c2UtZW5oYW5jZWQtcmVkdWNlcic7XG5pbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCB1c2VFZmZlY3QsIHVzZU1lbW8sIG1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUgfSBmcm9tICdAcmVzdC1ob29rcy91c2UtZW5oYW5jZWQtcmVkdWNlcic7XG5cbmltcG9ydCB7IFN0YXRlLCBNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuaW1wb3J0IGNyZWF0ZVJlZHVjZXIgZnJvbSAnLi4vLi4vc3RhdGUvY3JlYXRlUmVkdWNlci5qcyc7XG5pbXBvcnQgQ29udHJvbGxlciBmcm9tICcuLi8uLi9jb250cm9sbGVyL0NvbnRyb2xsZXIuanMnO1xuaW1wb3J0IHsgU3RhdGVDb250ZXh0LCBEaXNwYXRjaENvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0LmpzJztcbmltcG9ydCBCYWNrdXBCb3VuZGFyeSBmcm9tICcuL0JhY2t1cEJvdW5kYXJ5LmpzJztcblxuaW50ZXJmYWNlIFN0b3JlUHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBtYW5hZ2VyczogTWFuYWdlcltdO1xuICBtaWRkbGV3YXJlczogTWlkZGxld2FyZVtdO1xuICBpbml0aWFsU3RhdGU6IFN0YXRlPHVua25vd24+O1xuICBjb250cm9sbGVyOiBDb250cm9sbGVyO1xufVxuLyoqXG4gKiBUaGlzIHBhcnQgb2YgdGhlIHByb3ZpZGVyIGNvbmNlcm5zIG9ubHkgdGhlIHBhcnRzIHRoYXQgbWF0dGVyIGZvciBzdG9yZSBjaGFuZ2VzXG4gKiBJdCBleHBlY3RzIGl0cyBwcm9wcyB0byBoYXZlIHJlZmVyZW50aWFsIHN0YWJpbGl0eVxuICovXG5mdW5jdGlvbiBDYWNoZVN0b3JlKHtcbiAgY2hpbGRyZW4sXG4gIG1hbmFnZXJzLFxuICBtaWRkbGV3YXJlcyxcbiAgaW5pdGlhbFN0YXRlLFxuICBjb250cm9sbGVyLFxufTogU3RvcmVQcm9wcykge1xuICBjb25zdCBtYXN0ZXJSZWR1Y2VyID0gdXNlTWVtbygoKSA9PiBjcmVhdGVSZWR1Y2VyKGNvbnRyb2xsZXIpLCBbY29udHJvbGxlcl0pO1xuXG4gIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlRW5oYW5jZWRSZWR1Y2VyKFxuICAgIG1hc3RlclJlZHVjZXIsXG4gICAgaW5pdGlhbFN0YXRlLFxuICAgIG1pZGRsZXdhcmVzLFxuICApO1xuICBjb25zdCBvcHRpbWlzdGljU3RhdGUgPSB1c2VNZW1vKFxuICAgICgpID0+IHN0YXRlLm9wdGltaXN0aWMucmVkdWNlKG1hc3RlclJlZHVjZXIsIHN0YXRlKSxcbiAgICBbbWFzdGVyUmVkdWNlciwgc3RhdGVdLFxuICApO1xuXG4gIC8vIGlmIHdlIGNoYW5nZSBvdXQgdGhlIG1hbmFnZXIgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaGFzIG5vIGhhbmdpbmcgYXN5bmNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hbmFnZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICBtYW5hZ2Vyc1tpXS5pbml0Py4oc3RhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYW5hZ2Vycy5sZW5ndGg7ICsraSkge1xuICAgICAgICBtYW5hZ2Vyc1tpXS5jbGVhbnVwKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICAvLyB3ZSdyZSBpZ25vcmluZyBzdGF0ZSBoZXJlLCBiZWNhdXNlIGl0IHNob3VsZG4ndCB0cmlnZ2VyIGluaXRzXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbbWFuYWdlcnNdKTtcblxuICByZXR1cm4gKFxuICAgIDxEaXNwYXRjaENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2Rpc3BhdGNofT5cbiAgICAgIDxTdGF0ZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e29wdGltaXN0aWNTdGF0ZX0+XG4gICAgICAgIDxCYWNrdXBCb3VuZGFyeT57Y2hpbGRyZW59PC9CYWNrdXBCb3VuZGFyeT5cbiAgICAgIDwvU3RhdGVDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvRGlzcGF0Y2hDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufVxuZXhwb3J0IGRlZmF1bHQgbWVtbyhDYWNoZVN0b3JlKTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU9BLGtCQUFQLE1BQStCLGtDQUEvQjtBQUNBLE9BQU9DLEtBQVAsSUFBMkJDLFNBQTNCLEVBQXNDQyxPQUF0QyxFQUErQ0MsSUFBL0MsUUFBMkQsT0FBM0Q7QUFJQSxPQUFPQyxhQUFQLE1BQTBCLDhCQUExQjtBQUVBLFNBQVNDLFlBQVQsRUFBdUJDLGVBQXZCLFFBQThDLGVBQTlDO0FBQ0EsT0FBT0MsY0FBUCxNQUEyQixxQkFBM0I7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxVQUFULENBQW9CO0VBQ2xCQyxRQURrQjtFQUVsQkMsUUFGa0I7RUFHbEJDLFdBSGtCO0VBSWxCQyxZQUprQjtFQUtsQkM7QUFMa0IsQ0FBcEIsRUFNZTtFQUNiLE1BQU1DLGFBQWEsR0FBR1osT0FBTyxDQUFDLE1BQU1FLGFBQWEsQ0FBQ1MsVUFBRCxDQUFwQixFQUFrQyxDQUFDQSxVQUFELENBQWxDLENBQTdCO0VBRUEsTUFBTSxDQUFDRSxLQUFELEVBQVFDLFFBQVIsSUFBb0JqQixrQkFBa0IsQ0FDMUNlLGFBRDBDLEVBRTFDRixZQUYwQyxFQUcxQ0QsV0FIMEMsQ0FBNUM7RUFLQSxNQUFNTSxlQUFlLEdBQUdmLE9BQU8sQ0FDN0IsTUFBTWEsS0FBSyxDQUFDRyxVQUFOLENBQWlCQyxNQUFqQixDQUF3QkwsYUFBeEIsRUFBdUNDLEtBQXZDLENBRHVCLEVBRTdCLENBQUNELGFBQUQsRUFBZ0JDLEtBQWhCLENBRjZCLENBQS9CLENBUmEsQ0FhYjs7RUFDQWQsU0FBUyxDQUFDLE1BQU07SUFDZCxLQUFLLElBQUltQixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHVixRQUFRLENBQUNXLE1BQTdCLEVBQXFDLEVBQUVELENBQXZDLEVBQTBDO01BQUE7O01BQ3hDLG1DQUFBVixRQUFRLENBQUNVLENBQUQsQ0FBUixFQUFZRSxJQUFaLHdEQUFtQlAsS0FBbkI7SUFDRDs7SUFDRCxPQUFPLE1BQU07TUFDWCxLQUFLLElBQUlLLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdWLFFBQVEsQ0FBQ1csTUFBN0IsRUFBcUMsRUFBRUQsQ0FBdkMsRUFBMEM7UUFDeENWLFFBQVEsQ0FBQ1UsQ0FBRCxDQUFSLENBQVlHLE9BQVo7TUFDRDtJQUNGLENBSkQsQ0FKYyxDQVNkO0lBQ0E7RUFDRCxDQVhRLEVBV04sQ0FBQ2IsUUFBRCxDQVhNLENBQVQ7RUFhQSxvQkFDRSxLQUFDLGVBQUQsQ0FBaUIsUUFBakI7SUFBMEIsS0FBSyxFQUFFTTtFQUFqQyx3QkFDRSxLQUFDLFlBQUQsQ0FBYyxRQUFkO0lBQXVCLEtBQUssRUFBRUM7RUFBOUIsd0JBQ0UsS0FBQyxjQUFELGNBQWlCUixRQUFqQixDQURGLENBREYsQ0FERjtBQU9EOztBQUNELDRCQUFlTixJQUFJLENBQUNLLFVBQUQsQ0FBbkIifQ==","import _jsx from \"@babel/runtime/helpers/jsx\";\nimport React, { useMemo } from 'react';\nimport { useRef } from 'react';\nimport { initialState as defaultState } from '../../state/createReducer.js';\nimport NetworkManager from '../../state/NetworkManager.js';\nimport { DenormalizeCacheContext, ControllerContext } from '../context.js';\nimport applyManager from '../../state/applyManager.js';\nimport CacheStore from './CacheStore.js';\nimport Controller from '../../controller/Controller.js';\n/* istanbul ignore next */\n\nconst SSR = typeof window === 'undefined';\n\n/**\n * Controller managing state of the cache and coordinating network requests.\n * @see https://resthooks.io/docs/api/CacheProvider\n */\nexport default function CacheProvider({\n children,\n managers,\n initialState,\n Controller\n}) {\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production' && SSR) {\n console.warn(`CacheProvider does not update while doing SSR.\nTry using https://resthooks.io/docs/api/ExternalCacheProvider for server entry points.`);\n } // contents of this component expected to be relatively stable\n\n\n const controllerRef = useRef();\n if (!controllerRef.current) controllerRef.current = new Controller(); // eslint-disable-next-line react-hooks/exhaustive-deps\n\n const memodManagers = useMemo(() => managers, managers);\n const middlewares = useMemo(() => applyManager(managers, controllerRef.current), // eslint-disable-next-line react-hooks/exhaustive-deps\n managers);\n return /*#__PURE__*/_jsx(ControllerContext.Provider, {\n value: controllerRef.current\n }, void 0, /*#__PURE__*/_jsx(DenormalizeCacheContext.Provider, {\n value: controllerRef.current.globalCache\n }, void 0, /*#__PURE__*/_jsx(CacheStore, {\n managers: memodManagers,\n middlewares: middlewares,\n initialState: initialState,\n controller: controllerRef.current\n }, void 0, children)));\n}\nCacheProvider.defaultProps = {\n managers: [new NetworkManager()],\n initialState: defaultState,\n Controller\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJpbml0aWFsU3RhdGUiLCJkZWZhdWx0U3RhdGUiLCJOZXR3b3JrTWFuYWdlciIsIkRlbm9ybWFsaXplQ2FjaGVDb250ZXh0IiwiQ29udHJvbGxlckNvbnRleHQiLCJhcHBseU1hbmFnZXIiLCJDYWNoZVN0b3JlIiwiQ29udHJvbGxlciIsIlNTUiIsIndpbmRvdyIsIkNhY2hlUHJvdmlkZXIiLCJjaGlsZHJlbiIsIm1hbmFnZXJzIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiY29uc29sZSIsIndhcm4iLCJjb250cm9sbGVyUmVmIiwiY3VycmVudCIsIm1lbW9kTWFuYWdlcnMiLCJtaWRkbGV3YXJlcyIsImdsb2JhbENhY2hlIiwiZGVmYXVsdFByb3BzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlYWN0LWludGVncmF0aW9uL3Byb3ZpZGVyL0NhY2hlUHJvdmlkZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IGluaXRpYWxTdGF0ZSBhcyBkZWZhdWx0U3RhdGUgfSBmcm9tICcuLi8uLi9zdGF0ZS9jcmVhdGVSZWR1Y2VyLmpzJztcbmltcG9ydCBOZXR3b3JrTWFuYWdlciBmcm9tICcuLi8uLi9zdGF0ZS9OZXR3b3JrTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBTdGF0ZSwgTWFuYWdlciB9IGZyb20gJy4uLy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IERlbm9ybWFsaXplQ2FjaGVDb250ZXh0LCBDb250cm9sbGVyQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQuanMnO1xuaW1wb3J0IGFwcGx5TWFuYWdlciBmcm9tICcuLi8uLi9zdGF0ZS9hcHBseU1hbmFnZXIuanMnO1xuaW1wb3J0IENhY2hlU3RvcmUgZnJvbSAnLi9DYWNoZVN0b3JlLmpzJztcbmltcG9ydCBDb250cm9sbGVyIGZyb20gJy4uLy4uL2NvbnRyb2xsZXIvQ29udHJvbGxlci5qcyc7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuY29uc3QgU1NSID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCc7XG5cbmludGVyZmFjZSBQcm92aWRlclByb3BzIHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgbWFuYWdlcnM6IE1hbmFnZXJbXTtcbiAgaW5pdGlhbFN0YXRlOiBTdGF0ZTx1bmtub3duPjtcbiAgQ29udHJvbGxlcjogdHlwZW9mIENvbnRyb2xsZXI7XG59XG5cbi8qKlxuICogQ29udHJvbGxlciBtYW5hZ2luZyBzdGF0ZSBvZiB0aGUgY2FjaGUgYW5kIGNvb3JkaW5hdGluZyBuZXR3b3JrIHJlcXVlc3RzLlxuICogQHNlZSBodHRwczovL3Jlc3Rob29rcy5pby9kb2NzL2FwaS9DYWNoZVByb3ZpZGVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENhY2hlUHJvdmlkZXIoe1xuICBjaGlsZHJlbixcbiAgbWFuYWdlcnMsXG4gIGluaXRpYWxTdGF0ZSxcbiAgQ29udHJvbGxlcixcbn06IFByb3ZpZGVyUHJvcHMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgU1NSKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYENhY2hlUHJvdmlkZXIgZG9lcyBub3QgdXBkYXRlIHdoaWxlIGRvaW5nIFNTUi5cblRyeSB1c2luZyBodHRwczovL3Jlc3Rob29rcy5pby9kb2NzL2FwaS9FeHRlcm5hbENhY2hlUHJvdmlkZXIgZm9yIHNlcnZlciBlbnRyeSBwb2ludHMuYCxcbiAgICApO1xuICB9XG4gIC8vIGNvbnRlbnRzIG9mIHRoaXMgY29tcG9uZW50IGV4cGVjdGVkIHRvIGJlIHJlbGF0aXZlbHkgc3RhYmxlXG5cbiAgY29uc3QgY29udHJvbGxlclJlZjogUmVhY3QuTXV0YWJsZVJlZk9iamVjdDxDb250cm9sbGVyPiA9IHVzZVJlZjxhbnk+KCk7XG4gIGlmICghY29udHJvbGxlclJlZi5jdXJyZW50KSBjb250cm9sbGVyUmVmLmN1cnJlbnQgPSBuZXcgQ29udHJvbGxlcigpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgY29uc3QgbWVtb2RNYW5hZ2VycyA9IHVzZU1lbW8oKCkgPT4gbWFuYWdlcnMsIG1hbmFnZXJzKTtcblxuICBjb25zdCBtaWRkbGV3YXJlcyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gYXBwbHlNYW5hZ2VyKG1hbmFnZXJzLCBjb250cm9sbGVyUmVmLmN1cnJlbnQpLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBtYW5hZ2VycyxcbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxDb250cm9sbGVyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udHJvbGxlclJlZi5jdXJyZW50fT5cbiAgICAgIDxEZW5vcm1hbGl6ZUNhY2hlQ29udGV4dC5Qcm92aWRlclxuICAgICAgICB2YWx1ZT17Y29udHJvbGxlclJlZi5jdXJyZW50Lmdsb2JhbENhY2hlfVxuICAgICAgPlxuICAgICAgICA8Q2FjaGVTdG9yZVxuICAgICAgICAgIG1hbmFnZXJzPXttZW1vZE1hbmFnZXJzfVxuICAgICAgICAgIG1pZGRsZXdhcmVzPXttaWRkbGV3YXJlc31cbiAgICAgICAgICBpbml0aWFsU3RhdGU9e2luaXRpYWxTdGF0ZX1cbiAgICAgICAgICBjb250cm9sbGVyPXtjb250cm9sbGVyUmVmLmN1cnJlbnR9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvQ2FjaGVTdG9yZT5cbiAgICAgIDwvRGVub3JtYWxpemVDYWNoZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgPC9Db250cm9sbGVyQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn1cbkNhY2hlUHJvdmlkZXIuZGVmYXVsdFByb3BzID0ge1xuICBtYW5hZ2VyczogW25ldyBOZXR3b3JrTWFuYWdlcigpXSBhcyBNYW5hZ2VyW10sXG4gIGluaXRpYWxTdGF0ZTogZGVmYXVsdFN0YXRlIGFzIFN0YXRlPHVua25vd24+LFxuICBDb250cm9sbGVyLFxufTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU9BLEtBQVAsSUFBMkJDLE9BQTNCLFFBQTBDLE9BQTFDO0FBQ0EsU0FBU0MsTUFBVCxRQUF1QixPQUF2QjtBQUVBLFNBQVNDLFlBQVksSUFBSUMsWUFBekIsUUFBNkMsOEJBQTdDO0FBQ0EsT0FBT0MsY0FBUCxNQUEyQiwrQkFBM0I7QUFFQSxTQUFTQyx1QkFBVCxFQUFrQ0MsaUJBQWxDLFFBQTJELGVBQTNEO0FBQ0EsT0FBT0MsWUFBUCxNQUF5Qiw2QkFBekI7QUFDQSxPQUFPQyxVQUFQLE1BQXVCLGlCQUF2QjtBQUNBLE9BQU9DLFVBQVAsTUFBdUIsZ0NBQXZCO0FBRUE7O0FBQ0EsTUFBTUMsR0FBRyxHQUFHLE9BQU9DLE1BQVAsS0FBa0IsV0FBOUI7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVNDLGFBQVQsQ0FBdUI7RUFDcENDLFFBRG9DO0VBRXBDQyxRQUZvQztFQUdwQ1osWUFIb0M7RUFJcENPO0FBSm9DLENBQXZCLEVBS0c7RUFDaEI7RUFDQSxJQUFJTSxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsUUFBWixLQUF5QixZQUF6QixJQUF5Q1AsR0FBN0MsRUFBa0Q7SUFDaERRLE9BQU8sQ0FBQ0MsSUFBUixDQUNHO0FBQ1AsdUZBRkk7RUFJRCxDQVBlLENBUWhCOzs7RUFFQSxNQUFNQyxhQUFpRCxHQUFHbkIsTUFBTSxFQUFoRTtFQUNBLElBQUksQ0FBQ21CLGFBQWEsQ0FBQ0MsT0FBbkIsRUFBNEJELGFBQWEsQ0FBQ0MsT0FBZCxHQUF3QixJQUFJWixVQUFKLEVBQXhCLENBWFosQ0FhaEI7O0VBQ0EsTUFBTWEsYUFBYSxHQUFHdEIsT0FBTyxDQUFDLE1BQU1jLFFBQVAsRUFBaUJBLFFBQWpCLENBQTdCO0VBRUEsTUFBTVMsV0FBVyxHQUFHdkIsT0FBTyxDQUN6QixNQUFNTyxZQUFZLENBQUNPLFFBQUQsRUFBV00sYUFBYSxDQUFDQyxPQUF6QixDQURPLEVBRXpCO0VBQ0FQLFFBSHlCLENBQTNCO0VBTUEsb0JBQ0UsS0FBQyxpQkFBRCxDQUFtQixRQUFuQjtJQUE0QixLQUFLLEVBQUVNLGFBQWEsQ0FBQ0M7RUFBakQsd0JBQ0UsS0FBQyx1QkFBRCxDQUF5QixRQUF6QjtJQUNFLEtBQUssRUFBRUQsYUFBYSxDQUFDQyxPQUFkLENBQXNCRztFQUQvQix3QkFHRSxLQUFDLFVBQUQ7SUFDRSxRQUFRLEVBQUVGLGFBRFo7SUFFRSxXQUFXLEVBQUVDLFdBRmY7SUFHRSxZQUFZLEVBQUVyQixZQUhoQjtJQUlFLFVBQVUsRUFBRWtCLGFBQWEsQ0FBQ0M7RUFKNUIsV0FNR1IsUUFOSCxDQUhGLENBREYsQ0FERjtBQWdCRDtBQUNERCxhQUFhLENBQUNhLFlBQWQsR0FBNkI7RUFDM0JYLFFBQVEsRUFBRSxDQUFDLElBQUlWLGNBQUosRUFBRCxDQURpQjtFQUUzQkYsWUFBWSxFQUFFQyxZQUZhO0VBRzNCTTtBQUgyQixDQUE3QiJ9","export default function applyManager(managers, controller) {\n return managers.map(manager => {\n const middleware = manager.getMiddleware();\n return ({\n dispatch,\n getState\n }) => {\n controller.dispatch = dispatch;\n return middleware({\n controller,\n dispatch,\n getState\n });\n };\n });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcHBseU1hbmFnZXIiLCJtYW5hZ2VycyIsImNvbnRyb2xsZXIiLCJtYXAiLCJtYW5hZ2VyIiwibWlkZGxld2FyZSIsImdldE1pZGRsZXdhcmUiLCJkaXNwYXRjaCIsImdldFN0YXRlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0YXRlL2FwcGx5TWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNaWRkbGV3YXJlIH0gZnJvbSAnQHJlc3QtaG9va3MvdXNlLWVuaGFuY2VkLXJlZHVjZXInO1xuXG5pbXBvcnQgeyBNYW5hZ2VyIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlciBmcm9tICcuLi9jb250cm9sbGVyL0NvbnRyb2xsZXIuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhcHBseU1hbmFnZXIoXG4gIG1hbmFnZXJzOiBNYW5hZ2VyW10sXG4gIGNvbnRyb2xsZXI6IENvbnRyb2xsZXIsXG4pOiBNaWRkbGV3YXJlW10ge1xuICByZXR1cm4gbWFuYWdlcnMubWFwKG1hbmFnZXIgPT4ge1xuICAgIGNvbnN0IG1pZGRsZXdhcmUgPSBtYW5hZ2VyLmdldE1pZGRsZXdhcmUoKTtcbiAgICByZXR1cm4gKHsgZGlzcGF0Y2gsIGdldFN0YXRlIH0pID0+IHtcbiAgICAgIChjb250cm9sbGVyIGFzIGFueSkuZGlzcGF0Y2ggPSBkaXNwYXRjaDtcbiAgICAgIHJldHVybiBtaWRkbGV3YXJlKHsgY29udHJvbGxlciwgZGlzcGF0Y2gsIGdldFN0YXRlIH0pO1xuICAgIH07XG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFLQSxlQUFlLFNBQVNBLFlBQVQsQ0FDYkMsUUFEYSxFQUViQyxVQUZhLEVBR0M7RUFDZCxPQUFPRCxRQUFRLENBQUNFLEdBQVQsQ0FBYUMsT0FBTyxJQUFJO0lBQzdCLE1BQU1DLFVBQVUsR0FBR0QsT0FBTyxDQUFDRSxhQUFSLEVBQW5CO0lBQ0EsT0FBTyxDQUFDO01BQUVDLFFBQUY7TUFBWUM7SUFBWixDQUFELEtBQTRCO01BQ2hDTixVQUFELENBQW9CSyxRQUFwQixHQUErQkEsUUFBL0I7TUFDQSxPQUFPRixVQUFVLENBQUM7UUFBRUgsVUFBRjtRQUFjSyxRQUFkO1FBQXdCQztNQUF4QixDQUFELENBQWpCO0lBQ0QsQ0FIRDtFQUlELENBTk0sQ0FBUDtBQU9EIn0=","import { actionTypes } from '@rest-hooks/core';\nconst {\n SUBSCRIBE_TYPE,\n UNSUBSCRIBE_TYPE\n} = actionTypes;\n\n/** Handles subscription actions -> fetch or receive actions\n *\n * Constructor takes a SubscriptionConstructable class to control how\n * subscriptions are handled. (e.g., polling, websockets)\n */\nexport default class SubscriptionManager {\n constructor(Subscription) {\n this.subscriptions = {};\n this.Subscription = Subscription;\n\n this.middleware = ({\n dispatch,\n getState\n }) => {\n return next => action => {\n switch (action.type) {\n case SUBSCRIBE_TYPE:\n try {\n this.handleSubscribe(action, dispatch, getState);\n } catch (e) {\n console.error(e);\n }\n\n return Promise.resolve();\n\n case UNSUBSCRIBE_TYPE:\n this.handleUnsubscribe(action, dispatch);\n return Promise.resolve();\n\n default:\n return next(action);\n }\n };\n };\n }\n /** Ensures all subscriptions are cleaned up. */\n\n\n cleanup() {\n for (const key in this.subscriptions) {\n this.subscriptions[key].cleanup();\n }\n }\n /** Called when middleware intercepts 'rest-hooks/subscribe' action.\n *\n */\n\n\n handleSubscribe(action, dispatch, getState) {\n var _action$meta$options;\n\n const key = action.meta.key;\n const frequency = (_action$meta$options = action.meta.options) == null ? void 0 : _action$meta$options.pollFrequency;\n\n if (key in this.subscriptions) {\n this.subscriptions[key].add(frequency);\n } else {\n this.subscriptions[key] = new this.Subscription({\n schema: action.meta.schema,\n fetch: action.meta.fetch,\n frequency,\n key,\n getState\n }, dispatch);\n }\n }\n /** Called when middleware intercepts 'rest-hooks/unsubscribe' action.\n *\n */\n\n\n handleUnsubscribe(action, dispatch) {\n var _action$meta$options2;\n\n const key = action.meta.key;\n const frequency = (_action$meta$options2 = action.meta.options) == null ? void 0 : _action$meta$options2.pollFrequency;\n /* istanbul ignore else */\n\n if (key in this.subscriptions) {\n const empty = this.subscriptions[key].remove(frequency);\n\n if (empty) {\n delete this.subscriptions[key];\n }\n } else if (process.env.NODE_ENV !== 'production') {\n console.error(`Mismatched unsubscribe: ${key} is not subscribed`);\n }\n }\n /** Attaches Manager to store\n *\n * Intercepts 'rest-hooks/subscribe'/'rest-hooks/unsubscribe' to register resources that\n * need to be kept up to date.\n *\n * Will possibly dispatch 'rest-hooks/fetch' or 'rest-hooks/receive' to keep resources fresh\n *\n */\n\n\n getMiddleware() {\n return this.middleware;\n }\n\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhY3Rpb25UeXBlcyIsIlNVQlNDUklCRV9UWVBFIiwiVU5TVUJTQ1JJQkVfVFlQRSIsIlN1YnNjcmlwdGlvbk1hbmFnZXIiLCJjb25zdHJ1Y3RvciIsIlN1YnNjcmlwdGlvbiIsInN1YnNjcmlwdGlvbnMiLCJtaWRkbGV3YXJlIiwiZGlzcGF0Y2giLCJnZXRTdGF0ZSIsIm5leHQiLCJhY3Rpb24iLCJ0eXBlIiwiaGFuZGxlU3Vic2NyaWJlIiwiZSIsImNvbnNvbGUiLCJlcnJvciIsIlByb21pc2UiLCJyZXNvbHZlIiwiaGFuZGxlVW5zdWJzY3JpYmUiLCJjbGVhbnVwIiwia2V5IiwibWV0YSIsImZyZXF1ZW5jeSIsIm9wdGlvbnMiLCJwb2xsRnJlcXVlbmN5IiwiYWRkIiwic2NoZW1hIiwiZmV0Y2giLCJlbXB0eSIsInJlbW92ZSIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImdldE1pZGRsZXdhcmUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbWFuYWdlci9TdWJzY3JpcHRpb25NYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIE1pZGRsZXdhcmVBUEksXG4gIE1pZGRsZXdhcmUsXG4gIERpc3BhdGNoLFxuICBTdWJzY3JpYmVBY3Rpb24sXG4gIFVuc3Vic2NyaWJlQWN0aW9uLFxuICBNYW5hZ2VyLFxuICBhY3Rpb25UeXBlcyxcbiAgU2NoZW1hLFxuICBTdGF0ZSxcbn0gZnJvbSAnQHJlc3QtaG9va3MvY29yZSc7XG5cbmNvbnN0IHsgU1VCU0NSSUJFX1RZUEUsIFVOU1VCU0NSSUJFX1RZUEUgfSA9IGFjdGlvblR5cGVzO1xuXG50eXBlIEFjdGlvbnMgPSBVbnN1YnNjcmliZUFjdGlvbiB8IFN1YnNjcmliZUFjdGlvbjtcblxuLyoqIFByb3BlcnRpZXMgc2VudCB0byBTdWJzY3JpcHRpb24gY29uc3RydWN0b3IgKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3Vic2NyaXB0aW9uSW5pdCB7XG4gIHNjaGVtYT86IFNjaGVtYSB8IHVuZGVmaW5lZDtcbiAgZmV0Y2g6ICgpID0+IFByb21pc2U8YW55PjtcbiAga2V5OiBzdHJpbmc7XG4gIGdldFN0YXRlOiAoKSA9PiBTdGF0ZTx1bmtub3duPjtcbiAgZnJlcXVlbmN5PzogbnVtYmVyIHwgdW5kZWZpbmVkO1xufVxuXG4vKiogSW50ZXJmYWNlIGhhbmRsaW5nIGEgc2luZ2xlIHJlc291cmNlIHN1YnNjcmlwdGlvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWJzY3JpcHRpb24ge1xuICBhZGQoZnJlcXVlbmN5PzogbnVtYmVyKTogdm9pZDtcbiAgcmVtb3ZlKGZyZXF1ZW5jeT86IG51bWJlcik6IGJvb2xlYW47XG4gIGNsZWFudXAoKTogdm9pZDtcbn1cblxuLyoqIFRoZSBzdGF0aWMgY2xhc3MgdGhhdCBjb25zdHJ1Y3RzIFN1YnNjcmlwdGlvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWJzY3JpcHRpb25Db25zdHJ1Y3RhYmxlIHtcbiAgbmV3IChpbml0OiBTdWJzY3JpcHRpb25Jbml0LCBkaXNwYXRjaDogRGlzcGF0Y2g8YW55Pik6IFN1YnNjcmlwdGlvbjtcbn1cblxuLyoqIEhhbmRsZXMgc3Vic2NyaXB0aW9uIGFjdGlvbnMgLT4gZmV0Y2ggb3IgcmVjZWl2ZSBhY3Rpb25zXG4gKlxuICogQ29uc3RydWN0b3IgdGFrZXMgYSBTdWJzY3JpcHRpb25Db25zdHJ1Y3RhYmxlIGNsYXNzIHRvIGNvbnRyb2wgaG93XG4gKiBzdWJzY3JpcHRpb25zIGFyZSBoYW5kbGVkLiAoZS5nLiwgcG9sbGluZywgd2Vic29ja2V0cylcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3Vic2NyaXB0aW9uTWFuYWdlcjxTIGV4dGVuZHMgU3Vic2NyaXB0aW9uQ29uc3RydWN0YWJsZT5cbiAgaW1wbGVtZW50cyBNYW5hZ2VyXG57XG4gIHByb3RlY3RlZCBzdWJzY3JpcHRpb25zOiB7XG4gICAgW2tleTogc3RyaW5nXTogSW5zdGFuY2VUeXBlPFM+O1xuICB9ID0ge307XG5cbiAgcHJvdGVjdGVkIGRlY2xhcmUgcmVhZG9ubHkgU3Vic2NyaXB0aW9uOiBTO1xuICBwcm90ZWN0ZWQgZGVjbGFyZSBtaWRkbGV3YXJlOiBNaWRkbGV3YXJlO1xuXG4gIGNvbnN0cnVjdG9yKFN1YnNjcmlwdGlvbjogUykge1xuICAgIHRoaXMuU3Vic2NyaXB0aW9uID0gU3Vic2NyaXB0aW9uO1xuXG4gICAgdGhpcy5taWRkbGV3YXJlID0gPFIgZXh0ZW5kcyBSZWFjdC5SZWR1Y2VyPGFueSwgYW55Pj4oe1xuICAgICAgZGlzcGF0Y2gsXG4gICAgICBnZXRTdGF0ZSxcbiAgICB9OiBNaWRkbGV3YXJlQVBJPFI+KSA9PiB7XG4gICAgICByZXR1cm4gKG5leHQ6IERpc3BhdGNoPFI+KSA9PiAoYWN0aW9uOiBSZWFjdC5SZWR1Y2VyQWN0aW9uPFI+KSA9PiB7XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgICAgICBjYXNlIFNVQlNDUklCRV9UWVBFOlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTdWJzY3JpYmUoYWN0aW9uLCBkaXNwYXRjaCwgZ2V0U3RhdGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgIGNhc2UgVU5TVUJTQ1JJQkVfVFlQRTpcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVW5zdWJzY3JpYmUoYWN0aW9uLCBkaXNwYXRjaCk7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBFbnN1cmVzIGFsbCBzdWJzY3JpcHRpb25zIGFyZSBjbGVhbmVkIHVwLiAqL1xuICBjbGVhbnVwKCkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuc3Vic2NyaXB0aW9ucykge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zW2tleV0uY2xlYW51cCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDYWxsZWQgd2hlbiBtaWRkbGV3YXJlIGludGVyY2VwdHMgJ3Jlc3QtaG9va3Mvc3Vic2NyaWJlJyBhY3Rpb24uXG4gICAqXG4gICAqL1xuICBwcm90ZWN0ZWQgaGFuZGxlU3Vic2NyaWJlKFxuICAgIGFjdGlvbjogU3Vic2NyaWJlQWN0aW9uLFxuICAgIGRpc3BhdGNoOiBEaXNwYXRjaDxhbnk+LFxuICAgIGdldFN0YXRlOiAoKSA9PiBTdGF0ZTx1bmtub3duPixcbiAgKSB7XG4gICAgY29uc3Qga2V5ID0gYWN0aW9uLm1ldGEua2V5O1xuICAgIGNvbnN0IGZyZXF1ZW5jeSA9IGFjdGlvbi5tZXRhLm9wdGlvbnM/LnBvbGxGcmVxdWVuY3k7XG5cbiAgICBpZiAoa2V5IGluIHRoaXMuc3Vic2NyaXB0aW9ucykge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zW2tleV0uYWRkKGZyZXF1ZW5jeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uc1trZXldID0gbmV3IHRoaXMuU3Vic2NyaXB0aW9uKFxuICAgICAgICB7XG4gICAgICAgICAgc2NoZW1hOiBhY3Rpb24ubWV0YS5zY2hlbWEsXG4gICAgICAgICAgZmV0Y2g6IGFjdGlvbi5tZXRhLmZldGNoLFxuICAgICAgICAgIGZyZXF1ZW5jeSxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgZ2V0U3RhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRpc3BhdGNoLFxuICAgICAgKSBhcyBJbnN0YW5jZVR5cGU8Uz47XG4gICAgfVxuICB9XG5cbiAgLyoqIENhbGxlZCB3aGVuIG1pZGRsZXdhcmUgaW50ZXJjZXB0cyAncmVzdC1ob29rcy91bnN1YnNjcmliZScgYWN0aW9uLlxuICAgKlxuICAgKi9cbiAgcHJvdGVjdGVkIGhhbmRsZVVuc3Vic2NyaWJlKFxuICAgIGFjdGlvbjogVW5zdWJzY3JpYmVBY3Rpb24sXG4gICAgZGlzcGF0Y2g6IERpc3BhdGNoPGFueT4sXG4gICkge1xuICAgIGNvbnN0IGtleSA9IGFjdGlvbi5tZXRhLmtleTtcbiAgICBjb25zdCBmcmVxdWVuY3kgPSBhY3Rpb24ubWV0YS5vcHRpb25zPy5wb2xsRnJlcXVlbmN5O1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoa2V5IGluIHRoaXMuc3Vic2NyaXB0aW9ucykge1xuICAgICAgY29uc3QgZW1wdHkgPSB0aGlzLnN1YnNjcmlwdGlvbnNba2V5XS5yZW1vdmUoZnJlcXVlbmN5KTtcbiAgICAgIGlmIChlbXB0eSkge1xuICAgICAgICBkZWxldGUgdGhpcy5zdWJzY3JpcHRpb25zW2tleV07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBNaXNtYXRjaGVkIHVuc3Vic2NyaWJlOiAke2tleX0gaXMgbm90IHN1YnNjcmliZWRgKTtcbiAgICB9XG4gIH1cblxuICAvKiogQXR0YWNoZXMgTWFuYWdlciB0byBzdG9yZVxuICAgKlxuICAgKiBJbnRlcmNlcHRzICdyZXN0LWhvb2tzL3N1YnNjcmliZScvJ3Jlc3QtaG9va3MvdW5zdWJzY3JpYmUnIHRvIHJlZ2lzdGVyIHJlc291cmNlcyB0aGF0XG4gICAqIG5lZWQgdG8gYmUga2VwdCB1cCB0byBkYXRlLlxuICAgKlxuICAgKiBXaWxsIHBvc3NpYmx5IGRpc3BhdGNoICdyZXN0LWhvb2tzL2ZldGNoJyBvciAncmVzdC1ob29rcy9yZWNlaXZlJyB0byBrZWVwIHJlc291cmNlcyBmcmVzaFxuICAgKlxuICAgKi9cbiAgZ2V0TWlkZGxld2FyZTxUIGV4dGVuZHMgU3Vic2NyaXB0aW9uTWFuYWdlcjxhbnk+Pih0aGlzOiBUKSB7XG4gICAgcmV0dXJuIHRoaXMubWlkZGxld2FyZTtcbiAgfVxu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","export class BrowserConnectionListener {\n isOnline() {\n if (navigator.onLine !== undefined) {\n return navigator.onLine;\n }\n\n return true;\n }\n\n addOnlineListener(handler) {\n addEventListener('online', handler);\n }\n\n removeOnlineListener(handler) {\n removeEventListener('online', handler);\n }\n\n addOfflineListener(handler) {\n addEventListener('offline', handler);\n }\n\n removeOfflineListener(handler) {\n removeEventListener('offline', handler);\n }\n\n}\nexport class AlwaysOnlineConnectionListener {\n isOnline() {\n /* istanbul ignore next */\n return true;\n }\n\n addOnlineListener() {}\n\n removeOnlineListener() {}\n\n addOfflineListener() {}\n\n removeOfflineListener() {}\n\n}\nlet DefaultConnectionListener;\n/* istanbul ignore if */\n\nif (typeof navigator !== 'undefined' && typeof addEventListener === 'function') {\n DefaultConnectionListener = BrowserConnectionListener;\n} else {\n /* istanbul ignore next */\n DefaultConnectionListener = AlwaysOnlineConnectionListener;\n}\n\nexport default DefaultConnectionListener;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCcm93c2VyQ29ubmVjdGlvbkxpc3RlbmVyIiwiaXNPbmxpbmUiLCJuYXZpZ2F0b3IiLCJvbkxpbmUiLCJ1bmRlZmluZWQiLCJhZGRPbmxpbmVMaXN0ZW5lciIsImhhbmRsZXIiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlT25saW5lTGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiYWRkT2ZmbGluZUxpc3RlbmVyIiwicmVtb3ZlT2ZmbGluZUxpc3RlbmVyIiwiQWx3YXlzT25saW5lQ29ubmVjdGlvbkxpc3RlbmVyIiwiRGVmYXVsdENvbm5lY3Rpb25MaXN0ZW5lciJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyL0RlZmF1bHRDb25uZWN0aW9uTGlzdGVuZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbm5lY3Rpb25MaXN0ZW5lciBmcm9tICcuL0Nvbm5lY3Rpb25MaXN0ZW5lci5qcyc7XG5cbmV4cG9ydCBjbGFzcyBCcm93c2VyQ29ubmVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgQ29ubmVjdGlvbkxpc3RlbmVyIHtcbiAgaXNPbmxpbmUoKSB7XG4gICAgaWYgKG5hdmlnYXRvci5vbkxpbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5hdmlnYXRvci5vbkxpbmU7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYWRkT25saW5lTGlzdGVuZXIoaGFuZGxlcjogKCkgPT4gdm9pZCkge1xuICAgIGFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsIGhhbmRsZXIpO1xuICB9XG5cbiAgcmVtb3ZlT25saW5lTGlzdGVuZXIoaGFuZGxlcjogKCkgPT4gdm9pZCkge1xuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoJ29ubGluZScsIGhhbmRsZXIpO1xuICB9XG5cbiAgYWRkT2ZmbGluZUxpc3RlbmVyKGhhbmRsZXI6ICgpID0+IHZvaWQpIHtcbiAgICBhZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgaGFuZGxlcik7XG4gIH1cblxuICByZW1vdmVPZmZsaW5lTGlzdGVuZXIoaGFuZGxlcjogKCkgPT4gdm9pZCkge1xuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCBoYW5kbGVyKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWx3YXlzT25saW5lQ29ubmVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgQ29ubmVjdGlvbkxpc3RlbmVyIHtcbiAgaXNPbmxpbmUoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFkZE9ubGluZUxpc3RlbmVyKCkge31cblxuICByZW1vdmVPbmxpbmVMaXN0ZW5lcigpIHt9XG5cbiAgYWRkT2ZmbGluZUxpc3RlbmVyKCkge31cblxuICByZW1vdmVPZmZsaW5lTGlzdGVuZXIoKSB7fVxufVxuXG5sZXQgRGVmYXVsdENvbm5lY3Rpb25MaXN0ZW5lcjogeyBuZXcgKCk6IENvbm5lY3Rpb25MaXN0ZW5lciB9O1xuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAoXG4gIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmXG4gIHR5cGVvZiBhZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nXG4pIHtcbiAgRGVmYXVsdENvbm5lY3Rpb25MaXN0ZW5lciA9IEJyb3dzZXJDb25uZWN0aW9uTGlzdGVuZXI7XG59IGVsc2Uge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBEZWZhdWx0Q29ubmVjdGlvbkxpc3RlbmVyID0gQWx3YXlzT25saW5lQ29ubmVjdGlvbkxpc3RlbmVyO1xufVxuZXhwb3J0IGRlZmF1bHQgRGVmYXVsdENvbm5lY3Rpb25MaXN0ZW5lcjtcbiJdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxNQUFNQSx5QkFBTixDQUE4RDtFQUNuRUMsUUFBUSxHQUFHO0lBQ1QsSUFBSUMsU0FBUyxDQUFDQyxNQUFWLEtBQXFCQyxTQUF6QixFQUFvQztNQUNsQyxPQUFPRixTQUFTLENBQUNDLE1BQWpCO0lBQ0Q7O0lBQ0QsT0FBTyxJQUFQO0VBQ0Q7O0VBRURFLGlCQUFpQixDQUFDQyxPQUFELEVBQXNCO0lBQ3JDQyxnQkFBZ0IsQ0FBQyxRQUFELEVBQVdELE9BQVgsQ0FBaEI7RUFDRDs7RUFFREUsb0JBQW9CLENBQUNGLE9BQUQsRUFBc0I7SUFDeENHLG1CQUFtQixDQUFDLFFBQUQsRUFBV0gsT0FBWCxDQUFuQjtFQUNEOztFQUVESSxrQkFBa0IsQ0FBQ0osT0FBRCxFQUFzQjtJQUN0Q0MsZ0JBQWdCLENBQUMsU0FBRCxFQUFZRCxPQUFaLENBQWhCO0VBQ0Q7O0VBRURLLHFCQUFxQixDQUFDTCxPQUFELEVBQXNCO0lBQ3pDRyxtQkFBbUIsQ0FBQyxTQUFELEVBQVlILE9BQVosQ0FBbkI7RUFDRDs7QUF0QmtFO0FBeUJyRSxPQUFPLE1BQU1NLDhCQUFOLENBQW1FO0VBQ3hFWCxRQUFRLEdBQUc7SUFDVDtJQUNBLE9BQU8sSUFBUDtFQUNEOztFQUVESSxpQkFBaUIsR0FBRyxDQUFFOztFQUV0Qkcsb0JBQW9CLEdBQUcsQ0FBRTs7RUFFekJFLGtCQUFrQixHQUFHLENBQUU7O0VBRXZCQyxxQkFBcUIsR0FBRyxDQUFFOztBQVo4QztBQWUxRSxJQUFJRSx5QkFBSjtBQUNBOztBQUNBLElBQ0UsT0FBT1gsU0FBUCxLQUFxQixXQUFyQixJQUNBLE9BQU9LLGdCQUFQLEtBQTRCLFVBRjlCLEVBR0U7RUFDQU0seUJBQXlCLEdBQUdiLHlCQUE1QjtBQUNELENBTEQsTUFLTztFQUNMO0VBQ0FhLHlCQUF5QixHQUFHRCw4QkFBNUI7QUFDRDs7QUFDRCxlQUFlQyx5QkFBZiJ9","import { actionTypes } from '@rest-hooks/core';\nimport DefaultConnectionListener from './DefaultConnectionListener.js';\nconst {\n FETCH_TYPE\n} = actionTypes;\n/**\n * PollingSubscription keeps a given resource updated by\n * dispatching a fetch at a rate equal to the minimum update\n * interval requested.\n */\n\nexport default class PollingSubscription {\n constructor({\n key,\n schema,\n fetch,\n frequency,\n getState\n }, dispatch, connectionListener) {\n this.frequencyHistogram = new Map();\n\n this.offlineListener = () => {\n // this clears existing listeners, so no need to clear offline listener\n this.cleanup();\n this.connectionListener.addOnlineListener(this.onlineListener);\n };\n\n this.onlineListener = () => {\n this.connectionListener.removeOnlineListener(this.onlineListener);\n const now = Date.now();\n this.startId = setTimeout(() => {\n delete this.startId;\n this.update();\n this.run();\n }, Math.max(0, this.lastFetchTime() - now + this.frequency));\n this.connectionListener.addOfflineListener(this.offlineListener);\n };\n\n if (frequency === undefined) throw new Error('frequency needed for polling subscription');\n this.schema = schema;\n this.fetch = fetch;\n this.frequency = frequency;\n this.key = key;\n this.frequencyHistogram.set(this.frequency, 1);\n this.dispatch = dispatch;\n this.getState = getState;\n this.connectionListener = connectionListener || new DefaultConnectionListener(); // Kickstart running since this is initialized after the online notif is sent\n\n if (this.connectionListener.isOnline()) {\n this.onlineListener();\n } else {\n this.offlineListener();\n }\n }\n /** Subscribe to a frequency */\n\n\n add(frequency) {\n if (frequency === undefined) return;\n\n if (this.frequencyHistogram.has(frequency)) {\n this.frequencyHistogram.set(frequency, this.frequencyHistogram.get(frequency) + 1);\n } else {\n this.frequencyHistogram.set(frequency, 1); // new min so restart service\n\n if (frequency < this.frequency) {\n this.frequency = frequency;\n this.run();\n }\n }\n }\n /** Unsubscribe from a frequency */\n\n\n remove(frequency) {\n if (frequency === undefined) return false;\n\n if (this.frequencyHistogram.has(frequency)) {\n this.frequencyHistogram.set(frequency, this.frequencyHistogram.get(frequency) - 1);\n\n if (this.frequencyHistogram.get(frequency) < 1) {\n this.frequencyHistogram.delete(frequency); // nothing subscribed to this anymore...it is invalid\n\n if (this.frequencyHistogram.size === 0) {\n this.cleanup();\n return true;\n } // this was the min, so find the next size\n\n\n if (frequency <= this.frequency) {\n this.frequency = Math.min(...this.frequencyHistogram.keys());\n this.run();\n }\n }\n }\n /* istanbul ignore next */\n else if (process.env.NODE_ENV !== 'production') {\n console.error(`Mismatched remove: ${frequency} is not subscribed for ${this.key}`);\n }\n\n return false;\n }\n /** Cleanup means clearing out background interval. */\n\n\n cleanup() {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n delete this.intervalId;\n }\n\n if (this.lastIntervalId) {\n clearInterval(this.lastIntervalId);\n delete this.lastIntervalId;\n }\n\n if (this.startId) {\n clearTimeout(this.startId);\n delete this.startId;\n }\n\n this.connectionListener.removeOnlineListener(this.onlineListener);\n this.connectionListener.removeOfflineListener(this.offlineListener);\n }\n /** Trigger request for latest resource */\n\n\n update() {\n this.dispatch({\n type: FETCH_TYPE,\n payload: this.fetch,\n meta: {\n schema: this.schema,\n key: this.key,\n type: 'read',\n throttle: true,\n options: {\n dataExpiryLength: this.frequency / 2,\n errorExpiryLength: this.frequency / 10,\n // never break when data already exists\n errorPolicy: () => 'soft'\n },\n createdAt: new Date(),\n resolve: () => {},\n reject: () => {}\n }\n });\n }\n /** What happens when browser goes offline */\n\n\n /** Run polling process with current frequency\n *\n * Will clean up old poll interval on next run\n */\n run() {\n if (this.startId) return;\n if (this.intervalId) this.lastIntervalId = this.intervalId;\n this.intervalId = setInterval(() => {\n // since we don't know how long into the last poll it was before resetting\n // we wait til the next fetch to clear old intervals\n if (this.lastIntervalId) {\n clearInterval(this.lastIntervalId);\n delete this.lastIntervalId;\n }\n\n this.update();\n }, this.frequency);\n }\n /** Last fetch time */\n\n\n lastFetchTime() {\n var _this$getState$meta$t, _this$getState$meta$t2;\n\n return (_this$getState$meta$t = (_this$getState$meta$t2 = this.getState().meta[this.key]) == null ? void 0 : _this$getState$meta$t2.date) != null ? _this$getState$meta$t : 0;\n }\n\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhY3Rpb25UeXBlcyIsIkRlZmF1bHRDb25uZWN0aW9uTGlzdGVuZXIiLCJGRVRDSF9UWVBFIiwiUG9sbGluZ1N1YnNjcmlwdGlvbiIsImNvbnN0cnVjdG9yIiwia2V5Iiwic2NoZW1hIiwiZmV0Y2giLCJmcmVxdWVuY3kiLCJnZXRTdGF0ZSIsImRpc3BhdGNoIiwiY29ubmVjdGlvbkxpc3RlbmVyIiwiZnJlcXVlbmN5SGlzdG9ncmFtIiwiTWFwIiwib2ZmbGluZUxpc3RlbmVyIiwiY2xlYW51cCIsImFkZE9ubGluZUxpc3RlbmVyIiwib25saW5lTGlzdGVuZXIiLCJyZW1vdmVPbmxpbmVMaXN0ZW5lciIsIm5vdyIsIkRhdGUiLCJzdGFydElkIiwic2V0VGltZW91dCIsInVwZGF0ZSIsInJ1biIsIk1hdGgiLCJtYXgiLCJsYXN0RmV0Y2hUaW1lIiwiYWRkT2ZmbGluZUxpc3RlbmVyIiwidW5kZWZpbmVkIiwiRXJyb3IiLCJzZXQiLCJpc09ubGluZSIsImFkZCIsImhhcyIsImdldCIsInJlbW92ZSIsImRlbGV0ZSIsInNpemUiLCJtaW4iLCJrZXlzIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiY29uc29sZSIsImVycm9yIiwiaW50ZXJ2YWxJZCIsImNsZWFySW50ZXJ2YWwiLCJsYXN0SW50ZXJ2YWxJZCIsImNsZWFyVGltZW91dCIsInJlbW92ZU9mZmxpbmVMaXN0ZW5lciIsInR5cGUiLCJwYXlsb2FkIiwibWV0YSIsInRocm90dGxlIiwib3B0aW9ucyIsImRhdGFFeHBpcnlMZW5ndGgiLCJlcnJvckV4cGlyeUxlbmd0aCIsImVycm9yUG9saWN5IiwiY3JlYXRlZEF0IiwicmVzb2x2ZSIsInJlamVjdCIsInNldEludGVydmFsIiwiZGF0ZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyL1BvbGxpbmdTdWJzY3JpcHRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWN0aW9uVHlwZXMsIERpc3BhdGNoLCBTY2hlbWEsIFN0YXRlIH0gZnJvbSAnQHJlc3QtaG9va3MvY29yZSc7XG5cbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgU3Vic2NyaXB0aW9uSW5pdCB9IGZyb20gJy4vU3Vic2NyaXB0aW9uTWFuYWdlci5qcyc7XG5pbXBvcnQgRGVmYXVsdENvbm5lY3Rpb25MaXN0ZW5lciBmcm9tICcuL0RlZmF1bHRDb25uZWN0aW9uTGlzdGVuZXIuanMnO1xuaW1wb3J0IENvbm5lY3Rpb25MaXN0ZW5lciBmcm9tICcuL0Nvbm5lY3Rpb25MaXN0ZW5lci5qcyc7XG5cbmNvbnN0IHsgRkVUQ0hfVFlQRSB9ID0gYWN0aW9uVHlwZXM7XG5cbi8qKlxuICogUG9sbGluZ1N1YnNjcmlwdGlvbiBrZWVwcyBhIGdpdmVuIHJlc291cmNlIHVwZGF0ZWQgYnlcbiAqIGRpc3BhdGNoaW5nIGEgZmV0Y2ggYXQgYSByYXRlIGVxdWFsIHRvIHRoZSBtaW5pbXVtIHVwZGF0ZVxuICogaW50ZXJ2YWwgcmVxdWVzdGVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQb2xsaW5nU3Vic2NyaXB0aW9uIGltcGxlbWVudHMgU3Vic2NyaXB0aW9uIHtcbiAgcHJvdGVjdGVkIGRlY2xhcmUgcmVhZG9ubHkgc2NoZW1hOiBTY2hlbWEgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBkZWNsYXJlIHJlYWRvbmx5IGZldGNoOiAoKSA9PiBQcm9taXNlPGFueT47XG4gIHByb3RlY3RlZCBkZWNsYXJlIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgZGVjbGFyZSBmcmVxdWVuY3k6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGZyZXF1ZW5jeUhpc3RvZ3JhbTogTWFwPG51bWJlciwgbnVtYmVyPiA9IG5ldyBNYXAoKTtcbiAgcHJvdGVjdGVkIGRlY2xhcmUgZGlzcGF0Y2g6IERpc3BhdGNoPGFueT47XG4gIHByb3RlY3RlZCBkZWNsYXJlIGdldFN0YXRlOiAoKSA9PiBTdGF0ZTx1bmtub3duPjtcbiAgcHJvdGVjdGVkIGRlY2xhcmUgaW50ZXJ2YWxJZD86IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPjtcbiAgcHJvdGVjdGVkIGRlY2xhcmUgbGFzdEludGVydmFsSWQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD47XG4gIHByb3RlY3RlZCBkZWNsYXJlIHN0YXJ0SWQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgcHJpdmF0ZSBkZWNsYXJlIGNvbm5lY3Rpb25MaXN0ZW5lcjogQ29ubmVjdGlvbkxpc3RlbmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHsga2V5LCBzY2hlbWEsIGZldGNoLCBmcmVxdWVuY3ksIGdldFN0YXRlIH06IFN1YnNjcmlwdGlvbkluaXQsXG4gICAgZGlzcGF0Y2g6IERpc3BhdGNoPGFueT4sXG4gICAgY29ubmVjdGlvbkxpc3RlbmVyPzogQ29ubmVjdGlvbkxpc3RlbmVyLFxuICApIHtcbiAgICBpZiAoZnJlcXVlbmN5ID09PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZyZXF1ZW5jeSBuZWVkZWQgZm9yIHBvbGxpbmcgc3Vic2NyaXB0aW9uJyk7XG4gICAgdGhpcy5zY2hlbWEgPSBzY2hlbWE7XG4gICAgdGhpcy5mZXRjaCA9IGZldGNoO1xuICAgIHRoaXMuZnJlcXVlbmN5ID0gZnJlcXVlbmN5O1xuICAgIHRoaXMua2V5ID0ga2V5O1xuICAgIHRoaXMuZnJlcXVlbmN5SGlzdG9ncmFtLnNldCh0aGlzLmZyZXF1ZW5jeSwgMSk7XG4gICAgdGhpcy5kaXNwYXRjaCA9IGRpc3BhdGNoO1xuICAgIHRoaXMuZ2V0U3RhdGUgPSBnZXRTdGF0ZTtcbiAgICB0aGlzLmNvbm5lY3Rpb25MaXN0ZW5lciA9XG4gICAgICBjb25uZWN0aW9uTGlzdGVuZXIgfHwgbmV3IERlZmF1bHRDb25uZWN0aW9uTGlzdGVuZXIoKTtcblxuICAgIC8vIEtpY2tzdGFydCBydW5uaW5nIHNpbmNlIHRoaXMgaXMgaW5pdGlhbGl6ZWQgYWZ0ZXIgdGhlIG9ubGluZSBub3RpZiBpcyBzZW50XG4gICAgaWYgKHRoaXMuY29ubmVjdGlvbkxpc3RlbmVyLmlzT25saW5lKCkpIHtcbiAgICAgIHRoaXMub25saW5lTGlzdGVuZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vZmZsaW5lTGlzdGVuZXIoKTtcbiAgICB9XG4gIH1cblxuICAvKiogU3Vic2NyaWJlIHRvIGEgZnJlcXVlbmN5ICovXG4gIGFkZChmcmVxdWVuY3k/OiBudW1iZXIpIHtcbiAgICBpZiAoZnJlcXVlbmN5ID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5mcmVxdWVuY3lIaXN0b2dyYW0uaGFzKGZyZXF1ZW5jeSkpIHtcbiAgICAgIHRoaXMuZnJlcXVlbmN5SGlzdG9ncmFtLnNldChcbiAgICAgICAgZnJlcXVlbmN5LFxuICAgICAgICAodGhpcy5mcmVxdWVuY3lIaXN0b2dyYW0uZ2V0KGZyZXF1ZW5jeSkgYXMgbnVtYmVyKSArIDEsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZyZXF1ZW5jeUhpc3RvZ3JhbS5zZXQoZnJlcXVlbmN5LCAxKTtcblxuICAgICAgLy8gbmV3IG1pbiBzbyByZXN0YXJ0IHNlcnZpY2VcbiAgICAgIGlmIChmcmVxdWVuY3kgPCB0aGlzLmZyZXF1ZW5jeSkge1xuICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IGZyZXF1ZW5jeTtcbiAgICAgICAgdGhpcy5ydW4oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogVW5zdWJzY3JpYmUgZnJvbSBhIGZyZXF1ZW5jeSAqL1xuICByZW1vdmUoZnJlcXVlbmN5PzogbnVtYmVyKSB7XG4gICAgaWYgKGZyZXF1ZW5jeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuZnJlcXVlbmN5SGlzdG9ncmFtLmhhcyhmcmVxdWVuY3kpKSB7XG4gICAgICB0aGlzLmZyZXF1ZW5jeUhpc3RvZ3JhbS5zZXQoXG4gICAgICAgIGZyZXF1ZW5jeSxcbiAgICAgICAgKHRoaXMuZnJlcXVlbmN5SGlzdG9ncmFtLmdldChmcmVxdWVuY3kpIGFzIG51bWJlcikgLSAxLFxuICAgICAgKTtcbiAgICAgIGlmICgodGhpcy5mcmVxdWVuY3lIaXN0b2dyYW0uZ2V0KGZyZXF1ZW5jeSkgYXMgbnVtYmVyKSA8IDEpIHtcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lIaXN0b2dyYW0uZGVsZXRlKGZyZXF1ZW5jeSk7XG5cbiAgICAgICAgLy8gbm90aGluZyBzdWJzY3JpYmVkIHRvIHRoaXMgYW55bW9yZS4uLml0IGlzIGludmFsaWRcbiAgICAgICAgaWYgKHRoaXMuZnJlcXVlbmN5SGlzdG9ncmFtLnNpemUgPT09IDApIHtcbiAgICAgICAgICB0aGlzLmNsZWFudXAoKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoaXMgd2FzIHRoZSBtaW4sIHNvIGZpbmQgdGhlIG5leHQgc2l6ZVxuICAgICAgICBpZiAoZnJlcXVlbmN5IDw9IHRoaXMuZnJlcXVlbmN5KSB7XG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBNYXRoLm1pbiguLi50aGlzLmZyZXF1ZW5jeUhpc3RvZ3JhbS5rZXlzKCkpO1xuICAgICAgICAgIHRoaXMucnVuKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGVsc2UgaWYgKFxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJ1xuICAgICkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYE1pc21hdGNoZWQgcmVtb3ZlOiAke2ZyZXF1ZW5jeX0gaXMgbm90IHN1YnNjcmliZWQgZm9yICR7dGhpcy5rZXl9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBDbGVhbnVwIG1lYW5zIGNsZWFyaW5nIG91dCBiYWNrZ3JvdW5kIGludGVydmFsLiAqL1xuICBjbGVhbnVwKCkge1xuICAgIGlmICh0aGlzLmludGVydmFsSWQpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElkKTtcbiAgICAgIGRlbGV0ZSB0aGlzLmludGVydmFsSWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmxhc3RJbnRlcnZhbElkKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMubGFzdEludGVydmFsSWQpO1xuICAgICAgZGVsZXRlIHRoaXMubGFzdEludGVydmFsSWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0YXJ0SWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN0YXJ0SWQpO1xuICAgICAgZGVsZXRlIHRoaXMuc3RhcnRJZDtcbiAgICB9XG4gICAgdGhpcy5jb25uZWN0aW9uTGlzdGVuZXIucmVtb3ZlT25saW5lTGlzdGVuZXIodGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gICAgdGhpcy5jb25uZWN0aW9uTGlzdGVuZXIucmVtb3ZlT2ZmbGluZUxpc3RlbmVyKHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKiBUcmlnZ2VyIHJlcXVlc3QgZm9yIGxhdGVzdCByZXNvdXJjZSAqL1xuICBwcm90ZWN0ZWQgdXBkYXRlKCkge1xuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRkVUQ0hfVFlQRSxcbiAgICAgIHBheWxvYWQ6IHRoaXMuZmV0Y2gsXG4gICAgICBtZXRhOiB7XG4gICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWEsXG4gICAgICAgIGtleTogdGhpcy5rZXksXG4gICAgICAgIHR5cGU6ICdyZWFkJyxcbiAgICAgICAgdGhyb3R0bGU6IHRydWUsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBkYXRhRXhwaXJ5TGVuZ3RoOiB0aGlzLmZyZXF1ZW5jeSAvIDIsXG4gICAgICAgICAgZXJyb3JFeHBpcnlMZW5ndGg6IHRoaXMuZnJlcXVlbmN5IC8gMTAsXG4gICAgICAgICAgLy8gbmV2ZXIgYnJlYWsgd2hlbiBkYXRhIGFscmVhZHkgZXhpc3RzXG4gICAgICAgICAgZXJyb3JQb2xpY3k6ICgpID0+ICdzb2Z0JyBhcyBjb25zdCxcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICByZXNvbHZlOiAoKSA9PiB7fSxcbiAgICAgICAgcmVqZWN0OiAoKSA9PiB7fSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKiogV2hhdCBoYXBwZW5zIHdoZW4gYnJvd3NlciBnb2VzIG9mZmxpbmUgKi9cbiAgcHJvdGVjdGVkIG9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAvLyB0aGlzIGNsZWFycyBleGlzdGluZyBsaXN0ZW5lcnMsIHNvIG5vIG5lZWQgdG8gY2xlYXIgb2ZmbGluZSBsaXN0ZW5lclxuICAgIHRoaXMuY2xlYW51cCgpO1xuICAgIHRoaXMuY29ubmVjdGlvbkxpc3RlbmVyLmFkZE9ubGluZUxpc3RlbmVyKHRoaXMub25saW5lTGlzdGVuZXIpO1xuICB9O1xuXG4gIC8qKiBXaGF0IGhhcHBlbnMgd2hlbiBicm93c2VyIGNvbWVzIG9ubGluZSAqL1xuICBwcm90ZWN0ZWQgb25saW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgdGhpcy5jb25uZWN0aW9uTGlzdGVuZXIucmVtb3ZlT25saW5lTGlzdGVuZXIodGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLnN0YXJ0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGRlbGV0ZSB0aGlzLnN0YXJ0SWQ7XG4gICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgICAgdGhpcy5ydW4oKTtcbiAgICB9LCBNYXRoLm1heCgwLCB0aGlzLmxhc3RGZXRjaFRpbWUoKSAtIG5vdyArIHRoaXMuZnJlcXVlbmN5KSk7XG4gICAgdGhpcy5jb25uZWN0aW9uTGlzdGVuZXIuYWRkT2ZmbGluZUxpc3RlbmVyKHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgfTtcblxuICAvKiogUnVuIHBvbGxpbmcgcHJvY2VzcyB3aXRoIGN1cnJlbnQgZnJlcXVlbmN5XG4gICAqXG4gICAqIFdpbGwgY2xlYW4gdXAgb2xkIHBvbGwgaW50ZXJ2YWwgb24gbmV4dCBydW5cbiAgICovXG4gIHByb3RlY3RlZCBydW4oKSB7XG4gICAgaWYgKHRoaXMuc3RhcnRJZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmludGVydmFsSWQpIHRoaXMubGFzdEludGVydmFsSWQgPSB0aGlzLmludGVydmFsSWQ7XG4gICAgdGhpcy5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgLy8gc2luY2Ugd2UgZG9uJ3Qga25vdyBob3cgbG9uZyBpbnRvIHRoZSBsYXN0IHBvbGwgaXQgd2FzIGJlZm9yZSByZXNldHRpbmdcbiAgICAgIC8vIHdlIHdhaXQgdGlsIHRoZSBuZXh0IGZldGNoIHRvIGNsZWFyIG9sZCBpbnRlcnZhbHNcbiAgICAgIGlmICh0aGlzLmxhc3RJbnRlcnZhbElkKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5sYXN0SW50ZXJ2YWxJZCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmxhc3RJbnRlcnZhbElkO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9LCB0aGlzLmZyZXF1ZW5jeSk7XG4gIH1cblxuICAvKiogTGFzdCBmZXRjaCB0aW1lICovXG4gIHByb3RlY3RlZCBsYXN0RmV0Y2hUaW1lKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0YXRlKCkubWV0YVt0aGlzLmtleV0/LmRhdGUgPz8gMDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxXQUFULFFBQXFELGtCQUFyRDtBQUdBLE9BQU9DLHlCQUFQLE1BQXNDLGdDQUF0QztBQUdBLE1BQU07RUFBRUM7QUFBRixJQUFpQkYsV0FBdkI7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLGVBQWUsTUFBTUcsbUJBQU4sQ0FBa0Q7RUFhL0RDLFdBQVcsQ0FDVDtJQUFFQyxHQUFGO0lBQU9DLE1BQVA7SUFBZUMsS0FBZjtJQUFzQkMsU0FBdEI7SUFBaUNDO0VBQWpD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","import { CacheProvider as CoreCacheProvider, NetworkManager } from '@rest-hooks/core';\nimport { SubscriptionManager, PollingSubscription, DevToolsManager } from '../../manager/index.js';\nimport PromiseifyMiddleware from './PromiseifyMiddleware.js';\nimport ExternalCacheProvider from './ExternalCacheProvider.js';\n\nconst CacheProvider = props => CoreCacheProvider(props);\n\nCacheProvider.defaultProps = { ...CoreCacheProvider.defaultProps,\n managers: [...CoreCacheProvider.defaultProps.managers, new SubscriptionManager(PollingSubscription)]\n};\n/* istanbul ignore next */\n\nif (process.env.NODE_ENV !== 'production') {\n const networkManager = CacheProvider.defaultProps.managers.find(manager => manager instanceof NetworkManager);\n CacheProvider.defaultProps.managers.unshift(new DevToolsManager(undefined, networkManager && networkManager.skipLogging.bind(networkManager)));\n}\n\nexport { CacheProvider, ExternalCacheProvider, PromiseifyMiddleware };\nexport { default as mapMiddleware } from './mapMiddleware.js';\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDYWNoZVByb3ZpZGVyIiwiQ29yZUNhY2hlUHJvdmlkZXIiLCJOZXR3b3JrTWFuYWdlciIsIlN1YnNjcmlwdGlvbk1hbmFnZXIiLCJQb2xsaW5nU3Vic2NyaXB0aW9uIiwiRGV2VG9vbHNNYW5hZ2VyIiwiUHJvbWlzZWlmeU1pZGRsZXdhcmUiLCJFeHRlcm5hbENhY2hlUHJvdmlkZXIiLCJwcm9wcyIsImRlZmF1bHRQcm9wcyIsIm1hbmFnZXJzIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwibmV0d29ya01hbmFnZXIiLCJmaW5kIiwibWFuYWdlciIsInVuc2hpZnQiLCJ1bmRlZmluZWQiLCJza2lwTG9nZ2luZyIsImJpbmQiLCJkZWZhdWx0IiwibWFwTWlkZGxld2FyZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWFjdC1pbnRlZ3JhdGlvbi9wcm92aWRlci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDYWNoZVByb3ZpZGVyIGFzIENvcmVDYWNoZVByb3ZpZGVyLFxuICBOZXR3b3JrTWFuYWdlcixcbn0gZnJvbSAnQHJlc3QtaG9va3MvY29yZSc7XG5cbmltcG9ydCB7XG4gIFN1YnNjcmlwdGlvbk1hbmFnZXIsXG4gIFBvbGxpbmdTdWJzY3JpcHRpb24sXG4gIERldlRvb2xzTWFuYWdlcixcbn0gZnJvbSAnLi4vLi4vbWFuYWdlci9pbmRleC5qcyc7XG5pbXBvcnQgUHJvbWlzZWlmeU1pZGRsZXdhcmUgZnJvbSAnLi9Qcm9taXNlaWZ5TWlkZGxld2FyZS5qcyc7XG5pbXBvcnQgRXh0ZXJuYWxDYWNoZVByb3ZpZGVyIGZyb20gJy4vRXh0ZXJuYWxDYWNoZVByb3ZpZGVyLmpzJztcblxuY29uc3QgQ2FjaGVQcm92aWRlcjogdHlwZW9mIENvcmVDYWNoZVByb3ZpZGVyID0gcHJvcHMgPT5cbiAgQ29yZUNhY2hlUHJvdmlkZXIocHJvcHMpO1xuQ2FjaGVQcm92aWRlci5kZWZhdWx0UHJvcHMgPSB7XG4gIC4uLkNvcmVDYWNoZVByb3ZpZGVyLmRlZmF1bHRQcm9wcyxcbiAgbWFuYWdlcnM6IFtcbiAgICAuLi5Db3JlQ2FjaGVQcm92aWRlci5kZWZhdWx0UHJvcHMubWFuYWdlcnMsXG4gICAgbmV3IFN1YnNjcmlwdGlvbk1hbmFnZXIoUG9sbGluZ1N1YnNjcmlwdGlvbiksXG4gIF0sXG59O1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGNvbnN0IG5ldHdvcmtNYW5hZ2VyOiBOZXR3b3JrTWFuYWdlciB8IHVuZGVmaW5lZCA9XG4gICAgQ2FjaGVQcm92aWRlci5kZWZhdWx0UHJvcHMubWFuYWdlcnMuZmluZChcbiAgICAgIG1hbmFnZXIgPT4gbWFuYWdlciBpbnN0YW5jZW9mIE5ldHdvcmtNYW5hZ2VyLFxuICAgICkgYXMgYW55O1xuICBDYWNoZVByb3ZpZGVyLmRlZmF1bHRQcm9wcy5tYW5hZ2Vycy51bnNoaWZ0KFxuICAgIG5ldyBEZXZUb29sc01hbmFnZXIoXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBuZXR3b3JrTWFuYWdlciAmJiBuZXR3b3JrTWFuYWdlci5za2lwTG9nZ2luZy5iaW5kKG5ldHdvcmtNYW5hZ2VyKSxcbiAgICApLFxuICApO1xufVxuXG5leHBvcnQgeyBDYWNoZVByb3ZpZGVyLCBFeHRlcm5hbENhY2hlUHJvdmlkZXIsIFByb21pc2VpZnlNaWRkbGV3YXJlIH07XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1hcE1pZGRsZXdhcmUgfSBmcm9tICcuL21hcE1pZGRsZXdhcmUuanMnO1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUNFQSxhQUFhLElBQUlDLGlCQURuQixFQUVFQyxjQUZGLFFBR08sa0JBSFA7QUFLQSxTQUNFQyxtQkFERixFQUVFQyxtQkFGRixFQUdFQyxlQUhGLFFBSU8sd0JBSlA7QUFLQSxPQUFPQyxvQkFBUCxNQUFpQywyQkFBakM7QUFDQSxPQUFPQyxxQkFBUCxNQUFrQyw0QkFBbEM7O0FBRUEsTUFBTVAsYUFBdUMsR0FBR1EsS0FBSyxJQUNuRFAsaUJBQWlCLENBQUNPLEtBQUQsQ0FEbkI7O0FBRUFSLGFBQWEsQ0FBQ1MsWUFBZCxHQUE2QixFQUMzQixHQUFHUixpQkFBaUIsQ0FBQ1EsWUFETTtFQUUzQkMsUUFBUSxFQUFFLENBQ1IsR0FBR1QsaUJBQWlCLENBQUNRLFlBQWxCLENBQStCQyxRQUQxQixFQUVSLElBQUlQLG1CQUFKLENBQXdCQyxtQkFBeEIsQ0FGUTtBQUZpQixDQUE3QjtBQU9BOztBQUNBLElBQUlPLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxRQUFaLEtBQXlCLFlBQTdCLEVBQTJDO0VBQ3pDLE1BQU1DLGNBQTBDLEdBQzlDZCxhQUFhLENBQUNTLFlBQWQsQ0FBMkJDLFFBQTNCLENBQW9DSyxJQUFwQyxDQUNFQyxPQUFPLElBQUlBLE9BQU8sWUFBWWQsY0FEaEMsQ0FERjtFQUlBRixhQUFhLENBQUNTLFlBQWQsQ0FBMkJDLFFBQTNCLENBQW9DTyxPQUFwQyxDQUNFLElBQUlaLGVBQUosQ0FDRWEsU0FERixFQUVFSixjQUFjLElBQUlBLGNBQWMsQ0FBQ0ssV0FBZixDQUEyQkMsSUFBM0IsQ0FBZ0NOLGNBQWhDLENBRnBCLENBREY7QUFNRDs7QUFFRCxTQUFTZCxhQUFULEVBQXdCTyxxQkFBeEIsRUFBK0NELG9CQUEvQztBQUNBLFNBQVNlLE9BQU8sSUFBSUMsYUFBcEIsUUFBeUMsb0JBQXpDIn0="],"names":["getLinearProgressUtilityClass","slot","generateUtilityClass","generateUtilityClasses","_excluded","_t","_t2","_t3","_t4","_t5","_t6","_","t","indeterminate1Keyframe","indeterminate2Keyframe","bufferKeyframe","getColorShade","theme","color","vars","palette","LinearProgress","mode","main","LinearProgressRoot","styled","name","overridesResolver","props","styles","ownerState","root","capitalize","variant","position","overflow","display","height","zIndex","colorAdjust","backgroundColor","content","left","top","right","bottom","opacity","transform","LinearProgressDashed","dashed","marginTop","width","backgroundImage","backgroundSize","backgroundPosition","LinearProgressBar1","bar","bar1Indeterminate","bar1Determinate","bar1Buffer","transition","transformOrigin","LinearProgressBar2","bar2Indeterminate","bar2Buffer","inProps","ref","useThemeProps","className","value","valueBuffer","other","classes","slots","bar1","bar2","composeClasses","useUtilityClasses","isRtl","rootProps","inlineStyles","undefined","Math","round","clsx","role","children","style","usePromisifiedDispatch","dispatch","state","dispatchPromiseRef","useRef","useEffect","current","resolve","useCallback","action","promiseHolder","promise","Promise","NewPromiseHolder","unsetDispatch","Error","useEnhancedReducer","reducer","startingState","middlewares","stateRef","realDispatch","useReducer","dispatchWithPromise","outerDispatch","useMemo","middlewareAPI","getState","chain","map","middleware","compose","fns","initial","reduceRight","v","f","invariant","condition","format","args","process","error","argIndex","replace","framesToPop","FETCH_TYPE","RECEIVE_TYPE","OPTIMISTIC_TYPE","RESET_TYPE","SUBSCRIBE_TYPE","UNSUBSCRIBE_TYPE","INVALIDATE_TYPE","GC_TYPE","Link","constructor","this","WeakMap","KeySize","super","message","first","key","link","traverse","get","has","Object","prototype","hasOwnProperty","call","set","length","cur","i","DRAFT","Symbol","unvisitEntity","entityOrId","schema","unvisit","getEntity","localCache","entityCache","dependencies","cycleIndex","entity","pk","toJS","create","found","deleted","push","trackingIndex","wrappedUnvisit","originalUnvisit","og","input","withTrackedEntities","setLocal","entityCopy","globalCacheEntry","id","getGlobalCacheEntry","denormalize","localKey","slice","getEntities","entities","entityIsImmutable","_entities$schemaKey","schemaKey","getIn","resultCache","resolvedEntities","hasDenormalize","Array","isArray","ret","getUnvisit","inferResults","indexes","infer","canInfer","createReceive","endpoint","fetchedAt","response","_endpoint$errorExpiry","_endpoint$dataExpiryL","expiryLength","errorExpiryLength","dataExpiryLength","now","Date","meta","date","expiresAt","update","errorPolicy","type","payload","selectMeta","fetchKey","Controller","globalCache","results","fetch","reject","a","b","sideEffect","throttle","options","createdAt","optimisticUpdate","optimisticResponse","createFetch","invalidate","createInvalidate","resetEntireStore","receive","rest","receiveError","subscribe","createSubscription","unsubscribe","createUnsubscription","snapshot","Snapshot","getError","getResponse","isActive","cacheResults","getResults","schemaHasEntity","data","expiryStatus","invalidated","Expiry","Invalid","invalidIfStale","Valid","InvalidIfStale","suspend","Infinity","entries","forEach","keys","_state$entityMeta$key","_state$entityMeta$key2","_state$entityMeta$key3","min","entityMeta","nestedSchema","values","some","x","controller","StateContext","createContext","DispatchContext","DenormalizeCacheContext","ControllerContext","updaters","visit","parent","addEntity","visitedEntities","normalize","existingEntities","existingIndexes","existingEntityMeta","result","schemaType","includes","expectedSchemaType","processedEntity","existingEntity","merge","entityExpiresAt","inStoreEntity","_entityMeta$schemaKey","_entityMeta$schemaKey2","_entityMeta$schemaKey3","_meta$fetchedAt","_entityMeta$schemaKey4","_entityMeta$schemaKey5","inStoreMeta","useIncoming","max","_meta$fetchedAt2","index","indexMap","addEntities","AbortOptimistic","initialState","optimistic","lastReset","createReducer","_action$date","_entities$key","_entityMeta$key","_action$endpoint","receiveAction","getOptimisticResponse","createOptimistic","getTime","reduceError","_state$meta$action$me","e","fromEntries","updater","applyUpdatersToResults","console","prevExpiresAt","filterOptimistic","JSON","stringify","status","resolvingAction","filter","optimisticAction","ExpiryStatus","Entity","toJSON","existingMeta","incomingMeta","existing","incoming","fromJS","instance","assign","entityType","errorMessage","validate","recurse","indexName","params","find","indexFromParams","denormEntity","toObject","nextInput","deletedItem","defaults","__defaults","isEntity","PolymorphicSchema","definition","schemaAttribute","_schemaAttribute","define","isSingleSchema","getSchemaAttribute","inferSchema","attr","normalizeValue","normalizedValue","denormalizeValue","validateSchema","getValues","filterEmpty","item","ArraySchema","isImmutable","object","_map","denormalizeImmutable","reduce","stringKey","foundItem","localSchema","resultObject","k","DELETED","memoize","fn","EnterLeaveCounter","enter","enteringNode","previousLength","entered","itemsA","itemsB","Set","insertItem","add","union","node","isNodeInDocument","contains","leave","leavingNode","items","reset","NativeDragSource","initializeExposedProperties","config","exposeProperties","property","defineProperty","configurable","enumerable","warn","loadDataTransfer","dataTransfer","newProperties","propertyFn","matchesTypes","defineProperties","canDrag","beginDrag","isDragging","monitor","handle","getSourceId","endDrag","FILE","URL","TEXT","HTML","getDataFromDataTransfer","typesToTry","defaultValue","resultSoFar","typeToTry","getData","nativeTypesConfig","files","html","urls","split","text","matchNativeItemType","dataTransferTypes","types","nativeItemType","typeConfig","indexOf","isFirefox","test","navigator","userAgent","isSafari","Boolean","window","safari","MonotonicInterpolant","interpolate","xs","ys","c1s","c2s","c3s","mid","low","high","floor","xHere","diff","diffSq","sort","dys","dxs","ms","dx","dy","i1","i2","m2","mNext","dxNext","common","m","i3","c1","invDx","ELEMENT_NODE","getNodeClientOffset","el","nodeType","parentElement","getBoundingClientRect","y","getEventClientOffset","clientX","clientY","getDragPreviewOffset","sourceNode","dragPreview","clientOffset","anchorPoint","offsetPoint","isImage","nodeName","document","documentElement","dragPreviewNodeOffsetFromClient","offsetFromDragPreview","offsetWidth","sourceWidth","offsetHeight","sourceHeight","anchorX","anchorY","dragPreviewWidth","dragPreviewHeight","devicePixelRatio","getDragPreviewSize","offsetX","offsetY","isManualOffsetY","calculateYOffset","OptionsReader","globalContext","rootElement","optionsArgs","ownerDocument","_defineProperty","obj","writable","_objectSpread","target","arguments","source","ownKeys","getOwnPropertySymbols","concat","sym","getOwnPropertyDescriptor","HTML5BackendImpl","profile","ref1","sourcePreviewNodes","size","sourcePreviewNodeOptions","sourceNodeOptions","sourceNodes","dragStartSourceIds","dropTargetIds","dragEnterTargetIds","dragOverTargetIds","setup","__isReactDndBackendSetUp","addEventListeners","teardown","removeEventListeners","clearCurrentDragSourceNode","asyncEndDragFrameId","cancelAnimationFrame","connectDragPreview","sourceId","delete","connectDragSource","handleDragStart","handleSelectStart","setAttribute","addEventListener","removeEventListener","connectDropTarget","targetId","handleDragEnter","handleDragOver","handleDrop","handleTopDragStart","handleTopDragStartCapture","handleTopDragEndCapture","handleTopDragEnter","handleTopDragEnterCapture","handleTopDragLeaveCapture","handleTopDragOver","handleTopDragOverCapture","handleTopDrop","handleTopDropCapture","getCurrentSourceNodeOptions","dropEffect","altKeyPressed","getCurrentDropEffect","isDraggingNativeItem","getCurrentSourcePreviewNodeOptions","captureDraggingState","itemType","getItemType","beginDragNativeItem","currentNativeSource","createNativeDragSource","currentNativeHandle","registry","addSource","actions","setCurrentDragSourceNode","currentDragSourceNode","mouseMoveTimeoutTimer","setTimeout","endDragIfSourceWasRemovedFromDOM","clearTimeout","defaultPrevented","unshift","_e","manager","Map","lastClientOffset","hoverRafId","getSourceClientOffset","endDragNativeItem","removeSource","body","cancelHover","scheduleHover","requestAnimationFrame","hover","publishSource","nativeType","setDragImage","dragPreviewOffset","setData","err","publishDragSource","hasAttribute","preventDefault","enterLeaveCounter","altKey","canDropOnTarget","drop","dragDrop","tagName","isContentEditable","getActions","getMonitor","getRegistry","HTML5Backend","context","DndContext","dragDropManager","formatProdErrorMessage","code","$$observable","observable","randomString","random","toString","substring","join","ActionTypes","INIT","REPLACE","PROBE_UNKNOWN_ACTION","isPlainObject","proto","getPrototypeOf","createStore","preloadedState","enhancer","_ref2","currentReducer","currentState","currentListeners","nextListeners","isDispatching","ensureCanMutateNextListeners","listener","isSubscribed","splice","listeners","replaceReducer","nextReducer","_ref","outerSubscribe","observer","observeState","next","isObject","INIT_COORDS","BEGIN_DRAG","PUBLISH_DRAG_SOURCE","HOVER","DROP","END_DRAG","setClientOffset","sourceClientOffset","ResetCoordinatesAction","createBeginDrag","sourceIds","getSource","verifyInvariants","canDragSource","getDraggableSource","verifyGetSourceClientOffsetIsFunction","verifyItemIsObject","pinSource","getSourceType","isSourcePublic","createDrop","didDrop","targetIds","getTargetIds","reverse","getDroppableTargets","dropResult","getTarget","verifyDropResultType","getDropResult","determineDropResult","createEndDrag","verifyIsDragging","unpinSource","matchesType","targetType","draggedItemType","createHover","targetIdsArg","verifyTargetIdsIsArray","getTargetType","removeNonMatchingTargetIds","lastIndexOf","checkInvariants","hoverAllTargets","createPublishDragSource","DragDropManagerImpl","receiveBackend","backend","getBackend","store","createDragDropActions","boundActions","actionCreator","apply","isSetUp","handleRefCountChange","shouldSetUp","refCount","subtract","NONE","ALL","__IS_NONE__","__IS_ALL__","DragDropMonitorImpl","subscribeToStateChange","handlerIds","prevStateId","stateId","currentStateId","canSkipListener","dirtyIds","areDirty","dirtyHandlerIds","subscribeToOffsetChange","previousState","dragOffset","nextState","canDrop","isDraggingSource","isOverTarget","shallow","dragOperation","getItem","getInitialClientOffset","initialClientOffset","getInitialSourceClientOffset","initialSourceClientOffset","getClientOffset","getDifferenceFromInitialOffset","scope","global","self","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","makeRequestCallFromTimer","callback","timeoutHandle","handleTimer","intervalHandle","setInterval","clearInterval","makeRequestCall","toggle","createTextNode","observe","characterData","RawTask","task","onError","release","asapQueue","enqueueTask","queue","q","requestFlush","flushing","pendingErrors","capacity","flush","currentIndex","scan","newLength","registerPendingError","requestErrorThrow","shift","taskFactory","tasks","freeTasks","t1","pop","ADD_SOURCE","ADD_TARGET","REMOVE_SOURCE","REMOVE_TARGET","validateType","allowArray","HandlerRole","nextUniqueId","getNextHandlerId","SOURCE","TARGET","parseRoleFromHandlerId","handlerId","mapContainsValue","searchValue","isDone","done","HandlerRegistryImpl","validateSourceContract","addHandler","addTarget","validateTargetContract","containsHandler","handler","dragSources","dropTargets","includePinned","isSourceId","pinnedSourceId","pinnedSource","isTargetId","removeTarget","strictEquality","_state","prevTargetIds","count","xor","isEqual","areArraysEqual","prevInnermostTargetId","innermostTargetId","offsetA","offsetB","path","c","createDragDropManager","backendFactory","backendOptions","debugMode","reduxDevTools","__REDUX_DEVTOOLS_EXTENSION__","instanceId","makeStoreInstance","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","INSTANCE_SYM","for","DndProvider","memo","_param","isGlobalInstance","getGlobalContext","ctx","createSingletonDndContext","getDndContextValue","Provider","REACT_ELEMENT_TYPE","_createRawReactElement","defaultProps","childrenLength","childArray","propName","$$typeof","_owner","NetworkErrorBoundary","getDerivedStateFromError","isNetworkError","render","fallbackComponent","_error$response","statusText","requestIdleCallback","cb","createReceiveError","ResetError","_Loading","LegacyReact","version","startsWith","SSR","BackupBoundary","Suspense","fallback","Loading","CacheStore","managers","masterReducer","optimisticState","_managers$i$init","_managers$i","init","cleanup","CacheProvider","controllerRef","memodManagers","getMiddleware","applyManager","fetched","resolvers","rejectors","handleFetch","then","_getState$meta$action","handleReceive","clearAll","skipLogging","cleanupDate","getLastReset","clear","valueOf","deferedFetch","resolvePromise","catch","_action$meta$options$","_action$meta$options","_action$meta$options$2","_action$meta$options2","promiseHandler","timeout","actionTypes","BrowserConnectionListener","isOnline","onLine","addOnlineListener","removeOnlineListener","addOfflineListener","removeOfflineListener","AlwaysOnlineConnectionListener","DefaultConnectionListener","Subscription","subscriptions","handleSubscribe","handleUnsubscribe","frequency","pollFrequency","remove","connectionListener","frequencyHistogram","offlineListener","onlineListener","startId","run","lastFetchTime","intervalId","lastIntervalId","_this$getState$meta$t","_this$getState$meta$t2"],"sourceRoot":""}