todoApp/node_modules/.vite/deps/ra-core.js.map

8 lines
2.4 MiB

{
"version": 3,
"sources": ["../../cookie/src/index.ts", "../../set-cookie-parser/lib/set-cookie.js", "../../lodash/_baseAssignValue.js", "../../lodash/_assignValue.js", "../../lodash/_baseSet.js", "../../lodash/set.js", "../../lodash/unset.js", "../../lodash/_stackClear.js", "../../lodash/_stackDelete.js", "../../lodash/_stackGet.js", "../../lodash/_stackHas.js", "../../lodash/_stackSet.js", "../../lodash/_Stack.js", "../../lodash/_setCacheAdd.js", "../../lodash/_setCacheHas.js", "../../lodash/_SetCache.js", "../../lodash/_arraySome.js", "../../lodash/_cacheHas.js", "../../lodash/_equalArrays.js", "../../lodash/_Uint8Array.js", "../../lodash/_mapToArray.js", "../../lodash/_setToArray.js", "../../lodash/_equalByTag.js", "../../lodash/_baseGetAllKeys.js", "../../lodash/_arrayFilter.js", "../../lodash/stubArray.js", "../../lodash/_getSymbols.js", "../../lodash/_baseTimes.js", "../../lodash/stubFalse.js", "../../lodash/isBuffer.js", "../../lodash/isLength.js", "../../lodash/_baseIsTypedArray.js", "../../lodash/_baseUnary.js", "../../lodash/_nodeUtil.js", "../../lodash/isTypedArray.js", "../../lodash/_arrayLikeKeys.js", "../../lodash/_isPrototype.js", "../../lodash/_overArg.js", "../../lodash/_nativeKeys.js", "../../lodash/_baseKeys.js", "../../lodash/isArrayLike.js", "../../lodash/keys.js", "../../lodash/_getAllKeys.js", "../../lodash/_equalObjects.js", "../../lodash/_DataView.js", "../../lodash/_Promise.js", "../../lodash/_Set.js", "../../lodash/_WeakMap.js", "../../lodash/_getTag.js", "../../lodash/_baseIsEqualDeep.js", "../../lodash/_baseIsEqual.js", "../../lodash/isEqual.js", "../../lodash/_assignMergeValue.js", "../../lodash/_createBaseFor.js", "../../lodash/_baseFor.js", "../../lodash/_cloneBuffer.js", "../../lodash/_cloneArrayBuffer.js", "../../lodash/_cloneTypedArray.js", "../../lodash/_copyArray.js", "../../lodash/_baseCreate.js", "../../lodash/_getPrototype.js", "../../lodash/_initCloneObject.js", "../../lodash/isArrayLikeObject.js", "../../lodash/isPlainObject.js", "../../lodash/_safeGet.js", "../../lodash/_copyObject.js", "../../lodash/_nativeKeysIn.js", "../../lodash/_baseKeysIn.js", "../../lodash/keysIn.js", "../../lodash/toPlainObject.js", "../../lodash/_baseMergeDeep.js", "../../lodash/_baseMerge.js", "../../lodash/_baseRest.js", "../../lodash/_isIterateeCall.js", "../../lodash/_createAssigner.js", "../../lodash/merge.js", "../../lodash/_arrayEach.js", "../../lodash/_baseAssign.js", "../../lodash/_baseAssignIn.js", "../../lodash/_copySymbols.js", "../../lodash/_getSymbolsIn.js", "../../lodash/_copySymbolsIn.js", "../../lodash/_getAllKeysIn.js", "../../lodash/_initCloneArray.js", "../../lodash/_cloneDataView.js", "../../lodash/_cloneRegExp.js", "../../lodash/_cloneSymbol.js", "../../lodash/_initCloneByTag.js", "../../lodash/_baseIsMap.js", "../../lodash/isMap.js", "../../lodash/_baseIsSet.js", "../../lodash/isSet.js", "../../lodash/_baseClone.js", "../../lodash/cloneDeep.js", "../../lodash/now.js", "../../lodash/_trimmedEndIndex.js", "../../lodash/_baseTrim.js", "../../lodash/toNumber.js", "../../lodash/debounce.js", "../../strict-uri-encode/index.js", "../../decode-uri-component/index.js", "../../split-on-first/index.js", "../../filter-obj/index.js", "../../query-string/index.js", "../../eventemitter3/index.js", "../../lodash/_baseFindIndex.js", "../../lodash/_baseIsNaN.js", "../../lodash/_strictIndexOf.js", "../../lodash/_baseIndexOf.js", "../../lodash/_arrayIncludes.js", "../../lodash/_arrayIncludesWith.js", "../../lodash/noop.js", "../../lodash/_createSet.js", "../../lodash/_baseUniq.js", "../../lodash/union.js", "../../lodash/_basePickBy.js", "../../lodash/_baseHasIn.js", "../../lodash/_hasPath.js", "../../lodash/hasIn.js", "../../lodash/_basePick.js", "../../lodash/pick.js", "../../jsonexport/dist/core/eol.js", "../../jsonexport/dist/core/helper.js", "../../jsonexport/dist/core/join-rows.js", "../../jsonexport/dist/parser/handler.js", "../../jsonexport/dist/core/escape-delimiters.js", "../../jsonexport/dist/parser/csv.js", "../../jsonexport/dist/core/stream.js", "../../jsonexport/dist/index.js", "../../lodash/defaults.js", "../../ra-core/node_modules/react-is/cjs/react-is.development.js", "../../ra-core/node_modules/react-is/index.js", "../../inflection/lib/inflection.js", "../../ra-core/src/auth/useAuthProvider.ts", "../../ra-core/src/auth/AuthContext.tsx", "../../ra-core/src/auth/useAuthState.ts", "../../@tanstack/query-core/src/subscribable.ts", "../../@tanstack/query-core/src/utils.ts", "../../@tanstack/query-core/src/focusManager.ts", "../../@tanstack/query-core/src/onlineManager.ts", "../../@tanstack/query-core/src/thenable.ts", "../../@tanstack/query-core/src/retryer.ts", "../../@tanstack/query-core/src/notifyManager.ts", "../../@tanstack/query-core/src/removable.ts", "../../@tanstack/query-core/src/query.ts", "../../@tanstack/query-core/src/queryCache.ts", "../../@tanstack/query-core/src/mutation.ts", "../../@tanstack/query-core/src/mutationCache.ts", "../../@tanstack/query-core/src/infiniteQueryBehavior.ts", "../../@tanstack/query-core/src/queryClient.ts", "../../@tanstack/query-core/src/queryObserver.ts", "../../@tanstack/query-core/src/infiniteQueryObserver.ts", "../../@tanstack/query-core/src/mutationObserver.ts", "../../@tanstack/query-core/src/types.ts", "../../@tanstack/react-query/src/useQueries.ts", "../../@tanstack/react-query/src/QueryClientProvider.tsx", "../../@tanstack/react-query/src/isRestoring.ts", "../../@tanstack/react-query/src/QueryErrorResetBoundary.tsx", "../../@tanstack/react-query/src/errorBoundaryUtils.ts", "../../@tanstack/react-query/src/utils.ts", "../../@tanstack/react-query/src/suspense.ts", "../../@tanstack/react-query/src/useBaseQuery.ts", "../../@tanstack/react-query/src/useQuery.ts", "../../@tanstack/react-query/src/HydrationBoundary.tsx", "../../@tanstack/react-query/src/useIsFetching.ts", "../../@tanstack/react-query/src/useMutationState.ts", "../../@tanstack/react-query/src/useMutation.ts", "../../@tanstack/react-query/src/useInfiniteQuery.ts", "../../ra-core/src/auth/useLogout.ts", "../../react-router/dist/development/chunk-GNGMS2XR.mjs", "../../turbo-stream/dist/turbo-stream.mjs", "../../react-router/dist/development/dom-export.mjs", "../../ra-core/src/store/localStorageStore.ts", "../../ra-core/src/store/memoryStore.tsx", "../../ra-core/src/store/StoreContext.tsx", "../../ra-core/src/store/StoreContextProvider.tsx", "../../ra-core/src/store/StoreSetter.tsx", "../../ra-core/src/store/useStoreContext.ts", "../../ra-core/src/store/useStore.ts", "../../ra-core/src/util/escapePath.ts", "../../ra-core/src/util/FieldTitle.tsx", "../../ra-core/src/i18n/substituteTokens.ts", "../../ra-core/src/i18n/TestTranslationProvider.tsx", "../../ra-core/src/i18n/I18nContextProvider.tsx", "../../ra-core/src/i18n/I18nContext.ts", "../../ra-core/src/notification/AddNotificationContext.tsx", "../../ra-core/src/notification/NotificationContext.ts", "../../ra-core/src/notification/NotificationContextProvider.tsx", "../../ra-core/src/notification/useAddNotificationContext.tsx", "../../ra-core/src/notification/useNotificationContext.ts", "../../ra-core/src/notification/useNotify.ts", "../../ra-core/src/i18n/TranslatableContext.ts", "../../ra-core/src/i18n/TranslatableContextProvider.tsx", "../../ra-core/src/i18n/TranslationUtils.ts", "../../ra-core/src/i18n/useLocaleState.tsx", "../../ra-core/src/i18n/useI18nProvider.ts", "../../ra-core/src/i18n/useLocale.tsx", "../../ra-core/src/i18n/useLocales.ts", "../../ra-core/src/i18n/useSetLocale.tsx", "../../ra-core/src/i18n/useTranslatable.ts", "../../ra-core/src/i18n/useTranslatableContext.ts", "../../ra-core/src/i18n/useTranslate.ts", "../../ra-core/src/i18n/useTranslateLabel.ts", "../../ra-core/src/core/CoreAdmin.tsx", "../../ra-core/src/core/CoreAdminContext.tsx", "../../ra-core/src/routing/AdminRouter.tsx", "../../ra-core/src/routing/BasenameContextProvider.tsx", "../../ra-core/src/routing/BasenameContext.ts", "../../ra-core/src/routing/useRestoreScrollPosition.ts", "../../ra-core/src/routing/RestoreScrollPosition.tsx", "../../ra-core/src/routing/useBasename.ts", "../../ra-core/src/routing/useCreatePath.ts", "../../ra-core/src/routing/useGetPathForRecord.ts", "../../ra-core/src/core/useResourceContext.ts", "../../ra-core/src/core/ResourceContext.ts", "../../ra-core/src/controller/record/useRecordContext.ts", "../../ra-core/src/controller/record/RecordContext.tsx", "../../ra-core/src/routing/useGetPathForRecordCallback.ts", "../../ra-core/src/core/useResourceDefinitionContext.ts", "../../ra-core/src/core/ResourceDefinitionContext.tsx", "../../ra-core/src/core/useResourceDefinitions.ts", "../../ra-core/src/auth/useCanAccessCallback.ts", "../../ra-core/src/routing/useRedirect.ts", "../../ra-core/src/routing/useResetErrorBoundaryOnLocationChange.ts", "../../ra-core/src/routing/useScrollToTop.tsx", "../../ra-core/src/routing/TestMemoryRouter.tsx", "../../ra-core/src/routing/useSplatPathBase.ts", "../../ra-core/src/dataProvider/dataFetchActions.ts", "../../ra-core/src/dataProvider/defaultDataProvider.ts", "../../ra-core/src/dataProvider/convertLegacyDataProvider.ts", "../../ra-core/src/dataProvider/DataProviderContext.ts", "../../ra-core/src/dataProvider/HttpError.ts", "../../ra-core/src/dataProvider/fetch.ts", "../../eventemitter3/index.mjs", "../../ra-core/src/dataProvider/undoableEventEmitter.ts", "../../ra-core/src/dataProvider/combineDataProviders.ts", "../../ra-core/src/dataProvider/testDataProvider.ts", "../../ra-core/src/dataProvider/withLifecycleCallbacks.ts", "../../ra-core/src/dataProvider/useDataProvider.ts", "../../ra-core/src/dataProvider/validateResponseFormat.ts", "../../ra-core/src/auth/useLogoutIfAccessDenied.ts", "../../ra-core/src/dataProvider/populateQueryCache.ts", "../../ra-core/src/dataProvider/useIsDataLoaded.ts", "../../ra-core/src/dataProvider/useLoading.ts", "../../ra-core/src/dataProvider/useRefresh.ts", "../../ra-core/src/dataProvider/useGetOne.ts", "../../ra-core/src/dataProvider/useGetList.ts", "../../ra-core/src/dataProvider/useGetMany.ts", "../../ra-core/src/dataProvider/useGetManyAggregate.ts", "../../ra-core/src/dataProvider/useGetManyReference.ts", "../../ra-core/src/controller/useFilterState.ts", "../../ra-core/src/controller/useSortState.ts", "../../ra-core/src/controller/list/queryReducer.ts", "../../ra-core/src/util/shallowEqual.ts", "../../ra-core/src/util/removeEmpty.ts", "../../ra-core/src/util/removeKey.ts", "../../ra-core/src/controller/usePaginationState.ts", "../../ra-core/src/controller/checkMinimumRequiredProps.tsx", "../../ra-core/src/controller/button/useDeleteWithUndoController.tsx", "../../ra-core/src/controller/button/useDeleteWithConfirmController.tsx", "../../ra-core/src/controller/create/CreateBase.tsx", "../../ra-core/src/controller/create/useCreateController.ts", "../../ra-core/src/controller/saveContext/SaveContext.ts", "../../ra-core/src/controller/saveContext/SaveContextProvider.tsx", "../../ra-core/src/controller/saveContext/usePickSaveContext.ts", "../../ra-core/src/controller/saveContext/useSaveContext.ts", "../../ra-core/src/controller/saveContext/useMutationMiddlewares.ts", "../../ra-core/src/controller/saveContext/useRegisterMutationMiddleware.ts", "../../ra-core/src/controller/create/CreateContextProvider.tsx", "../../ra-core/src/controller/create/CreateContext.tsx", "../../ra-core/src/controller/create/CreateController.tsx", "../../ra-core/src/controller/create/useCreateContext.tsx", "../../ra-core/src/controller/edit/EditBase.tsx", "../../ra-core/src/controller/edit/useEditController.ts", "../../ra-core/src/controller/edit/EditContextProvider.tsx", "../../ra-core/src/controller/record/WithRecord.tsx", "../../ra-core/src/controller/record/OptionalRecordContextProvider.tsx", "../../ra-core/src/controller/record/RecordRepresentation.tsx", "../../ra-core/src/controller/edit/EditContext.tsx", "../../ra-core/src/controller/edit/EditController.tsx", "../../ra-core/src/controller/edit/useEditContext.tsx", "../../ra-core/src/controller/field/ReferenceFieldBase.tsx", "../../ra-core/src/controller/field/ReferenceFieldContext.tsx", "../../ra-core/src/controller/field/useReferenceFieldController.ts", "../../ra-core/src/controller/useReference.ts", "../../ra-core/src/controller/field/useReferenceArrayFieldController.ts", "../../ra-core/src/controller/list/InfiniteListBase.tsx", "../../ra-core/src/controller/list/useInfiniteListController.ts", "../../ra-core/src/export/defaultExporter.ts", "../../ra-core/src/export/downloadCSV.ts", "../../ra-core/src/export/ExporterContext.ts", "../../ra-core/src/export/getRelatedIds.ts", "../../ra-core/src/export/fetchRelatedRecords.ts", "../../ra-core/src/controller/list/useRecordSelection.ts", "../../ra-core/src/controller/list/useListParams.ts", "../../ra-core/src/util/hooks.ts", "../../ra-core/src/controller/list/useSelectAll.tsx", "../../ra-core/src/controller/list/ListContextProvider.tsx", "../../ra-core/src/controller/list/ListContext.tsx", "../../ra-core/src/controller/list/ListFilterContext.tsx", "../../ra-core/src/controller/list/ListSortContext.tsx", "../../ra-core/src/controller/list/ListPaginationContext.tsx", "../../ra-core/src/controller/list/InfinitePaginationContext.ts", "../../ra-core/src/controller/list/ListBase.tsx", "../../ra-core/src/controller/list/useListController.ts", "../../ra-core/src/controller/list/ListController.tsx", "../../ra-core/src/controller/list/useExpanded.tsx", "../../ra-core/src/controller/list/useInfinitePaginationContext.ts", "../../ra-core/src/controller/list/useList.ts", "../../ra-core/src/controller/list/useListContext.ts", "../../ra-core/src/controller/list/useListContextWithProps.ts", "../../ra-core/src/controller/list/useListFilterContext.ts", "../../ra-core/src/controller/list/useListPaginationContext.ts", "../../ra-core/src/controller/list/useListSortContext.ts", "../../ra-core/src/controller/list/useUnselect.ts", "../../ra-core/src/controller/list/useUnselectAll.ts", "../../ra-core/src/controller/list/WithListContext.tsx", "../../ra-core/src/controller/field/useReferenceManyFieldController.ts", "../../ra-core/src/controller/field/useReferenceOneFieldController.tsx", "../../ra-core/src/controller/input/referenceDataStatus.ts", "../../ra-core/src/controller/input/useReferenceArrayInputController.ts", "../../react-hook-form/src/utils/isCheckBoxInput.ts", "../../react-hook-form/src/utils/isDateObject.ts", "../../react-hook-form/src/utils/isNullOrUndefined.ts", "../../react-hook-form/src/utils/isObject.ts", "../../react-hook-form/src/logic/getEventValue.ts", "../../react-hook-form/src/logic/getNodeParentName.ts", "../../react-hook-form/src/logic/isNameInFieldArray.ts", "../../react-hook-form/src/utils/isPlainObject.ts", "../../react-hook-form/src/utils/isWeb.ts", "../../react-hook-form/src/utils/cloneObject.ts", "../../react-hook-form/src/utils/compact.ts", "../../react-hook-form/src/utils/isUndefined.ts", "../../react-hook-form/src/utils/get.ts", "../../react-hook-form/src/utils/isBoolean.ts", "../../react-hook-form/src/utils/isKey.ts", "../../react-hook-form/src/utils/stringToPath.ts", "../../react-hook-form/src/utils/set.ts", "../../react-hook-form/src/constants.ts", "../../react-hook-form/src/useFormContext.tsx", "../../react-hook-form/src/logic/getProxyFormState.ts", "../../react-hook-form/src/utils/isEmptyObject.ts", "../../react-hook-form/src/logic/shouldRenderFormState.ts", "../../react-hook-form/src/utils/convertToArrayPayload.ts", "../../react-hook-form/src/logic/shouldSubscribeByName.ts", "../../react-hook-form/src/useSubscribe.ts", "../../react-hook-form/src/useFormState.ts", "../../react-hook-form/src/utils/isString.ts", "../../react-hook-form/src/logic/generateWatchOutput.ts", "../../react-hook-form/src/useWatch.ts", "../../react-hook-form/src/useController.ts", "../../react-hook-form/src/controller.tsx", "../../react-hook-form/src/utils/flatten.ts", "../../react-hook-form/src/form.tsx", "../../react-hook-form/src/logic/appendErrors.ts", "../../react-hook-form/src/logic/generateId.ts", "../../react-hook-form/src/logic/getFocusFieldName.ts", "../../react-hook-form/src/logic/getValidationModes.ts", "../../react-hook-form/src/logic/isWatched.ts", "../../react-hook-form/src/logic/iterateFieldsByAction.ts", "../../react-hook-form/src/logic/updateFieldArrayRootError.ts", "../../react-hook-form/src/utils/isFileInput.ts", "../../react-hook-form/src/utils/isFunction.ts", "../../react-hook-form/src/utils/isHTMLElement.ts", "../../react-hook-form/src/utils/isMessage.ts", "../../react-hook-form/src/utils/isRadioInput.ts", "../../react-hook-form/src/utils/isRegex.ts", "../../react-hook-form/src/logic/getCheckboxValue.ts", "../../react-hook-form/src/logic/getRadioValue.ts", "../../react-hook-form/src/logic/getValidateError.ts", "../../react-hook-form/src/logic/getValueAndMessage.ts", "../../react-hook-form/src/logic/validateField.ts", "../../react-hook-form/src/utils/append.ts", "../../react-hook-form/src/utils/fillEmptyArray.ts", "../../react-hook-form/src/utils/insert.ts", "../../react-hook-form/src/utils/move.ts", "../../react-hook-form/src/utils/prepend.ts", "../../react-hook-form/src/utils/remove.ts", "../../react-hook-form/src/utils/swap.ts", "../../react-hook-form/src/utils/unset.ts", "../../react-hook-form/src/utils/update.ts", "../../react-hook-form/src/useFieldArray.ts", "../../react-hook-form/src/utils/createSubject.ts", "../../react-hook-form/src/utils/isPrimitive.ts", "../../react-hook-form/src/utils/deepEqual.ts", "../../react-hook-form/src/utils/isMultipleSelect.ts", "../../react-hook-form/src/utils/isRadioOrCheckbox.ts", "../../react-hook-form/src/utils/live.ts", "../../react-hook-form/src/utils/objectHasFunction.ts", "../../react-hook-form/src/logic/getDirtyFields.ts", "../../react-hook-form/src/logic/getFieldValueAs.ts", "../../react-hook-form/src/logic/getFieldValue.ts", "../../react-hook-form/src/logic/getResolverOptions.ts", "../../react-hook-form/src/logic/getRuleValue.ts", "../../react-hook-form/src/logic/hasPromiseValidation.ts", "../../react-hook-form/src/logic/hasValidation.ts", "../../react-hook-form/src/logic/schemaErrorLookup.ts", "../../react-hook-form/src/logic/skipValidation.ts", "../../react-hook-form/src/logic/unsetEmptyArray.ts", "../../react-hook-form/src/logic/createFormControl.ts", "../../react-hook-form/src/useForm.ts", "../../ra-core/src/controller/input/useReferenceParams.ts", "../../ra-core/src/controller/input/useReferenceInputController.ts", "../../ra-core/src/controller/input/ReferenceInputBase.tsx", "../../ra-core/src/form/choices/ChoicesContext.ts", "../../ra-core/src/form/choices/ChoicesContextProvider.tsx", "../../ra-core/src/form/choices/useChoicesContext.ts", "../../ra-core/src/form/choices/useChoices.tsx", "../../ra-core/src/form/Form.tsx", "../../ra-core/src/form/groups/FormGroupsProvider.tsx", "../../ra-core/src/form/groups/FormGroupsContext.tsx", "../../ra-core/src/form/useWarnWhenUnsavedChanges.tsx", "../../ra-core/src/form/WarnWhenUnsavedChanges.ts", "../../ra-core/src/form/useAugmentedForm.ts", "../../ra-core/src/form/getFormInitialValues.ts", "../../ra-core/src/form/validation/getSimpleValidationResolver.ts", "../../ra-core/src/form/validation/setSubmissionErrors.ts", "../../ra-core/src/form/validation/useNotifyIsFormInvalid.ts", "../../ra-core/src/form/sanitizeEmptyValues.ts", "../../ra-core/src/form/useRecordFromLocation.ts", "../../ra-core/src/form/FormDataConsumer.tsx", "../../ra-core/src/form/useFormValues.ts", "../../ra-core/src/form/groups/FormGroupContext.ts", "../../ra-core/src/form/groups/FormGroupContextProvider.tsx", "../../ra-core/src/form/groups/useFormGroups.ts", "../../ra-core/src/form/groups/useFormGroup.ts", "../../ra-core/src/form/groups/useFormGroupContext.ts", "../../ra-core/src/form/useApplyInputDefaultValues.ts", "../../ra-core/src/form/useInput.ts", "../../ra-core/src/form/validation/useGetValidationErrorMessage.ts", "../../ra-core/src/form/validation/useUnique.ts", "../../ra-core/src/form/validation/validate.ts", "../../ra-core/src/form/validation/ValidationError.tsx", "../../ra-core/src/form/useSuggestions.ts", "../../ra-core/src/form/FilterLiveForm.tsx", "../../ra-core/src/controller/show/ShowBase.tsx", "../../ra-core/src/controller/show/useShowController.ts", "../../ra-core/src/controller/show/ShowContextProvider.tsx", "../../ra-core/src/controller/show/ShowContext.tsx", "../../ra-core/src/controller/show/ShowController.tsx", "../../ra-core/src/controller/show/useShowContext.tsx", "../../ra-core/src/controller/usePrevNextController.ts", "../../ra-core/src/dataProvider/useGetRecordId.ts", "../../ra-core/src/dataProvider/useCreate.ts", "../../ra-core/src/dataProvider/useUpdate.ts", "../../ra-core/src/dataProvider/undo/useAddUndoableMutation.tsx", "../../ra-core/src/dataProvider/undo/AddUndoableMutationContext.tsx", "../../ra-core/src/dataProvider/useUpdateMany.ts", "../../ra-core/src/dataProvider/useDelete.ts", "../../ra-core/src/dataProvider/useDeleteMany.ts", "../../ra-core/src/dataProvider/useInfiniteGetList.ts", "../../ra-core/src/dataProvider/undo/TakeUndoableMutationContext.tsx", "../../ra-core/src/dataProvider/undo/UndoableMutationsContextProvider.tsx", "../../ra-core/src/dataProvider/undo/useTakeUndoableMutation.tsx", "../../ra-core/src/preferences/PreferencesEditorContextProvider.tsx", "../../ra-core/src/preferences/PreferencesEditorContext.tsx", "../../ra-core/src/core/CoreAdminUI.tsx", "../../react-error-boundary/dist/react-error-boundary.development.esm.js", "../../ra-core/src/core/CoreAdminRoutes.tsx", "../../ra-core/src/core/useConfigureAdminRouterFromChildren.tsx", "../../ra-core/src/auth/usePermissions.ts", "../../ra-core/src/core/HasDashboardContext.ts", "../../ra-core/src/core/NavigateToFirstResource.tsx", "../../ra-core/src/auth/useCanAccessResources.ts", "../../ra-core/src/core/useFirstResourceWithListAccess.tsx", "../../ra-core/src/core/DefaultTitleContext.ts", "../../ra-core/src/core/CustomRoutes.tsx", "../../ra-core/src/core/OptionalResourceContextProvider.tsx", "../../ra-core/src/core/ResourceContextProvider.tsx", "../../ra-core/src/core/Resource.tsx", "../../ra-core/src/core/SourceContext.tsx", "../../ra-core/src/core/useGetResourceLabel.ts", "../../ra-core/src/core/useGetRecordRepresentation.ts", "../../ra-core/src/core/useResourceDefinition.ts", "../../ra-core/src/core/useWrappedSource.ts", "../../ra-core/src/i18n/index.ts", "../../ra-core/src/util/Ready.tsx", "../../ra-core/src/util/warning.ts", "../../ra-core/src/util/useWhyDidYouUpdate.ts", "../../ra-core/src/util/getMutationMode.ts", "../../ra-core/src/util/getFieldLabelTranslationArgs.ts", "../../ra-core/src/util/mergeRefs.ts", "../../ra-core/src/util/useEvent.ts", "../../ra-core/src/util/useDebouncedEvent.ts", "../../ra-core/src/util/useFieldValue.ts", "../../ra-core/src/util/asyncDebounce.ts", "../../ra-core/src/util/useCheckForApplicationUpdate.ts", "../../ra-core/src/store/useRemoveFromStore.ts", "../../ra-core/src/store/useRemoveItemsFromStore.ts", "../../ra-core/src/store/useResetStore.ts", "../../ra-core/src/auth/WithPermissions.tsx", "../../ra-core/src/auth/useAuthenticated.ts", "../../ra-core/src/auth/useLogin.ts", "../../ra-core/src/auth/useGetPermissions.ts", "../../ra-core/src/auth/types.ts", "../../ra-core/src/auth/convertLegacyAuthProvider.ts", "../../ra-core/src/auth/Authenticated.tsx", "../../ra-core/src/auth/CanAccess.tsx", "../../ra-core/src/auth/useCanAccess.ts", "../../ra-core/src/auth/LogoutOnMount.ts", "../../ra-core/src/auth/useCheckAuth.ts", "../../ra-core/src/auth/useGetIdentity.ts", "../../ra-core/src/auth/useHandleAuthCallback.ts", "../../ra-core/src/auth/useIsAuthPending.ts", "../../ra-core/src/auth/useRequireAccess.tsx", "../../ra-core/src/auth/addRefreshAuthToAuthProvider.ts", "../../ra-core/src/auth/addRefreshAuthToDataProvider.ts", "../../ra-core/src/preferences/PreferenceKeyContext.tsx", "../../ra-core/src/preferences/usePreference.ts", "../../ra-core/src/preferences/usePreferencesEditor.ts", "../../ra-core/src/preferences/usePreferenceInput.ts", "../../ra-core/src/preferences/useSetInspectorTitle.ts", "../../ra-core/src/inference/inferElementFromValues.tsx", "../../ra-core/src/inference/getValuesFromRecords.ts", "../../ra-core/src/inference/InferredElement.ts", "../../date-fns/toDate.mjs", "../../date-fns/constructFrom.mjs", "../../date-fns/addDays.mjs", "../../date-fns/constants.mjs", "../../date-fns/_lib/defaultOptions.mjs", "../../date-fns/startOfWeek.mjs", "../../date-fns/startOfISOWeek.mjs", "../../date-fns/getISOWeekYear.mjs", "../../date-fns/_lib/getTimezoneOffsetInMilliseconds.mjs", "../../date-fns/startOfISOWeekYear.mjs", "../../date-fns/isDate.mjs", "../../date-fns/isValid.mjs", "../../date-fns/locale/en-US/_lib/formatDistance.mjs", "../../date-fns/locale/_lib/buildFormatLongFn.mjs", "../../date-fns/locale/en-US/_lib/formatLong.mjs", "../../date-fns/locale/en-US/_lib/formatRelative.mjs", "../../date-fns/locale/_lib/buildLocalizeFn.mjs", "../../date-fns/locale/en-US/_lib/localize.mjs", "../../date-fns/locale/_lib/buildMatchFn.mjs", "../../date-fns/locale/_lib/buildMatchPatternFn.mjs", "../../date-fns/locale/en-US/_lib/match.mjs", "../../date-fns/locale/en-US.mjs", "../../date-fns/getISOWeek.mjs", "../../date-fns/getWeekYear.mjs", "../../date-fns/startOfWeekYear.mjs", "../../date-fns/getWeek.mjs", "../../date-fns/_lib/format/longFormatters.mjs", "../../date-fns/_lib/protectedTokens.mjs", "../../date-fns/getDefaultOptions.mjs", "../../date-fns/getISODay.mjs", "../../date-fns/transpose.mjs", "../../date-fns/parse/_lib/Setter.mjs", "../../date-fns/parse/_lib/Parser.mjs", "../../date-fns/parse/_lib/parsers/EraParser.mjs", "../../date-fns/parse/_lib/constants.mjs", "../../date-fns/parse/_lib/utils.mjs", "../../date-fns/parse/_lib/parsers/YearParser.mjs", "../../date-fns/parse/_lib/parsers/LocalWeekYearParser.mjs", "../../date-fns/parse/_lib/parsers/ISOWeekYearParser.mjs", "../../date-fns/parse/_lib/parsers/ExtendedYearParser.mjs", "../../date-fns/parse/_lib/parsers/QuarterParser.mjs", "../../date-fns/parse/_lib/parsers/StandAloneQuarterParser.mjs", "../../date-fns/parse/_lib/parsers/MonthParser.mjs", "../../date-fns/parse/_lib/parsers/StandAloneMonthParser.mjs", "../../date-fns/setWeek.mjs", "../../date-fns/parse/_lib/parsers/LocalWeekParser.mjs", "../../date-fns/setISOWeek.mjs", "../../date-fns/parse/_lib/parsers/ISOWeekParser.mjs", "../../date-fns/parse/_lib/parsers/DateParser.mjs", "../../date-fns/parse/_lib/parsers/DayOfYearParser.mjs", "../../date-fns/setDay.mjs", "../../date-fns/parse/_lib/parsers/DayParser.mjs", "../../date-fns/parse/_lib/parsers/LocalDayParser.mjs", "../../date-fns/parse/_lib/parsers/StandAloneLocalDayParser.mjs", "../../date-fns/setISODay.mjs", "../../date-fns/parse/_lib/parsers/ISODayParser.mjs", "../../date-fns/parse/_lib/parsers/AMPMParser.mjs", "../../date-fns/parse/_lib/parsers/AMPMMidnightParser.mjs", "../../date-fns/parse/_lib/parsers/DayPeriodParser.mjs", "../../date-fns/parse/_lib/parsers/Hour1to12Parser.mjs", "../../date-fns/parse/_lib/parsers/Hour0to23Parser.mjs", "../../date-fns/parse/_lib/parsers/Hour0To11Parser.mjs", "../../date-fns/parse/_lib/parsers/Hour1To24Parser.mjs", "../../date-fns/parse/_lib/parsers/MinuteParser.mjs", "../../date-fns/parse/_lib/parsers/SecondParser.mjs", "../../date-fns/parse/_lib/parsers/FractionOfSecondParser.mjs", "../../date-fns/parse/_lib/parsers/ISOTimezoneWithZParser.mjs", "../../date-fns/parse/_lib/parsers/ISOTimezoneParser.mjs", "../../date-fns/parse/_lib/parsers/TimestampSecondsParser.mjs", "../../date-fns/parse/_lib/parsers/TimestampMillisecondsParser.mjs", "../../date-fns/parse/_lib/parsers.mjs", "../../date-fns/parse.mjs", "../../date-fns/isMatch.mjs", "../../date-fns/parseISO.mjs", "../../ra-core/src/inference/assertions.ts", "../../ra-core/src/inference/getElementsFromRecords.ts", "../../ra-core/src/inference/inferTypeFromValues.ts", "../../ra-core/src/types.ts"],
"sourcesContent": ["/**\n * RegExp to match cookie-name in RFC 6265 sec 4.1.1\n * This refers out to the obsoleted definition of token in RFC 2616 sec 2.2\n * which has been replaced by the token definition in RFC 7230 appendix B.\n *\n * cookie-name = token\n * token = 1*tchar\n * tchar = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" /\n * \"*\" / \"+\" / \"-\" / \".\" / \"^\" / \"_\" /\n * \"`\" / \"|\" / \"~\" / DIGIT / ALPHA\n *\n * Note: Allowing more characters - https://github.com/jshttp/cookie/issues/191\n * Allow same range as cookie value, except `=`, which delimits end of name.\n */\nconst cookieNameRegExp = /^[\\u0021-\\u003A\\u003C\\u003E-\\u007E]+$/;\n\n/**\n * RegExp to match cookie-value in RFC 6265 sec 4.1.1\n *\n * cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )\n * cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E\n * ; US-ASCII characters excluding CTLs,\n * ; whitespace DQUOTE, comma, semicolon,\n * ; and backslash\n *\n * Allowing more characters: https://github.com/jshttp/cookie/issues/191\n * Comma, backslash, and DQUOTE are not part of the parsing algorithm.\n */\nconst cookieValueRegExp = /^[\\u0021-\\u003A\\u003C-\\u007E]*$/;\n\n/**\n * RegExp to match domain-value in RFC 6265 sec 4.1.1\n *\n * domain-value = <subdomain>\n * ; defined in [RFC1034], Section 3.5, as\n * ; enhanced by [RFC1123], Section 2.1\n * <subdomain> = <label> | <subdomain> \".\" <label>\n * <label> = <let-dig> [ [ <ldh-str> ] <let-dig> ]\n * Labels must be 63 characters or less.\n * 'let-dig' not 'letter' in the first char, per RFC1123\n * <ldh-str> = <let-dig-hyp> | <let-dig-hyp> <ldh-str>\n * <let-dig-hyp> = <let-dig> | \"-\"\n * <let-dig> = <letter> | <digit>\n * <letter> = any one of the 52 alphabetic characters A through Z in\n * upper case and a through z in lower case\n * <digit> = any one of the ten digits 0 through 9\n *\n * Keep support for leading dot: https://github.com/jshttp/cookie/issues/173\n *\n * > (Note that a leading %x2E (\".\"), if present, is ignored even though that\n * character is not permitted, but a trailing %x2E (\".\"), if present, will\n * cause the user agent to ignore the attribute.)\n */\nconst domainValueRegExp =\n /^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i;\n\n/**\n * RegExp to match path-value in RFC 6265 sec 4.1.1\n *\n * path-value = <any CHAR except CTLs or \";\">\n * CHAR = %x01-7F\n * ; defined in RFC 5234 appendix B.1\n */\nconst pathValueRegExp = /^[\\u0020-\\u003A\\u003D-\\u007E]*$/;\n\nconst __toString = Object.prototype.toString;\n\nconst NullObject = /* @__PURE__ */ (() => {\n const C = function () {};\n C.prototype = Object.create(null);\n return C;\n})() as unknown as { new (): any };\n\n/**\n * Parse options.\n */\nexport interface ParseOptions {\n /**\n * Specifies a function that will be used to decode a [cookie-value](https://datatracker.ietf.org/doc/html/rfc6265#section-4.1.1).\n * Since the value of a cookie has a limited character set (and must be a simple string), this function can be used to decode\n * a previously-encoded cookie value into a JavaScript string.\n *\n * The default function is the global `decodeURIComponent`, wrapped in a `try..catch`. If an error\n * is thrown it will return the cookie's original value. If you provide your own encode/decode\n * scheme you must ensure errors are appropriately handled.\n *\n * @default decode\n */\n decode?: (str: string) => string | undefined;\n}\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n */\nexport function parse(\n str: string,\n options?: ParseOptions,\n): Record<string, string | undefined> {\n const obj: Record<string, string | undefined> = new NullObject();\n const len = str.length;\n // RFC 6265 sec 4.1.1, RFC 2616 2.2 defines a cookie name consists of one char minimum, plus '='.\n if (len < 2) return obj;\n\n const dec = options?.decode || decode;\n let index = 0;\n\n do {\n const eqIdx = str.indexOf(\"=\", index);\n if (eqIdx === -1) break; // No more cookie pairs.\n\n const colonIdx = str.indexOf(\";\", index);\n const endIdx = colonIdx === -1 ? len : colonIdx;\n\n if (eqIdx > endIdx) {\n // backtrack on prior semicolon\n index = str.lastIndexOf(\";\", eqIdx - 1) + 1;\n continue;\n }\n\n const keyStartIdx = startIndex(str, index, eqIdx);\n const keyEndIdx = endIndex(str, eqIdx, keyStartIdx);\n const key = str.slice(keyStartIdx, keyEndIdx);\n\n // only assign once\n if (obj[key] === undefined) {\n let valStartIdx = startIndex(str, eqIdx + 1, endIdx);\n let valEndIdx = endIndex(str, endIdx, valStartIdx);\n\n const value = dec(str.slice(valStartIdx, valEndIdx));\n obj[key] = value;\n }\n\n index = endIdx + 1;\n } while (index < len);\n\n return obj;\n}\n\nfunction startIndex(str: string, index: number, max: number) {\n do {\n const code = str.charCodeAt(index);\n if (code !== 0x20 /* */ && code !== 0x09 /* \\t */) return index;\n } while (++index < max);\n return max;\n}\n\nfunction endIndex(str: string, index: number, min: number) {\n while (index > min) {\n const code = str.charCodeAt(--index);\n if (code !== 0x20 /* */ && code !== 0x09 /* \\t */) return index + 1;\n }\n return min;\n}\n\n/**\n * Serialize options.\n */\nexport interface SerializeOptions {\n /**\n * Specifies a function that will be used to encode a [cookie-value](https://datatracker.ietf.org/doc/html/rfc6265#section-4.1.1).\n * Since value of a cookie has a limited character set (and must be a simple string), this function can be used to encode\n * a value into a string suited for a cookie's value, and should mirror `decode` when parsing.\n *\n * @default encodeURIComponent\n */\n encode?: (str: string) => string;\n /**\n * Specifies the `number` (in seconds) to be the value for the [`Max-Age` `Set-Cookie` attribute](https://tools.ietf.org/html/rfc6265#section-5.2.2).\n *\n * The [cookie storage model specification](https://tools.ietf.org/html/rfc6265#section-5.3) states that if both `expires` and\n * `maxAge` are set, then `maxAge` takes precedence, but it is possible not all clients by obey this,\n * so if both are set, they should point to the same date and time.\n */\n maxAge?: number;\n /**\n * Specifies the `Date` object to be the value for the [`Expires` `Set-Cookie` attribute](https://tools.ietf.org/html/rfc6265#section-5.2.1).\n * When no expiration is set clients consider this a \"non-persistent cookie\" and delete it the current session is over.\n *\n * The [cookie storage model specification](https://tools.ietf.org/html/rfc6265#section-5.3) states that if both `expires` and\n * `maxAge` are set, then `maxAge` takes precedence, but it is possible not all clients by obey this,\n * so if both are set, they should point to the same date and time.\n */\n expires?: Date;\n /**\n * Specifies the value for the [`Domain` `Set-Cookie` attribute](https://tools.ietf.org/html/rfc6265#section-5.2.3).\n * When no domain is set clients consider the cookie to apply to the current domain only.\n */\n domain?: string;\n /**\n * Specifies the value for the [`Path` `Set-Cookie` attribute](https://tools.ietf.org/html/rfc6265#section-5.2.4).\n * When no path is set, the path is considered the [\"default path\"](https://tools.ietf.org/html/rfc6265#section-5.1.4).\n */\n path?: string;\n /**\n * Enables the [`HttpOnly` `Set-Cookie` attribute](https://tools.ietf.org/html/rfc6265#section-5.2.6).\n * When enabled, clients will not allow client-side JavaScript to see the cookie in `document.cookie`.\n */\n httpOnly?: boolean;\n /**\n * Enables the [`Secure` `Set-Cookie` attribute](https://tools.ietf.org/html/rfc6265#section-5.2.5).\n * When enabled, clients will only send the cookie back if the browser has a HTTPS connection.\n */\n secure?: boolean;\n /**\n * Enables the [`Partitioned` `Set-Cookie` attribute](https://tools.ietf.org/html/draft-cutler-httpbis-partitioned-cookies/).\n * When enabled, clients will only send the cookie back when the current domain _and_ top-level domain matches.\n *\n * This is an attribute that has not yet been fully standardized, and may change in the future.\n * This also means clients may ignore this attribute until they understand it. More information\n * about can be found in [the proposal](https://github.com/privacycg/CHIPS).\n */\n partitioned?: boolean;\n /**\n * Specifies the value for the [`Priority` `Set-Cookie` attribute](https://tools.ietf.org/html/draft-west-cookie-priority-00#section-4.1).\n *\n * - `'low'` will set the `Priority` attribute to `Low`.\n * - `'medium'` will set the `Priority` attribute to `Medium`, the default priority when not set.\n * - `'high'` will set the `Priority` attribute to `High`.\n *\n * More information about priority levels can be found in [the specification](https://tools.ietf.org/html/draft-west-cookie-priority-00#section-4.1).\n */\n priority?: \"low\" | \"medium\" | \"high\";\n /**\n * Specifies the value for the [`SameSite` `Set-Cookie` attribute](https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-09#section-5.4.7).\n *\n * - `true` will set the `SameSite` attribute to `Strict` for strict same site enforcement.\n * - `'lax'` will set the `SameSite` attribute to `Lax` for lax same site enforcement.\n * - `'none'` will set the `SameSite` attribute to `None` for an explicit cross-site cookie.\n * - `'strict'` will set the `SameSite` attribute to `Strict` for strict same site enforcement.\n *\n * More information about enforcement levels can be found in [the specification](https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-09#section-5.4.7).\n */\n sameSite?: boolean | \"lax\" | \"strict\" | \"none\";\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize a name value pair into a cookie string suitable for\n * http headers. An optional options object specifies cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n * => \"foo=bar; httpOnly\"\n */\nexport function serialize(\n name: string,\n val: string,\n options?: SerializeOptions,\n): string {\n const enc = options?.encode || encodeURIComponent;\n\n if (!cookieNameRegExp.test(name)) {\n throw new TypeError(`argument name is invalid: ${name}`);\n }\n\n const value = enc(val);\n\n if (!cookieValueRegExp.test(value)) {\n throw new TypeError(`argument val is invalid: ${val}`);\n }\n\n let str = name + \"=\" + value;\n if (!options) return str;\n\n if (options.maxAge !== undefined) {\n if (!Number.isInteger(options.maxAge)) {\n throw new TypeError(`option maxAge is invalid: ${options.maxAge}`);\n }\n\n str += \"; Max-Age=\" + options.maxAge;\n }\n\n if (options.domain) {\n if (!domainValueRegExp.test(options.domain)) {\n throw new TypeError(`option domain is invalid: ${options.domain}`);\n }\n\n str += \"; Domain=\" + options.domain;\n }\n\n if (options.path) {\n if (!pathValueRegExp.test(options.path)) {\n throw new TypeError(`option path is invalid: ${options.path}`);\n }\n\n str += \"; Path=\" + options.path;\n }\n\n if (options.expires) {\n if (\n !isDate(options.expires) ||\n !Number.isFinite(options.expires.valueOf())\n ) {\n throw new TypeError(`option expires is invalid: ${options.expires}`);\n }\n\n str += \"; Expires=\" + options.expires.toUTCString();\n }\n\n if (options.httpOnly) {\n str += \"; HttpOnly\";\n }\n\n if (options.secure) {\n str += \"; Secure\";\n }\n\n if (options.partitioned) {\n str += \"; Partitioned\";\n }\n\n if (options.priority) {\n const priority =\n typeof options.priority === \"string\"\n ? options.priority.toLowerCase()\n : undefined;\n switch (priority) {\n case \"low\":\n str += \"; Priority=Low\";\n break;\n case \"medium\":\n str += \"; Priority=Medium\";\n break;\n case \"high\":\n str += \"; Priority=High\";\n break;\n default:\n throw new TypeError(`option priority is invalid: ${options.priority}`);\n }\n }\n\n if (options.sameSite) {\n const sameSite =\n typeof options.sameSite === \"string\"\n ? options.sameSite.toLowerCase()\n : options.sameSite;\n switch (sameSite) {\n case true:\n case \"strict\":\n str += \"; SameSite=Strict\";\n break;\n case \"lax\":\n str += \"; SameSite=Lax\";\n break;\n case \"none\":\n str += \"; SameSite=None\";\n break;\n default:\n throw new TypeError(`option sameSite is invalid: ${options.sameSite}`);\n }\n }\n\n return str;\n}\n\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n */\nfunction decode(str: string): string {\n if (str.indexOf(\"%\") === -1) return str;\n\n try {\n return decodeURIComponent(str);\n } catch (e) {\n return str;\n }\n}\n\n/**\n * Determine if value is a Date.\n */\nfunction isDate(val: any): val is Date {\n return __toString.call(val) === \"[object Date]\";\n}\n", "\"use strict\";\n\nvar defaultParseOptions = {\n decodeValues: true,\n map: false,\n silent: false,\n};\n\nfunction isNonEmptyString(str) {\n return typeof str === \"string\" && !!str.trim();\n}\n\nfunction parseString(setCookieValue, options) {\n var parts = setCookieValue.split(\";\").filter(isNonEmptyString);\n\n var nameValuePairStr = parts.shift();\n var parsed = parseNameValuePair(nameValuePairStr);\n var name = parsed.name;\n var value = parsed.value;\n\n options = options\n ? Object.assign({}, defaultParseOptions, options)\n : defaultParseOptions;\n\n try {\n value = options.decodeValues ? decodeURIComponent(value) : value; // decode cookie value\n } catch (e) {\n console.error(\n \"set-cookie-parser encountered an error while decoding a cookie with value '\" +\n value +\n \"'. Set options.decodeValues to false to disable this feature.\",\n e\n );\n }\n\n var cookie = {\n name: name,\n value: value,\n };\n\n parts.forEach(function (part) {\n var sides = part.split(\"=\");\n var key = sides.shift().trimLeft().toLowerCase();\n var value = sides.join(\"=\");\n if (key === \"expires\") {\n cookie.expires = new Date(value);\n } else if (key === \"max-age\") {\n cookie.maxAge = parseInt(value, 10);\n } else if (key === \"secure\") {\n cookie.secure = true;\n } else if (key === \"httponly\") {\n cookie.httpOnly = true;\n } else if (key === \"samesite\") {\n cookie.sameSite = value;\n } else if (key === \"partitioned\") {\n cookie.partitioned = true;\n } else {\n cookie[key] = value;\n }\n });\n\n return cookie;\n}\n\nfunction parseNameValuePair(nameValuePairStr) {\n // Parses name-value-pair according to rfc6265bis draft\n\n var name = \"\";\n var value = \"\";\n var nameValueArr = nameValuePairStr.split(\"=\");\n if (nameValueArr.length > 1) {\n name = nameValueArr.shift();\n value = nameValueArr.join(\"=\"); // everything after the first =, joined by a \"=\" if there was more than one part\n } else {\n value = nameValuePairStr;\n }\n\n return { name: name, value: value };\n}\n\nfunction parse(input, options) {\n options = options\n ? Object.assign({}, defaultParseOptions, options)\n : defaultParseOptions;\n\n if (!input) {\n if (!options.map) {\n return [];\n } else {\n return {};\n }\n }\n\n if (input.headers) {\n if (typeof input.headers.getSetCookie === \"function\") {\n // for fetch responses - they combine headers of the same type in the headers array,\n // but getSetCookie returns an uncombined array\n input = input.headers.getSetCookie();\n } else if (input.headers[\"set-cookie\"]) {\n // fast-path for node.js (which automatically normalizes header names to lower-case\n input = input.headers[\"set-cookie\"];\n } else {\n // slow-path for other environments - see #25\n var sch =\n input.headers[\n Object.keys(input.headers).find(function (key) {\n return key.toLowerCase() === \"set-cookie\";\n })\n ];\n // warn if called on a request-like object with a cookie header rather than a set-cookie header - see #34, 36\n if (!sch && input.headers.cookie && !options.silent) {\n console.warn(\n \"Warning: set-cookie-parser appears to have been called on a request object. It is designed to parse Set-Cookie headers from responses, not Cookie headers from requests. Set the option {silent: true} to suppress this warning.\"\n );\n }\n input = sch;\n }\n }\n if (!Array.isArray(input)) {\n input = [input];\n }\n\n if (!options.map) {\n return input.filter(isNonEmptyString).map(function (str) {\n return parseString(str, options);\n });\n } else {\n var cookies = {};\n return input.filter(isNonEmptyString).reduce(function (cookies, str) {\n var cookie = parseString(str, options);\n cookies[cookie.name] = cookie;\n return cookies;\n }, cookies);\n }\n}\n\n/*\n Set-Cookie header field-values are sometimes comma joined in one string. This splits them without choking on commas\n that are within a single set-cookie field-value, such as in the Expires portion.\n\n This is uncommon, but explicitly allowed - see https://tools.ietf.org/html/rfc2616#section-4.2\n Node.js does this for every header *except* set-cookie - see https://github.com/nodejs/node/blob/d5e363b77ebaf1caf67cd7528224b651c86815c1/lib/_http_incoming.js#L128\n React Native's fetch does this for *every* header, including set-cookie.\n\n Based on: https://github.com/google/j2objc/commit/16820fdbc8f76ca0c33472810ce0cb03d20efe25\n Credits to: https://github.com/tomball for original and https://github.com/chrusart for JavaScript implementation\n*/\nfunction splitCookiesString(cookiesString) {\n if (Array.isArray(cookiesString)) {\n return cookiesString;\n }\n if (typeof cookiesString !== \"string\") {\n return [];\n }\n\n var cookiesStrings = [];\n var pos = 0;\n var start;\n var ch;\n var lastComma;\n var nextStart;\n var cookiesSeparatorFound;\n\n function skipWhitespace() {\n while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n pos += 1;\n }\n return pos < cookiesString.length;\n }\n\n function notSpecialChar() {\n ch = cookiesString.charAt(pos);\n\n return ch !== \"=\" && ch !== \";\" && ch !== \",\";\n }\n\n while (pos < cookiesString.length) {\n start = pos;\n cookiesSeparatorFound = false;\n\n while (skipWhitespace()) {\n ch = cookiesString.charAt(pos);\n if (ch === \",\") {\n // ',' is a cookie separator if we have later first '=', not ';' or ','\n lastComma = pos;\n pos += 1;\n\n skipWhitespace();\n nextStart = pos;\n\n while (pos < cookiesString.length && notSpecialChar()) {\n pos += 1;\n }\n\n // currently special character\n if (pos < cookiesString.length && cookiesString.charAt(pos) === \"=\") {\n // we found cookies separator\n cookiesSeparatorFound = true;\n // pos is inside the next cookie, so back up and return it.\n pos = nextStart;\n cookiesStrings.push(cookiesString.substring(start, lastComma));\n start = pos;\n } else {\n // in param ',' or param separator ';',\n // we continue from that comma\n pos = lastComma + 1;\n }\n } else {\n pos += 1;\n }\n }\n\n if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n cookiesStrings.push(cookiesString.substring(start, cookiesString.length));\n }\n }\n\n return cookiesStrings;\n}\n\nmodule.exports = parse;\nmodule.exports.parse = parse;\nmodule.exports.parseString = parseString;\nmodule.exports.splitCookiesString = splitCookiesString;\n", "var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n", "var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n", "var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nmodule.exports = baseSet;\n", "var baseSet = require('./_baseSet');\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n", "var baseUnset = require('./_baseUnset');\n\n/**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\nfunction unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n}\n\nmodule.exports = unset;\n", "var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n", "/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n", "/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n", "/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n", "var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n", "var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n", "/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n", "/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n", "var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n", "/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n", "/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n", "var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n", "/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n", "/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n", "var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n", "var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n", "/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n", "/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n", "var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n", "/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n", "/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n", "var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n", "var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n", "/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n", "var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n", "var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n", "/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n", "var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n", "var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n", "var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n", "var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n", "var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n", "var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n", "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n", "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n", "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n", "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n", "var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n", "var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n", "var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n", "var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n", "var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignMergeValue;\n", "/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n", "var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n", "var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nmodule.exports = cloneBuffer;\n", "var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n", "var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n", "/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = copyArray;\n", "var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nmodule.exports = baseCreate;\n", "var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n", "var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nmodule.exports = initCloneObject;\n", "var isArrayLike = require('./isArrayLike'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n", "var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n", "/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nmodule.exports = safeGet;\n", "var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n", "/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n", "var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n", "var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n", "var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n", "var assignMergeValue = require('./_assignMergeValue'),\n cloneBuffer = require('./_cloneBuffer'),\n cloneTypedArray = require('./_cloneTypedArray'),\n copyArray = require('./_copyArray'),\n initCloneObject = require('./_initCloneObject'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLikeObject = require('./isArrayLikeObject'),\n isBuffer = require('./isBuffer'),\n isFunction = require('./isFunction'),\n isObject = require('./isObject'),\n isPlainObject = require('./isPlainObject'),\n isTypedArray = require('./isTypedArray'),\n safeGet = require('./_safeGet'),\n toPlainObject = require('./toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nmodule.exports = baseMergeDeep;\n", "var Stack = require('./_Stack'),\n assignMergeValue = require('./_assignMergeValue'),\n baseFor = require('./_baseFor'),\n baseMergeDeep = require('./_baseMergeDeep'),\n isObject = require('./isObject'),\n keysIn = require('./keysIn'),\n safeGet = require('./_safeGet');\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nmodule.exports = baseMerge;\n", "var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n", "var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n", "var baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n", "var baseMerge = require('./_baseMerge'),\n createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nmodule.exports = merge;\n", "/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n", "var copyObject = require('./_copyObject'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n", "var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n", "var copyObject = require('./_copyObject'),\n getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n", "var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n", "var copyObject = require('./_copyObject'),\n getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n", "var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nmodule.exports = initCloneArray;\n", "var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n", "/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nmodule.exports = cloneRegExp;\n", "var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n", "var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n cloneDataView = require('./_cloneDataView'),\n cloneRegExp = require('./_cloneRegExp'),\n cloneSymbol = require('./_cloneSymbol'),\n cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nmodule.exports = initCloneByTag;\n", "var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n", "var baseIsMap = require('./_baseIsMap'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n", "var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n", "var baseIsSet = require('./_baseIsSet'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n", "var Stack = require('./_Stack'),\n arrayEach = require('./_arrayEach'),\n assignValue = require('./_assignValue'),\n baseAssign = require('./_baseAssign'),\n baseAssignIn = require('./_baseAssignIn'),\n cloneBuffer = require('./_cloneBuffer'),\n copyArray = require('./_copyArray'),\n copySymbols = require('./_copySymbols'),\n copySymbolsIn = require('./_copySymbolsIn'),\n getAllKeys = require('./_getAllKeys'),\n getAllKeysIn = require('./_getAllKeysIn'),\n getTag = require('./_getTag'),\n initCloneArray = require('./_initCloneArray'),\n initCloneByTag = require('./_initCloneByTag'),\n initCloneObject = require('./_initCloneObject'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isMap = require('./isMap'),\n isObject = require('./isObject'),\n isSet = require('./isSet'),\n keys = require('./keys'),\n keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nmodule.exports = baseClone;\n", "var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n", "var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n", "/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n", "var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n", "var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n", "var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n", "'use strict';\nmodule.exports = str => encodeURIComponent(str).replace(/[!'()*]/g, x => `%${x.charCodeAt(0).toString(16).toUpperCase()}`);\n", "'use strict';\nvar token = '%[a-f0-9]{2}';\nvar singleMatcher = new RegExp('(' + token + ')|([^%]+?)', 'gi');\nvar multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn [decodeURIComponent(components.join(''))];\n\t} catch (err) {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tvar left = components.slice(0, split);\n\tvar right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch (err) {\n\t\tvar tokens = input.match(singleMatcher) || [];\n\n\t\tfor (var i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher) || [];\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tvar replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD'\n\t};\n\n\tvar match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch (err) {\n\t\t\tvar result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tvar entries = Object.keys(replaceMap);\n\n\tfor (var i = 0; i < entries.length; i++) {\n\t\t// Replace all decoded components\n\t\tvar key = entries[i];\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nmodule.exports = function (encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\tencodedURI = encodedURI.replace(/\\+/g, ' ');\n\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch (err) {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n};\n", "'use strict';\n\nmodule.exports = (string, separator) => {\n\tif (!(typeof string === 'string' && typeof separator === 'string')) {\n\t\tthrow new TypeError('Expected the arguments to be of type `string`');\n\t}\n\n\tif (separator === '') {\n\t\treturn [string];\n\t}\n\n\tconst separatorIndex = string.indexOf(separator);\n\n\tif (separatorIndex === -1) {\n\t\treturn [string];\n\t}\n\n\treturn [\n\t\tstring.slice(0, separatorIndex),\n\t\tstring.slice(separatorIndex + separator.length)\n\t];\n};\n", "'use strict';\nmodule.exports = function (obj, predicate) {\n\tvar ret = {};\n\tvar keys = Object.keys(obj);\n\tvar isArr = Array.isArray(predicate);\n\n\tfor (var i = 0; i < keys.length; i++) {\n\t\tvar key = keys[i];\n\t\tvar val = obj[key];\n\n\t\tif (isArr ? predicate.indexOf(key) !== -1 : predicate(key, val, obj)) {\n\t\t\tret[key] = val;\n\t\t}\n\t}\n\n\treturn ret;\n};\n", "'use strict';\nconst strictUriEncode = require('strict-uri-encode');\nconst decodeComponent = require('decode-uri-component');\nconst splitOnFirst = require('split-on-first');\nconst filterObject = require('filter-obj');\n\nconst isNullOrUndefined = value => value === null || value === undefined;\n\nconst encodeFragmentIdentifier = Symbol('encodeFragmentIdentifier');\n\nfunction encoderForArrayFormat(options) {\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tconst index = result.length;\n\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[', index, ']'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join('')\n\t\t\t\t];\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[]'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '[]=', encode(value, options)].join('')];\n\t\t\t};\n\n\t\tcase 'colon-list-separator':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), ':list='].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), ':list=', encode(value, options)].join('')];\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\tcase 'bracket-separator': {\n\t\t\tconst keyValueSep = options.arrayFormat === 'bracket-separator' ?\n\t\t\t\t'[]=' :\n\t\t\t\t'=';\n\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\t// Translate null to an empty string so that it doesn't serialize as 'null'\n\t\t\t\tvalue = value === null ? '' : value;\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn [[encode(key, options), keyValueSep, encode(value, options)].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [[result, encode(value, options)].join(options.arrayFormatSeparator)];\n\t\t\t};\n\t\t}\n\n\t\tdefault:\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, encode(key, options)];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '=', encode(value, options)].join('')];\n\t\t\t};\n\t}\n}\n\nfunction parserForArrayFormat(options) {\n\tlet result;\n\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /\\[(\\d*)\\]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(\\[\\])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tcase 'colon-list-separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(:list)$/.exec(key);\n\t\t\t\tkey = key.replace(/:list$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = typeof value === 'string' && value.includes(options.arrayFormatSeparator);\n\t\t\t\tconst isEncodedArray = (typeof value === 'string' && !isArray && decode(value, options).includes(options.arrayFormatSeparator));\n\t\t\t\tvalue = isEncodedArray ? decode(value, options) : value;\n\t\t\t\tconst newValue = isArray || isEncodedArray ? value.split(options.arrayFormatSeparator).map(item => decode(item, options)) : value === null ? value : decode(value, options);\n\t\t\t\taccumulator[key] = newValue;\n\t\t\t};\n\n\t\tcase 'bracket-separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = /(\\[\\])$/.test(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!isArray) {\n\t\t\t\t\taccumulator[key] = value ? decode(value, options) : value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst arrayValue = value === null ?\n\t\t\t\t\t[] :\n\t\t\t\t\tvalue.split(options.arrayFormatSeparator).map(item => decode(item, options));\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = arrayValue;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], arrayValue);\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\t}\n}\n\nfunction validateArrayFormatSeparator(value) {\n\tif (typeof value !== 'string' || value.length !== 1) {\n\t\tthrow new TypeError('arrayFormatSeparator must be single character string');\n\t}\n}\n\nfunction encode(value, options) {\n\tif (options.encode) {\n\t\treturn options.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction decode(value, options) {\n\tif (options.decode) {\n\t\treturn decodeComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t}\n\n\tif (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input))\n\t\t\t.sort((a, b) => Number(a) - Number(b))\n\t\t\t.map(key => input[key]);\n\t}\n\n\treturn input;\n}\n\nfunction removeHash(input) {\n\tconst hashStart = input.indexOf('#');\n\tif (hashStart !== -1) {\n\t\tinput = input.slice(0, hashStart);\n\t}\n\n\treturn input;\n}\n\nfunction getHash(url) {\n\tlet hash = '';\n\tconst hashStart = url.indexOf('#');\n\tif (hashStart !== -1) {\n\t\thash = url.slice(hashStart);\n\t}\n\n\treturn hash;\n}\n\nfunction extract(input) {\n\tinput = removeHash(input);\n\tconst queryStart = input.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\n\treturn input.slice(queryStart + 1);\n}\n\nfunction parseValue(value, options) {\n\tif (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {\n\t\tvalue = Number(value);\n\t} else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {\n\t\tvalue = value.toLowerCase() === 'true';\n\t}\n\n\treturn value;\n}\n\nfunction parse(query, options) {\n\toptions = Object.assign({\n\t\tdecode: true,\n\t\tsort: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\tparseNumbers: false,\n\t\tparseBooleans: false\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst formatter = parserForArrayFormat(options);\n\n\t// Create an object with no prototype\n\tconst ret = Object.create(null);\n\n\tif (typeof query !== 'string') {\n\t\treturn ret;\n\t}\n\n\tquery = query.trim().replace(/^[?#&]/, '');\n\n\tif (!query) {\n\t\treturn ret;\n\t}\n\n\tfor (const param of query.split('&')) {\n\t\tif (param === '') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet [key, value] = splitOnFirst(options.decode ? param.replace(/\\+/g, ' ') : param, '=');\n\n\t\t// Missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tvalue = value === undefined ? null : ['comma', 'separator', 'bracket-separator'].includes(options.arrayFormat) ? value : decode(value, options);\n\t\tformatter(decode(key, options), value, ret);\n\t}\n\n\tfor (const key of Object.keys(ret)) {\n\t\tconst value = ret[key];\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tfor (const k of Object.keys(value)) {\n\t\t\t\tvalue[k] = parseValue(value[k], options);\n\t\t\t}\n\t\t} else {\n\t\t\tret[key] = parseValue(value, options);\n\t\t}\n\t}\n\n\tif (options.sort === false) {\n\t\treturn ret;\n\t}\n\n\treturn (options.sort === true ? Object.keys(ret).sort() : Object.keys(ret).sort(options.sort)).reduce((result, key) => {\n\t\tconst value = ret[key];\n\t\tif (Boolean(value) && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t// Sort object keys, not values\n\t\t\tresult[key] = keysSorter(value);\n\t\t} else {\n\t\t\tresult[key] = value;\n\t\t}\n\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexports.extract = extract;\nexports.parse = parse;\n\nexports.stringify = (object, options) => {\n\tif (!object) {\n\t\treturn '';\n\t}\n\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ','\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst shouldFilter = key => (\n\t\t(options.skipNull && isNullOrUndefined(object[key])) ||\n\t\t(options.skipEmptyString && object[key] === '')\n\t);\n\n\tconst formatter = encoderForArrayFormat(options);\n\n\tconst objectCopy = {};\n\n\tfor (const key of Object.keys(object)) {\n\t\tif (!shouldFilter(key)) {\n\t\t\tobjectCopy[key] = object[key];\n\t\t}\n\t}\n\n\tconst keys = Object.keys(objectCopy);\n\n\tif (options.sort !== false) {\n\t\tkeys.sort(options.sort);\n\t}\n\n\treturn keys.map(key => {\n\t\tconst value = object[key];\n\n\t\tif (value === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (value === null) {\n\t\t\treturn encode(key, options);\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\tif (value.length === 0 && options.arrayFormat === 'bracket-separator') {\n\t\t\t\treturn encode(key, options) + '[]';\n\t\t\t}\n\n\t\t\treturn value\n\t\t\t\t.reduce(formatter(key), [])\n\t\t\t\t.join('&');\n\t\t}\n\n\t\treturn encode(key, options) + '=' + encode(value, options);\n\t}).filter(x => x.length > 0).join('&');\n};\n\nexports.parseUrl = (url, options) => {\n\toptions = Object.assign({\n\t\tdecode: true\n\t}, options);\n\n\tconst [url_, hash] = splitOnFirst(url, '#');\n\n\treturn Object.assign(\n\t\t{\n\t\t\turl: url_.split('?')[0] || '',\n\t\t\tquery: parse(extract(url), options)\n\t\t},\n\t\toptions && options.parseFragmentIdentifier && hash ? {fragmentIdentifier: decode(hash, options)} : {}\n\t);\n};\n\nexports.stringifyUrl = (object, options) => {\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\t[encodeFragmentIdentifier]: true\n\t}, options);\n\n\tconst url = removeHash(object.url).split('?')[0] || '';\n\tconst queryFromUrl = exports.extract(object.url);\n\tconst parsedQueryFromUrl = exports.parse(queryFromUrl, {sort: false});\n\n\tconst query = Object.assign(parsedQueryFromUrl, object.query);\n\tlet queryString = exports.stringify(query, options);\n\tif (queryString) {\n\t\tqueryString = `?${queryString}`;\n\t}\n\n\tlet hash = getHash(object.url);\n\tif (object.fragmentIdentifier) {\n\t\thash = `#${options[encodeFragmentIdentifier] ? encode(object.fragmentIdentifier, options) : object.fragmentIdentifier}`;\n\t}\n\n\treturn `${url}${queryString}${hash}`;\n};\n\nexports.pick = (input, filter, options) => {\n\toptions = Object.assign({\n\t\tparseFragmentIdentifier: true,\n\t\t[encodeFragmentIdentifier]: false\n\t}, options);\n\n\tconst {url, query, fragmentIdentifier} = exports.parseUrl(input, options);\n\treturn exports.stringifyUrl({\n\t\turl,\n\t\tquery: filterObject(query, filter),\n\t\tfragmentIdentifier\n\t}, options);\n};\n\nexports.exclude = (input, filter, options) => {\n\tconst exclusionFilter = Array.isArray(filter) ? key => !filter.includes(key) : (key, value) => !filter(key, value);\n\n\treturn exports.pick(input, exclusionFilter, options);\n};\n", "'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n", "/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = baseFindIndex;\n", "/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n", "/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = strictIndexOf;\n", "var baseFindIndex = require('./_baseFindIndex'),\n baseIsNaN = require('./_baseIsNaN'),\n strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n", "var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n", "/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arrayIncludesWith;\n", "/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = noop;\n", "var Set = require('./_Set'),\n noop = require('./noop'),\n setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nmodule.exports = createSet;\n", "var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n cacheHas = require('./_cacheHas'),\n createSet = require('./_createSet'),\n setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseUniq;\n", "var baseFlatten = require('./_baseFlatten'),\n baseRest = require('./_baseRest'),\n baseUniq = require('./_baseUniq'),\n isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\nvar union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n});\n\nmodule.exports = union;\n", "var baseGet = require('./_baseGet'),\n baseSet = require('./_baseSet'),\n castPath = require('./_castPath');\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nmodule.exports = basePickBy;\n", "/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n", "var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n", "var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n", "var basePickBy = require('./_basePickBy'),\n hasIn = require('./hasIn');\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n}\n\nmodule.exports = basePick;\n", "var basePick = require('./_basePick'),\n flatRest = require('./_flatRest');\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n});\n\nmodule.exports = pick;\n", "/* jshint node:true */\n 'use strict';\n\n module.exports = \"\\n\";\n ", "'use strict';\n\nmodule.exports.isFunction = function (fn) {\n var getType = {};\n return fn && getType.toString.call(fn) === '[object Function]';\n};\n\nmodule.exports.isArray = function (arr) {\n return Array.isArray(arr);\n};\n\nmodule.exports.isObject = function (obj) {\n return obj instanceof Object;\n};\n\nmodule.exports.isString = function (str) {\n return typeof str === 'string';\n};\n\nmodule.exports.isNumber = function (num) {\n return typeof num === 'number';\n};\n\nmodule.exports.isBoolean = function (bool) {\n return typeof bool === 'boolean';\n};\n\nmodule.exports.isDate = function (date) {\n return date instanceof Date;\n};", "'use strict';\n\nvar EOL = require('./eol');\nvar helper = require('./helper');\n\nmodule.exports = function joinRows(rows, join) {\n if (!rows || !helper.isArray(rows)) {\n throw new TypeError('Invalid params \"rows\" for joinRows.' + ' Must be an array of string.');\n }\n //Merge all rows in a single output with the correct End of Line string\n var r = rows.join(join || EOL || '\\n');\n return r;\n};", "/* jshint node:true */\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar helper = require('../core/helper');\n\nvar Handler = function () {\n function Handler(options) {\n _classCallCheck(this, Handler);\n\n this._options = options;\n\n // an object of {typeName:(value,index,parent)=>any}\n this._options.typeHandlers = this._options.typeHandlers || {};\n }\n\n /**\n * Check if results needing mapping to alternate value\n *\n * @returns [{item, value}] result\n */\n\n\n _createClass(Handler, [{\n key: '_setHeaders',\n value: function _setHeaders(result, item) {\n var self = this;\n if (!item) return result;\n return result.map(function (element) {\n element.item = element.item ? item + self._options.headerPathString + element.item : item;\n return element;\n });\n }\n }, {\n key: 'castValue',\n value: function castValue(element, item, index, parent) {\n //cast by matching constructor\n var types = this._options.typeHandlers;\n for (var type in types) {\n if (isInstanceOfTypeName(element, type)) {\n element = types[type].call(types, element, index, parent);\n break; //first match we move on\n }\n }\n\n return element;\n }\n }, {\n key: 'checkComplex',\n value: function checkComplex(element, item) {\n //Check if element is a Date\n if (helper.isDate(element)) {\n return [{\n item: item,\n value: (this._options.handleDate || this._handleDate)(element, item)\n }];\n }\n //Check if element is an Array\n else if (helper.isArray(element)) {\n var resultArray = this._handleArray(element, item);\n return this._setHeaders(resultArray, item);\n }\n //Check if element is a Object\n else if (helper.isObject(element)) {\n var resultObject = this._handleObject(element);\n return this._setHeaders(resultObject, item);\n }\n\n return [{\n item: item,\n value: ''\n }];\n }\n\n /**\n * Check the element type of the element call the correct handle function\n *\n * @param element Element that will be checked\n * @param item Used to make the headers/path breadcrumb\n * @returns [{item, value}] result\n */\n\n }, {\n key: 'check',\n value: function check(element, item, index, parent) {\n element = this.castValue(element, item, index, parent);\n // try simple value by highier performance switch\n switch (typeof element === 'undefined' ? 'undefined' : _typeof(element)) {\n case 'string':\n return [{\n item: item,\n value: this._handleString(element, item)\n }];\n\n case 'number':\n return [{\n item: item,\n value: this._handleNumber(element, item)\n }];\n\n case 'boolean':\n return [{\n item: item,\n value: this._handleBoolean.bind(this)(element, item)\n }];\n }\n\n return this.checkComplex(element, item);\n }\n\n /**\n * Handle all Objects\n *\n * @param {Object} obj\n * @returns [{item, value}] result\n */\n\n }, {\n key: '_handleObject',\n value: function _handleObject(obj) {\n var result = [];\n //Look every object props\n for (var prop in obj) {\n var propData = obj[prop];\n //Check the propData type\n var resultCheckType = this.check(propData, prop, prop, obj);\n //Append to results aka merge results aka array-append-array\n result = result.concat(resultCheckType);\n }\n return result;\n }\n\n /**\n * Handle all Arrays, merges arrays with primitive types in a single value\n *\n * @param {Array} array\n * @returns [{item, value}] result\n */\n\n }, {\n key: '_handleArray',\n value: function _handleArray(array) {\n var self = this;\n var result = [];\n var firstElementWithoutItem;\n for (var aIndex = 0; aIndex < array.length; ++aIndex) {\n var element = array[aIndex];\n //Check the propData type\n var resultCheckType = self.check(element, null, aIndex, array);\n //Check for results without itens, merge all itens with the first occurrence\n if (resultCheckType.length === 0) continue;\n var firstResult = resultCheckType[0];\n if (!firstResult.item && firstElementWithoutItem !== undefined) {\n firstElementWithoutItem.value += self._options.arrayPathString + firstResult.value;\n continue;\n } else if (resultCheckType.length > 0 && !firstResult.item && firstElementWithoutItem === undefined) {\n firstElementWithoutItem = firstResult;\n }\n //Append to results\n result = result.concat(resultCheckType);\n }\n return result;\n }\n /**\n * Handle all Boolean variables, can be replaced with options.handleBoolean\n *\n * @param {Boolean} boolean\n * @returns {String} result\n */\n\n }, {\n key: '_handleBoolean',\n value: function _handleBoolean(boolean) {\n var result;\n //Check for booolean options\n if (boolean) {\n result = this._options.booleanTrueString || 'true';\n } else {\n result = this._options.booleanFalseString || 'false';\n }\n return result;\n }\n /**\n * Handle all String variables, can be replaced with options.handleString\n *\n * @param {String} string\n * @returns {String} string\n */\n\n }, {\n key: '_handleString',\n value: function _handleString(string) {\n return string;\n }\n /**\n * Handle all Number variables, can be replaced with options.handleNumber\n *\n * @param {Number} number\n * @returns {Number} number\n */\n\n }, {\n key: '_handleNumber',\n value: function _handleNumber(number) {\n return number;\n }\n /**\n * Handle all Date variables, can be replaced with options.handleDate\n *\n * @param {Date} number\n * @returns {string} result\n */\n\n }, {\n key: '_handleDate',\n value: function _handleDate(date) {\n return date.toLocaleDateString();\n }\n }]);\n\n return Handler;\n}();\n\nmodule.exports = Handler;\n\nvar globalScope = typeof window === \"undefined\" ? global : window;\nfunction isInstanceOfTypeName(element, typeName) {\n if (element instanceof globalScope[typeName]) {\n return true; //Buffer and complex objects\n }\n\n //literals in javascript cannot be checked by instance of\n switch (typeof element === 'undefined' ? 'undefined' : _typeof(element)) {\n case 'string':\n return typeName === \"String\";\n case 'boolean':\n return typeName === \"Boolean\";\n case 'number':\n return typeName === \"Number\";\n }\n\n return false;\n}", "/* jshint node:true */\n'use strict';\n\n// Escape the textDelimiters contained in the field\n/*(https://tools.ietf.org/html/rfc4180)\n 7. If double-quotes are used to enclose fields, then a double-quote\n appearing inside a field must be escaped by preceding it with\n another double quote.\n For example: \"aaa\",\"b\"\"bb\",\"ccc\"\n*/\n\nmodule.exports = function escapedDelimiters(textDelimiter, rowDelimiter, forceTextDelimiter) {\n var endOfLine = '\\n';\n\n if (typeof textDelimiter !== 'string') {\n throw new TypeError('Invalid param \"textDelimiter\", must be a string.');\n }\n\n if (typeof rowDelimiter !== 'string') {\n throw new TypeError('Invalid param \"rowDelimiter\", must be a string.');\n }\n\n var textDelimiterRegex = new RegExp(\"\\\\\" + textDelimiter, 'g');\n var escapedDelimiter = textDelimiter + textDelimiter;\n\n var enclosingCondition = textDelimiter === '\"' ? function (value) {\n return value.indexOf(rowDelimiter) >= 0 || value.indexOf(endOfLine) >= 0 || value.indexOf('\"') >= 0;\n } : function (value) {\n return value.indexOf(rowDelimiter) >= 0 || value.indexOf(endOfLine) >= 0;\n };\n\n return function (value) {\n if (forceTextDelimiter) value = \"\" + value;\n\n if (!value.replace) return value;\n // Escape the textDelimiters contained in the field\n value = value.replace(textDelimiterRegex, escapedDelimiter);\n\n // Escape the whole field if it contains a rowDelimiter or a linebreak or double quote\n if (forceTextDelimiter || enclosingCondition(value)) {\n value = textDelimiter + value + textDelimiter;\n }\n\n return value;\n };\n};", "/* jshint node:true */\n'use strict';\n\n/**\n * Module dependencies.\n */\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar joinRows = require('../core/join-rows');\nvar Handler = require('./handler');\nvar helper = require('../core/helper');\n\nvar Parser = function () {\n function Parser(options) {\n _classCallCheck(this, Parser);\n\n this._options = options || {};\n this._handler = new Handler(this._options);\n this._headers = this._options.headers || [];\n this._escape = require('../core/escape-delimiters')(this._options.textDelimiter, this._options.rowDelimiter, this._options.forceTextDelimiter);\n }\n\n /**\n * Generates a CSV file with optional headers based on the passed JSON,\n * with can be an Object or Array.\n *\n * @param {Object|Array} json\n * @param {Function} done(err,csv) - Callback function\n * if error, returning error in call back.\n * if csv is created successfully, returning csv output to callback.\n */\n\n\n _createClass(Parser, [{\n key: 'parse',\n value: function parse(json, done, stream) {\n if (helper.isArray(json)) return done(null, this._parseArray(json, stream));else if (helper.isObject(json)) return done(null, this._parseObject(json));\n return done(new Error('Unable to parse the JSON object, its not an Array or Object.'));\n }\n }, {\n key: '_checkRows',\n value: function _checkRows(rows) {\n var lastRow = null;\n var finalRows = [];\n var fillGaps = function fillGaps(col, index) {\n return col === '' || col === undefined ? lastRow[index] : col;\n };\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = rows[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var row = _step.value;\n\n var missing = this._headers.length - row.length;\n if (missing > 0) row = row.concat(Array(missing).join(\".\").split(\".\"));\n if (lastRow && this._options.fillGaps) row = row.map(fillGaps);\n finalRows.push(row.join(this._options.rowDelimiter));\n lastRow = row;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return finalRows;\n }\n }, {\n key: '_parseArray',\n value: function _parseArray(json, stream) {\n var self = this;\n this._headers = this._headers || [];\n var fileRows = [];\n var outputFile = void 0;\n var fillRows = void 0;\n\n var getHeaderIndex = function getHeaderIndex(header) {\n var index = self._headers.indexOf(header);\n if (index === -1) {\n self._headers.push(header);\n index = self._headers.indexOf(header);\n }\n return index;\n };\n\n //Generate the csv output\n fillRows = function fillRows(result) {\n var rows = [];\n var fillAndPush = function fillAndPush(row) {\n return rows.push(row.map(function (col) {\n return col != null ? col : '';\n }));\n };\n // initialize the array with empty strings to handle 'unpopular' headers\n var newRow = function newRow() {\n return new Array(self._headers.length).fill(null);\n };\n var emptyRowIndexByHeader = {};\n var currentRow = newRow();\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = result[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var element = _step2.value;\n\n var elementHeaderIndex = getHeaderIndex(element.item);\n if (currentRow[elementHeaderIndex] != undefined) {\n fillAndPush(currentRow);\n currentRow = newRow();\n }\n emptyRowIndexByHeader[elementHeaderIndex] = emptyRowIndexByHeader[elementHeaderIndex] || 0;\n // make sure there isn't a empty row for this header\n if (self._options.fillTopRow && emptyRowIndexByHeader[elementHeaderIndex] < rows.length) {\n rows[emptyRowIndexByHeader[elementHeaderIndex]][elementHeaderIndex] = self._escape(element.value);\n emptyRowIndexByHeader[elementHeaderIndex] += 1;\n continue;\n }\n currentRow[elementHeaderIndex] = self._escape(element.value);\n emptyRowIndexByHeader[elementHeaderIndex] += 1;\n }\n // push last row\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n if (currentRow.length > 0) {\n fillAndPush(currentRow);\n }\n fileRows = fileRows.concat(self._checkRows(rows));\n };\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = json[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var item = _step3.value;\n\n //Call checkType to list all items inside this object\n //Items are returned as a object {item: 'Prop Value, Item Name', value: 'Prop Data Value'}\n var itemResult = self._handler.check(item, self._options.mainPathItem, item, json);\n fillRows(itemResult);\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n\n if (!stream && self._options.includeHeaders) {\n //Add the headers to the first line\n fileRows.unshift(this.headers);\n }\n\n return joinRows(fileRows, self._options.endOfLine);\n }\n }, {\n key: '_parseObject',\n value: function _parseObject(json) {\n var self = this;\n var fileRows = [];\n var parseResult = [];\n var outputFile = void 0;\n var fillRows = void 0;\n var horizontalRows = [[], []];\n\n fillRows = function fillRows(result) {\n var value = result.value || result.value === 0 ? result.value.toString() : self._options.undefinedString;\n value = self._escape(value);\n\n //Type header;value\n if (self._options.verticalOutput) {\n var row = [result.item, value];\n fileRows.push(row.join(self._options.rowDelimiter));\n } else {\n horizontalRows[0].push(result.item);\n horizontalRows[1].push(value);\n }\n };\n for (var prop in json) {\n var prefix = \"\";\n if (this._options.mainPathItem) prefix = this._options.mainPathItem + this._options.headerPathString;\n parseResult = this._handler.check(json[prop], prefix + prop, prop, json);\n\n parseResult.forEach(fillRows);\n }\n if (!this._options.verticalOutput) {\n fileRows.push(horizontalRows[0].join(this._options.rowDelimiter));\n fileRows.push(horizontalRows[1].join(this._options.rowDelimiter));\n }\n return joinRows(fileRows, this._options.endOfLine);\n }\n }, {\n key: 'headers',\n get: function get() {\n var _this = this;\n\n var headers = this._headers;\n\n if (this._options.rename && this._options.rename.length > 0) headers = headers.map(function (header) {\n return _this._options.rename[_this._options.headers.indexOf(header)] || header;\n });\n\n if (this._options.forceTextDelimiter) {\n headers = headers.map(function (header) {\n return '' + _this._options.textDelimiter + header + _this._options.textDelimiter;\n });\n }\n\n if (this._options.mapHeaders) headers = headers.map(this._options.mapHeaders);\n\n return headers.join(this._options.rowDelimiter);\n }\n }]);\n\n return Parser;\n}();\n\nmodule.exports = Parser;", "/* jshint node:true */\n 'use strict';\n\n var Stream = function (_Transform) {\n throw new Error(\"jsonexport called without third argument as a callback and is required\")\n }\n\n module.exports = Stream;\n ", "/* jshint node:true */\n'use strict';\n/**\n * Module dependencies.\n */\n//const _ = require('underscore');\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar Parser = require('./parser/csv');\nvar Stream = require('./core/stream');\nvar helper = require('./core/helper');\nvar EOL = require('./core/eol');\n\n/**\n * Main function that converts json to csv\n *\n * @param {Object|Array} json\n * @param {Object} [options]\n * @param {Function} callback(err, csv) - Callback function\n * if error, returning error in call back.\n * if csv is created successfully, returning csv output to callback.\n */\nmodule.exports = function () {\n var DEFAULT_OPTIONS = {\n headers: [], // Array\n rename: [], // Array\n headerPathString: '.', // String\n rowDelimiter: ',', // String\n textDelimiter: '\"', // String\n arrayPathString: ';', // String\n undefinedString: '', // String\n endOfLine: EOL || '\\n', // String\n mainPathItem: null, // String\n booleanTrueString: null, // String\n booleanFalseString: null, // String\n includeHeaders: true, // Boolean\n fillGaps: false, // Boolean\n verticalOutput: true, // Boolean\n forceTextDelimiter: false //Boolean\n };\n // argument parsing\n var json = void 0,\n userOptions = void 0,\n callback = void 0;\n if (arguments.length === 3) {\n var _arguments = Array.prototype.slice.call(arguments);\n\n json = _arguments[0];\n userOptions = _arguments[1];\n callback = _arguments[2];\n } else if (arguments.length === 2) {\n var any = void 0;\n\n var _arguments2 = Array.prototype.slice.call(arguments);\n\n json = _arguments2[0];\n any = _arguments2[1];\n\n if (typeof any === 'function') {\n callback = any;\n } else if ((typeof any === 'undefined' ? 'undefined' : _typeof(any)) === 'object') {\n userOptions = any;\n }\n } else if (arguments.length === 1) {\n var _arguments3 = Array.prototype.slice.call(arguments),\n _any = _arguments3[0];\n\n if ((typeof _any === 'undefined' ? 'undefined' : _typeof(_any)) === 'object') {\n var defaultKeys = Object.keys(DEFAULT_OPTIONS);\n var objectKeys = Object.keys(_any);\n var isOptions = objectKeys.every(function (key) {\n return defaultKeys.includes(key);\n });\n if (objectKeys.length > 0 && isOptions) {\n userOptions = _any;\n } else {\n json = _any;\n }\n } else {\n json = _any;\n }\n } else {\n return new Stream(new Parser(DEFAULT_OPTIONS));\n }\n var options = Object.assign({}, DEFAULT_OPTIONS, userOptions);\n var parser = new Parser(options);\n // if no json is provided Stream API will be used\n if (!json) {\n return new Stream(parser);\n }\n // always return an promise\n return new Promise(function (resolve, reject) {\n parser.parse(json, function (err, result) {\n if (callback) return callback(err, result);\n if (err) return reject(err);\n if (reject) return resolve(result);\n });\n });\n};", "var baseRest = require('./_baseRest'),\n eq = require('./eq'),\n isIterateeCall = require('./_isIterateeCall'),\n keysIn = require('./keysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n});\n\nmodule.exports = defaults;\n", "/**\n * @license React\n * react-is.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function typeOf(object) {\n if (\"object\" === typeof object && null !== object) {\n var $$typeof = object.$$typeof;\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n switch (((object = object.type), object)) {\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n return object;\n default:\n switch (((object = object && object.$$typeof), object)) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n return object;\n case REACT_CONSUMER_TYPE:\n return object;\n default:\n return $$typeof;\n }\n }\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n }\n var REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_OFFSCREEN_TYPE = Symbol.for(\"react.offscreen\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\n exports.ContextConsumer = REACT_CONSUMER_TYPE;\n exports.ContextProvider = REACT_CONTEXT_TYPE;\n exports.Element = REACT_ELEMENT_TYPE;\n exports.ForwardRef = REACT_FORWARD_REF_TYPE;\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.Lazy = REACT_LAZY_TYPE;\n exports.Memo = REACT_MEMO_TYPE;\n exports.Portal = REACT_PORTAL_TYPE;\n exports.Profiler = REACT_PROFILER_TYPE;\n exports.StrictMode = REACT_STRICT_MODE_TYPE;\n exports.Suspense = REACT_SUSPENSE_TYPE;\n exports.SuspenseList = REACT_SUSPENSE_LIST_TYPE;\n exports.isContextConsumer = function (object) {\n return typeOf(object) === REACT_CONSUMER_TYPE;\n };\n exports.isContextProvider = function (object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n };\n exports.isElement = function (object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n };\n exports.isForwardRef = function (object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n };\n exports.isFragment = function (object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n };\n exports.isLazy = function (object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n };\n exports.isMemo = function (object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n };\n exports.isPortal = function (object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n };\n exports.isProfiler = function (object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n };\n exports.isStrictMode = function (object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n };\n exports.isSuspense = function (object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n };\n exports.isSuspenseList = function (object) {\n return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n };\n exports.isValidElementType = function (type) {\n return \"string\" === typeof type ||\n \"function\" === typeof type ||\n type === REACT_FRAGMENT_TYPE ||\n type === REACT_PROFILER_TYPE ||\n type === REACT_STRICT_MODE_TYPE ||\n type === REACT_SUSPENSE_TYPE ||\n type === REACT_SUSPENSE_LIST_TYPE ||\n type === REACT_OFFSCREEN_TYPE ||\n (\"object\" === typeof type &&\n null !== type &&\n (type.$$typeof === REACT_LAZY_TYPE ||\n type.$$typeof === REACT_MEMO_TYPE ||\n type.$$typeof === REACT_CONTEXT_TYPE ||\n type.$$typeof === REACT_CONSUMER_TYPE ||\n type.$$typeof === REACT_FORWARD_REF_TYPE ||\n type.$$typeof === REACT_CLIENT_REFERENCE ||\n void 0 !== type.getModuleId))\n ? !0\n : !1;\n };\n exports.typeOf = typeOf;\n })();\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n", "\"use strict\";\n/*!\n * inflection\n * Copyright(c) 2011 Ben Lin <ben@dreamerslab.com>\n * MIT Licensed\n *\n * @fileoverview\n * A port of inflection-js to node.js module.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.pluralize = pluralize;\nexports.singularize = singularize;\nexports.inflect = inflect;\nexports.camelize = camelize;\nexports.underscore = underscore;\nexports.humanize = humanize;\nexports.capitalize = capitalize;\nexports.dasherize = dasherize;\nexports.titleize = titleize;\nexports.demodulize = demodulize;\nexports.tableize = tableize;\nexports.classify = classify;\nexports.foreignKey = foreignKey;\nexports.ordinalize = ordinalize;\nexports.transform = transform;\n/**\n * @description This is a list of nouns that use the same form for both singular and plural.\n * This list should remain entirely in lower case to correctly match Strings.\n */\nconst uncountableWords = [\n // 'access',\n 'accommodation',\n 'adulthood',\n 'advertising',\n 'advice',\n 'aggression',\n 'aid',\n 'air',\n 'aircraft',\n 'alcohol',\n 'anger',\n 'applause',\n 'arithmetic',\n // 'art',\n 'assistance',\n 'athletics',\n // 'attention',\n 'bacon',\n 'baggage',\n // 'ballet',\n // 'beauty',\n 'beef',\n // 'beer',\n // 'behavior',\n 'biology',\n // 'billiards',\n 'blood',\n 'botany',\n // 'bowels',\n 'bread',\n // 'business',\n 'butter',\n 'carbon',\n 'cardboard',\n 'cash',\n 'chalk',\n 'chaos',\n 'chess',\n 'crossroads',\n 'countryside',\n // 'damage',\n 'dancing',\n // 'danger',\n 'deer',\n // 'delight',\n // 'dessert',\n 'dignity',\n 'dirt',\n // 'distribution',\n 'dust',\n 'economics',\n 'education',\n 'electricity',\n // 'employment',\n // 'energy',\n 'engineering',\n 'enjoyment',\n // 'entertainment',\n 'envy',\n 'equipment',\n 'ethics',\n 'evidence',\n 'evolution',\n // 'failure',\n // 'faith',\n 'fame',\n 'fiction',\n // 'fish',\n 'flour',\n 'flu',\n 'food',\n // 'freedom',\n // 'fruit',\n 'fuel',\n 'fun',\n // 'funeral',\n 'furniture',\n 'gallows',\n 'garbage',\n 'garlic',\n // 'gas',\n 'genetics',\n // 'glass',\n 'gold',\n 'golf',\n 'gossip',\n // 'grass',\n 'gratitude',\n 'grief',\n // 'ground',\n 'guilt',\n 'gymnastics',\n // 'hair',\n 'happiness',\n 'hardware',\n 'harm',\n 'hate',\n 'hatred',\n 'health',\n 'heat',\n // 'height',\n 'help',\n 'homework',\n 'honesty',\n 'honey',\n 'hospitality',\n 'housework',\n 'humour',\n 'hunger',\n 'hydrogen',\n 'ice',\n 'importance',\n 'inflation',\n 'information',\n // 'injustice',\n 'innocence',\n // 'intelligence',\n 'iron',\n 'irony',\n 'jam',\n // 'jealousy',\n // 'jelly',\n 'jewelry',\n // 'joy',\n 'judo',\n // 'juice',\n // 'justice',\n 'karate',\n // 'kindness',\n 'knowledge',\n // 'labour',\n 'lack',\n // 'land',\n 'laughter',\n 'lava',\n 'leather',\n 'leisure',\n 'lightning',\n 'linguine',\n 'linguini',\n 'linguistics',\n 'literature',\n 'litter',\n 'livestock',\n 'logic',\n 'loneliness',\n // 'love',\n 'luck',\n 'luggage',\n 'macaroni',\n 'machinery',\n 'magic',\n // 'mail',\n 'management',\n 'mankind',\n 'marble',\n 'mathematics',\n 'mayonnaise',\n 'measles',\n // 'meat',\n // 'metal',\n 'methane',\n 'milk',\n 'minus',\n 'money',\n // 'moose',\n 'mud',\n 'music',\n 'mumps',\n 'nature',\n 'news',\n 'nitrogen',\n 'nonsense',\n 'nurture',\n 'nutrition',\n 'obedience',\n 'obesity',\n // 'oil',\n 'oxygen',\n // 'paper',\n // 'passion',\n 'pasta',\n 'patience',\n // 'permission',\n 'physics',\n 'poetry',\n 'pollution',\n 'poverty',\n // 'power',\n 'pride',\n // 'production',\n // 'progress',\n // 'pronunciation',\n 'psychology',\n 'publicity',\n 'punctuation',\n // 'quality',\n // 'quantity',\n 'quartz',\n 'racism',\n // 'rain',\n // 'recreation',\n 'relaxation',\n 'reliability',\n 'research',\n 'respect',\n 'revenge',\n 'rice',\n 'rubbish',\n 'rum',\n 'safety',\n // 'salad',\n // 'salt',\n // 'sand',\n // 'satire',\n 'scenery',\n 'seafood',\n 'seaside',\n 'series',\n 'shame',\n 'sheep',\n 'shopping',\n // 'silence',\n 'sleep',\n // 'slang'\n 'smoke',\n 'smoking',\n 'snow',\n 'soap',\n 'software',\n 'soil',\n // 'sorrow',\n // 'soup',\n 'spaghetti',\n // 'speed',\n 'species',\n // 'spelling',\n // 'sport',\n 'steam',\n // 'strength',\n 'stuff',\n 'stupidity',\n // 'success',\n // 'sugar',\n 'sunshine',\n 'symmetry',\n // 'tea',\n 'tennis',\n 'thirst',\n 'thunder',\n 'timber',\n // 'time',\n // 'toast',\n // 'tolerance',\n // 'trade',\n 'traffic',\n 'transportation',\n // 'travel',\n 'trust',\n // 'understanding',\n 'underwear',\n 'unemployment',\n 'unity',\n // 'usage',\n 'validity',\n 'veal',\n 'vegetation',\n 'vegetarianism',\n 'vengeance',\n 'violence',\n // 'vision',\n 'vitality',\n 'warmth',\n // 'water',\n 'wealth',\n 'weather',\n // 'weight',\n 'welfare',\n 'wheat',\n // 'whiskey',\n // 'width',\n 'wildlife',\n // 'wine',\n 'wisdom',\n // 'wood',\n // 'wool',\n // 'work',\n // 'yeast',\n 'yoga',\n 'zinc',\n 'zoology',\n];\n/**\n * @description These rules translate from the singular form of a noun to its plural form.\n */\nconst regex = {\n plural: {\n men: new RegExp('^(m|wom)en$', 'gi'),\n people: new RegExp('(pe)ople$', 'gi'),\n children: new RegExp('(child)ren$', 'gi'),\n tia: new RegExp('([ti])a$', 'gi'),\n analyses: new RegExp('((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$', 'gi'),\n databases: new RegExp('(database)s$', 'gi'),\n drives: new RegExp('(drive)s$', 'gi'),\n hives: new RegExp('(hi|ti)ves$', 'gi'),\n curves: new RegExp('(curve)s$', 'gi'),\n lrves: new RegExp('([lr])ves$', 'gi'),\n aves: new RegExp('([a])ves$', 'gi'),\n foves: new RegExp('([^fo])ves$', 'gi'),\n movies: new RegExp('(m)ovies$', 'gi'),\n aeiouyies: new RegExp('([^aeiouy]|qu)ies$', 'gi'),\n series: new RegExp('(s)eries$', 'gi'),\n xes: new RegExp('(x|ch|ss|sh)es$', 'gi'),\n mice: new RegExp('([m|l])ice$', 'gi'),\n buses: new RegExp('(bus)es$', 'gi'),\n oes: new RegExp('(o)es$', 'gi'),\n shoes: new RegExp('(shoe)s$', 'gi'),\n crises: new RegExp('(cris|ax|test)es$', 'gi'),\n octopuses: new RegExp('(octop|vir)uses$', 'gi'),\n aliases: new RegExp('(alias|canvas|status|campus)es$', 'gi'),\n summonses: new RegExp('^(summons|bonus)es$', 'gi'),\n oxen: new RegExp('^(ox)en', 'gi'),\n matrices: new RegExp('(matr)ices$', 'gi'),\n vertices: new RegExp('(vert|ind)ices$', 'gi'),\n feet: new RegExp('^feet$', 'gi'),\n teeth: new RegExp('^teeth$', 'gi'),\n geese: new RegExp('^geese$', 'gi'),\n quizzes: new RegExp('(quiz)zes$', 'gi'),\n whereases: new RegExp('^(whereas)es$', 'gi'),\n criteria: new RegExp('^(criteri)a$', 'gi'),\n genera: new RegExp('^genera$', 'gi'),\n ss: new RegExp('ss$', 'gi'),\n s: new RegExp('s$', 'gi'),\n },\n singular: {\n man: new RegExp('^(m|wom)an$', 'gi'),\n person: new RegExp('(pe)rson$', 'gi'),\n child: new RegExp('(child)$', 'gi'),\n drive: new RegExp('(drive)$', 'gi'),\n ox: new RegExp('^(ox)$', 'gi'),\n axis: new RegExp('(ax|test)is$', 'gi'),\n octopus: new RegExp('(octop|vir)us$', 'gi'),\n alias: new RegExp('(alias|status|canvas|campus)$', 'gi'),\n summons: new RegExp('^(summons|bonus)$', 'gi'),\n bus: new RegExp('(bu)s$', 'gi'),\n buffalo: new RegExp('(buffal|tomat|potat)o$', 'gi'),\n tium: new RegExp('([ti])um$', 'gi'),\n sis: new RegExp('sis$', 'gi'),\n ffe: new RegExp('(?:([^f])fe|([lr])f)$', 'gi'),\n focus: new RegExp('^(focus)$', 'gi'),\n hive: new RegExp('(hi|ti)ve$', 'gi'),\n aeiouyy: new RegExp('([^aeiouy]|qu)y$', 'gi'),\n x: new RegExp('(x|ch|ss|sh)$', 'gi'),\n matrix: new RegExp('(matr)ix$', 'gi'),\n vertex: new RegExp('(vert|ind)ex$', 'gi'),\n mouse: new RegExp('([m|l])ouse$', 'gi'),\n foot: new RegExp('^foot$', 'gi'),\n tooth: new RegExp('^tooth$', 'gi'),\n goose: new RegExp('^goose$', 'gi'),\n quiz: new RegExp('(quiz)$', 'gi'),\n whereas: new RegExp('^(whereas)$', 'gi'),\n criterion: new RegExp('^(criteri)on$', 'gi'),\n genus: new RegExp('^genus$', 'gi'),\n s: new RegExp('s$', 'gi'),\n common: new RegExp('$', 'gi'),\n },\n};\nconst pluralRules = [\n // do not replace if its already a plural word\n [regex.plural.men],\n [regex.plural.people],\n [regex.plural.children],\n [regex.plural.tia],\n [regex.plural.analyses],\n [regex.plural.databases],\n [regex.plural.drives],\n [regex.plural.hives],\n [regex.plural.curves],\n [regex.plural.lrves],\n [regex.plural.foves],\n [regex.plural.aeiouyies],\n [regex.plural.series],\n [regex.plural.movies],\n [regex.plural.xes],\n [regex.plural.mice],\n [regex.plural.buses],\n [regex.plural.oes],\n [regex.plural.shoes],\n [regex.plural.crises],\n [regex.plural.octopuses],\n [regex.plural.aliases],\n [regex.plural.summonses],\n [regex.plural.oxen],\n [regex.plural.matrices],\n [regex.plural.feet],\n [regex.plural.teeth],\n [regex.plural.geese],\n [regex.plural.quizzes],\n [regex.plural.whereases],\n [regex.plural.criteria],\n [regex.plural.genera],\n // original rule\n [regex.singular.man, '$1en'],\n [regex.singular.person, '$1ople'],\n [regex.singular.child, '$1ren'],\n [regex.singular.drive, '$1s'],\n [regex.singular.ox, '$1en'],\n [regex.singular.axis, '$1es'],\n [regex.singular.octopus, '$1uses'],\n [regex.singular.alias, '$1es'],\n [regex.singular.summons, '$1es'],\n [regex.singular.bus, '$1ses'],\n [regex.singular.buffalo, '$1oes'],\n [regex.singular.tium, '$1a'],\n [regex.singular.sis, 'ses'],\n [regex.singular.ffe, '$1$2ves'],\n [regex.singular.focus, '$1es'],\n [regex.singular.hive, '$1ves'],\n [regex.singular.aeiouyy, '$1ies'],\n [regex.singular.matrix, '$1ices'],\n [regex.singular.vertex, '$1ices'],\n [regex.singular.x, '$1es'],\n [regex.singular.mouse, '$1ice'],\n [regex.singular.foot, 'feet'],\n [regex.singular.tooth, 'teeth'],\n [regex.singular.goose, 'geese'],\n [regex.singular.quiz, '$1zes'],\n [regex.singular.whereas, '$1es'],\n [regex.singular.criterion, '$1a'],\n [regex.singular.genus, 'genera'],\n [regex.singular.s, 's'],\n [regex.singular.common, 's'],\n];\n/**\n * @description These rules translate from the plural form of a noun to its singular form.\n */\nconst singularRules = [\n // do not replace if its already a singular word\n [regex.singular.man],\n [regex.singular.person],\n [regex.singular.child],\n [regex.singular.drive],\n [regex.singular.ox],\n [regex.singular.axis],\n [regex.singular.octopus],\n [regex.singular.alias],\n [regex.singular.summons],\n [regex.singular.bus],\n [regex.singular.buffalo],\n [regex.singular.tium],\n [regex.singular.sis],\n [regex.singular.ffe],\n [regex.singular.focus],\n [regex.singular.hive],\n [regex.singular.aeiouyy],\n [regex.singular.x],\n [regex.singular.matrix],\n [regex.singular.mouse],\n [regex.singular.foot],\n [regex.singular.tooth],\n [regex.singular.goose],\n [regex.singular.quiz],\n [regex.singular.whereas],\n [regex.singular.criterion],\n [regex.singular.genus],\n // original rule\n [regex.plural.men, '$1an'],\n [regex.plural.people, '$1rson'],\n [regex.plural.children, '$1'],\n [regex.plural.databases, '$1'],\n [regex.plural.drives, '$1'],\n [regex.plural.genera, 'genus'],\n [regex.plural.criteria, '$1on'],\n [regex.plural.tia, '$1um'],\n [regex.plural.analyses, '$1$2sis'],\n [regex.plural.hives, '$1ve'],\n [regex.plural.curves, '$1'],\n [regex.plural.lrves, '$1f'],\n [regex.plural.aves, '$1ve'],\n [regex.plural.foves, '$1fe'],\n [regex.plural.movies, '$1ovie'],\n [regex.plural.aeiouyies, '$1y'],\n [regex.plural.series, '$1eries'],\n [regex.plural.xes, '$1'],\n [regex.plural.mice, '$1ouse'],\n [regex.plural.buses, '$1'],\n [regex.plural.oes, '$1'],\n [regex.plural.shoes, '$1'],\n [regex.plural.crises, '$1is'],\n [regex.plural.octopuses, '$1us'],\n [regex.plural.aliases, '$1'],\n [regex.plural.summonses, '$1'],\n [regex.plural.oxen, '$1'],\n [regex.plural.matrices, '$1ix'],\n [regex.plural.vertices, '$1ex'],\n [regex.plural.feet, 'foot'],\n [regex.plural.teeth, 'tooth'],\n [regex.plural.geese, 'goose'],\n [regex.plural.quizzes, '$1'],\n [regex.plural.whereases, '$1'],\n [regex.plural.ss, 'ss'],\n [regex.plural.s, ''],\n];\n/**\n * @description This is a list of words that should not be capitalized for title case.\n */\nconst nonTitlecasedWords = [\n 'and',\n 'or',\n 'nor',\n 'a',\n 'an',\n 'the',\n 'so',\n 'but',\n 'to',\n 'of',\n 'at',\n 'by',\n 'from',\n 'into',\n 'on',\n 'onto',\n 'off',\n 'out',\n 'in',\n 'over',\n 'with',\n 'for',\n];\n/**\n * @description These are regular expressions used for converting between String formats.\n */\nconst idSuffix = new RegExp('(_ids|_id)$', 'g');\nconst underbar = new RegExp('_', 'g');\nconst spaceOrUnderbar = new RegExp('[ _]', 'g');\nconst uppercase = new RegExp('([A-Z])', 'g');\nconst underbarPrefix = new RegExp('^_');\n/**\n * A helper method that applies rules based replacement to a String.\n * @param str String to modify and return based on the passed rules.\n * @param rules Regexp to match paired with String to use for replacement\n * @param skip Strings to skip if they match\n * @param override String to return as though this method succeeded (used to conform to APIs)\n * @returns Return passed String modified by passed rules.\n * @example\n *\n * applyRules( 'cows', singular_rules ); // === 'cow'\n */\nfunction applyRules(str, rules, skip, override) {\n if (override) {\n return override;\n }\n else {\n if (skip.includes(str.toLocaleLowerCase())) {\n return str;\n }\n for (const rule of rules) {\n if (str.match(rule[0])) {\n if (rule[1] !== undefined) {\n return str.replace(rule[0], rule[1]);\n }\n return str;\n }\n }\n }\n return str;\n}\n/**\n * This function adds pluralization support to every String object.\n * @param str The subject string.\n * @param plural Overrides normal output with said String.(optional)\n * @returns Singular English language nouns are returned in plural form.\n * @example\n *\n * const inflection = require( 'inflection' );\n *\n * inflection.pluralize( 'person' ); // === 'people'\n * inflection.pluralize( 'octopus' ); // === 'octopuses'\n * inflection.pluralize( 'Hat' ); // === 'Hats'\n * inflection.pluralize( 'person', 'guys' ); // === 'guys'\n */\nfunction pluralize(str, plural) {\n return applyRules(str, pluralRules, uncountableWords, plural);\n}\n/**\n * This function adds singularization support to every String object.\n * @param str The subject string.\n * @param singular Overrides normal output with said String.(optional)\n * @returns Plural English language nouns are returned in singular form.\n * @example\n *\n * const inflection = require( 'inflection' );\n *\n * inflection.singularize( 'people' ); // === 'person'\n * inflection.singularize( 'octopuses' ); // === 'octopus'\n * inflection.singularize( 'Hats' ); // === 'Hat'\n * inflection.singularize( 'guys', 'person' ); // === 'person'\n */\nfunction singularize(str, singular) {\n return applyRules(str, singularRules, uncountableWords, singular);\n}\n/**\n * This function will pluralize or singularlize a String appropriately based on a number value\n * @param str The subject string.\n * @param count The number to base pluralization off of.\n * @param singular Overrides normal output with said String.(optional)\n * @param plural Overrides normal output with said String.(optional)\n * @returns English language nouns are returned in the plural or singular form based on the count.\n * @example\n *\n * const inflection = require( 'inflection' );\n *\n * inflection.inflect( 'people' 1 ); // === 'person'\n * inflection.inflect( 'octopuses' 1 ); // === 'octopus'\n * inflection.inflect( 'Hats' 1 ); // === 'Hat'\n * inflection.inflect( 'guys', 1 , 'person' ); // === 'person'\n * inflection.inflect( 'inches', 1.5 ); // === 'inches'\n * inflection.inflect( 'person', 2 ); // === 'people'\n * inflection.inflect( 'octopus', 2 ); // === 'octopuses'\n * inflection.inflect( 'Hat', 2 ); // === 'Hats'\n * inflection.inflect( 'person', 2, null, 'guys' ); // === 'guys'\n */\nfunction inflect(str, count, singular, plural) {\n if (isNaN(count))\n return str;\n if (count === 1) {\n return applyRules(str, singularRules, uncountableWords, singular);\n }\n else {\n return applyRules(str, pluralRules, uncountableWords, plural);\n }\n}\n/**\n * This function adds camelization support to every String object.\n * @param str The subject string.\n * @param lowFirstLetter Default is to capitalize the first letter of the results.(optional)\n * Passing true will lowercase it.\n * @returns Lower case underscored words will be returned in camel case.\n * additionally '/' is translated to '::'\n * @example\n *\n * const inflection = require( 'inflection' );\n *\n * inflection.camelize( 'message_properties' ); // === 'MessageProperties'\n * inflection.camelize( 'message_properties', true ); // === 'messageProperties'\n */\nfunction camelize(str, lowFirstLetter) {\n const strPath = str.split('/');\n const j = strPath.length;\n let strArr, k, l, first;\n for (let i = 0; i < j; i++) {\n strArr = strPath[i].split('_');\n k = 0;\n l = strArr.length;\n for (; k < l; k++) {\n if (k !== 0) {\n strArr[k] = strArr[k].toLowerCase();\n }\n first = strArr[k].charAt(0);\n first =\n lowFirstLetter && i === 0 && k === 0\n ? first.toLowerCase()\n : first.toUpperCase();\n strArr[k] = first + strArr[k].substring(1);\n }\n strPath[i] = strArr.join('');\n }\n return strPath.join('::');\n}\n/**\n * This function adds underscore support to every String object.\n * @param str The subject string.\n * @param allUpperCase Default is to lowercase and add underscore prefix.(optional)\n * Passing true will return as entered.\n * @returns Camel cased words are returned as lower cased and underscored.\n * additionally '::' is translated to '/'.\n * @example\n *\n * const inflection = require( 'inflection' );\n *\n * inflection.underscore( 'MessageProperties' ); // === 'message_properties'\n * inflection.underscore( 'messageProperties' ); // === 'message_properties'\n * inflection.underscore( 'MP', true ); // === 'MP'\n */\nfunction underscore(str, allUpperCase) {\n if (allUpperCase && str === str.toUpperCase())\n return str;\n const strPath = str.split('::');\n const j = strPath.length;\n for (let i = 0; i < j; i++) {\n strPath[i] = strPath[i].replace(uppercase, '_$1');\n strPath[i] = strPath[i].replace(underbarPrefix, '');\n }\n return strPath.join('/').toLowerCase();\n}\n/**\n * This function adds humanize support to every String object.\n * @param str The subject string.\n * @param lowFirstLetter Default is to capitalize the first letter of the results.(optional)\n * Passing true will lowercase it.\n * @returns Lower case underscored words will be returned in humanized form.\n * @example\n *\n * const inflection = require( 'inflection' );\n *\n * inflection.humanize( 'message_properties' ); // === 'Message properties'\n * inflection.humanize( 'message_properties', true ); // === 'message properties'\n */\nfunction humanize(str, lowFirstLetter) {\n str = str.toLowerCase();\n str = str.replace(idSuffix, '');\n str = str.replace(underbar, ' ');\n if (!lowFirstLetter) {\n str = capitalize(str);\n }\n return str;\n}\n/**\n * This function adds capitalization support to every String object.\n * @param str The subject string.\n * @returns All characters will be lower case and the first will be upper.\n * @example\n *\n * const inflection = require( 'inflection' );\n *\n * inflection.capitalize( 'message_properties' ); // === 'Message_properties'\n * inflection.capitalize( 'message properties', true ); // === 'Message properties'\n */\nfunction capitalize(str) {\n str = str.toLowerCase();\n return str.substring(0, 1).toUpperCase() + str.substring(1);\n}\n/**\n * This function replaces underscores with dashes in the string.\n * @param str The subject string.\n * @returns Replaces all spaces or underscores with dashes.\n * @example\n *\n * const inflection = require( 'inflection' );\n *\n * inflection.dasherize( 'message_properties' ); // === 'message-properties'\n * inflection.dasherize( 'Message Properties' ); // === 'Message-Properties'\n */\nfunction dasherize(str) {\n return str.replace(spaceOrUnderbar, '-');\n}\n/**\n * This function adds titleize support to every String object.\n * @param str The subject string.\n * @returns Capitalizes words as you would for a book title.\n * @example\n *\n * const inflection = require( 'inflection' );\n *\n * inflection.titleize( 'message_properties' ); // === 'Message Properties'\n * inflection.titleize( 'message properties to keep' ); // === 'Message Properties to Keep'\n */\nfunction titleize(str) {\n str = str.toLowerCase().replace(underbar, ' ');\n const strArr = str.split(' ');\n const j = strArr.length;\n let d, l;\n for (let i = 0; i < j; i++) {\n d = strArr[i].split('-');\n l = d.length;\n for (let k = 0; k < l; k++) {\n if (nonTitlecasedWords.indexOf(d[k].toLowerCase()) < 0) {\n d[k] = capitalize(d[k]);\n }\n }\n strArr[i] = d.join('-');\n }\n str = strArr.join(' ');\n str = str.substring(0, 1).toUpperCase() + str.substring(1);\n return str;\n}\n/**\n * This function adds demodulize support to every String object.\n * @param str The subject string.\n * @returns Removes module names leaving only class names.(Ruby style)\n * @example\n *\n * const inflection = require( 'inflection' );\n *\n * inflection.demodulize( 'Message::Bus::Properties' ); // === 'Properties'\n */\nfunction demodulize(str) {\n const strArr = str.split('::');\n return strArr[strArr.length - 1];\n}\n/**\n * This function adds tableize support to every String object.\n * @param str The subject string.\n * @returns Return camel cased words into their underscored plural form.\n * @example\n *\n * const inflection = require( 'inflection' );\n *\n * inflection.tableize( 'MessageBusProperty' ); // === 'message_bus_properties'\n */\nfunction tableize(str) {\n str = underscore(str);\n str = pluralize(str);\n return str;\n}\n/**\n * This function adds classification support to every String object.\n * @param str The subject string.\n * @returns Underscored plural nouns become the camel cased singular form.\n * @example\n *\n * const inflection = require( 'inflection' );\n *\n * inflection.classify( 'message_bus_properties' ); // === 'MessageBusProperty'\n */\nfunction classify(str) {\n str = camelize(str);\n str = singularize(str);\n return str;\n}\n/**\n * This function adds foreign key support to every String object.\n * @param str The subject string.\n * @param dropIdUbar Default is to seperate id with an underbar at the end of the class name,\n you can pass true to skip it.(optional)\n * @returns Underscored plural nouns become the camel cased singular form.\n * @example\n *\n * const inflection = require( 'inflection' );\n *\n * inflection.foreign_key( 'MessageBusProperty' ); // === 'message_bus_property_id'\n * inflection.foreign_key( 'MessageBusProperty', true ); // === 'message_bus_propertyid'\n */\nfunction foreignKey(str, dropIdUbar) {\n str = demodulize(str);\n str = underscore(str) + (dropIdUbar ? '' : '_') + 'id';\n return str;\n}\n/**\n * This function adds ordinalize support to every String object.\n * @param str The subject string.\n * @returns Return all found numbers their sequence like '22nd'.\n * @example\n *\n * const inflection = require( 'inflection' );\n *\n * inflection.ordinalize( 'the 1 pitch' ); // === 'the 1st pitch'\n */\nfunction ordinalize(str) {\n const strArr = str.split(' ');\n const j = strArr.length;\n for (let i = 0; i < j; i++) {\n const k = parseInt(strArr[i], 10);\n if (!isNaN(k)) {\n const ltd = strArr[i].substring(strArr[i].length - 2);\n const ld = strArr[i].substring(strArr[i].length - 1);\n let suf = 'th';\n if (ltd != '11' && ltd != '12' && ltd != '13') {\n if (ld === '1') {\n suf = 'st';\n }\n else if (ld === '2') {\n suf = 'nd';\n }\n else if (ld === '3') {\n suf = 'rd';\n }\n }\n strArr[i] += suf;\n }\n }\n return strArr.join(' ');\n}\nconst transformFunctions = {\n pluralize,\n singularize,\n camelize,\n underscore,\n humanize,\n capitalize,\n dasherize,\n titleize,\n demodulize,\n tableize,\n classify,\n foreignKey,\n ordinalize,\n};\n/**\n * This function performs multiple inflection methods on a string\n * @param str The subject string.\n * @param arr An array of inflection methods.\n * @returns\n * @example\n *\n * const inflection = require( 'inflection' );\n *\n * inflection.transform( 'all job', [ 'pluralize', 'capitalize', 'dasherize' ]); // === 'All-jobs'\n */\nfunction transform(str, arr) {\n const j = arr.length;\n for (let i = 0; i < j; i++) {\n const method = arr[i];\n const methodFn = transformFunctions[method];\n if (methodFn) {\n str = methodFn(str);\n }\n }\n return str;\n}\n", "import { useContext } from 'react';\n\nimport { AuthProvider } from '../types';\nimport { AuthContext } from './AuthContext';\n\nexport const defaultAuthParams = {\n loginUrl: '/login',\n afterLoginUrl: '/',\n};\n\n/**\n * Get the authProvider stored in the context\n */\nconst useAuthProvider = <\n AuthProviderType extends AuthProvider = AuthProvider,\n>(): AuthProviderType | undefined =>\n useContext(AuthContext) as AuthProviderType | undefined;\n\nexport default useAuthProvider;\n", "import { createContext } from 'react';\n\nimport { AuthProvider } from '../types';\n\nexport const AuthContext = createContext<AuthProvider | undefined>(undefined);\n\nAuthContext.displayName = 'AuthContext';\n", "import { useEffect, useMemo } from 'react';\nimport {\n QueryObserverResult,\n useQuery,\n UseQueryOptions,\n} from '@tanstack/react-query';\nimport useAuthProvider, { defaultAuthParams } from './useAuthProvider';\nimport useLogout from './useLogout';\nimport { removeDoubleSlashes, useBasename } from '../routing';\nimport { useNotify } from '../notification';\nimport { useEvent } from '../util';\n\nconst emptyParams = {};\n\n/**\n * Hook for getting the authentication status\n *\n * Calls the authProvider.checkAuth() method asynchronously.\n *\n * The return value updates according to the authProvider request state:\n *\n * - isPending: true just after mount, while the authProvider is being called. false once the authProvider has answered.\n * - authenticated: true while loading. then true or false depending on the authProvider response.\n *\n * To avoid rendering a component and force waiting for the authProvider response, use the useAuthState() hook\n * instead of the useAuthenticated() hook.\n *\n * You can render different content depending on the authenticated status.\n *\n * @see useAuthenticated()\n *\n * @param {Object} params Any params you want to pass to the authProvider\n *\n * @param {Boolean} logoutOnFailure: Optional. Whether the user should be logged out if the authProvider fails to authenticate them. False by default.\n *\n * @returns The current auth check state. Destructure as { authenticated, error, isPending }.\n *\n * @example\n * import { useAuthState, Loading } from 'react-admin';\n *\n * const MyPage = () => {\n * const { isPending, authenticated } = useAuthState();\n * if (isPending) {\n * return <Loading />;\n * }\n * if (authenticated) {\n * return <AuthenticatedContent />;\n * }\n * return <AnonymousContent />;\n * };\n */\nconst useAuthState = <ErrorType = Error>(\n params: any = emptyParams,\n logoutOnFailure: boolean = false,\n queryOptions: UseAuthStateOptions<ErrorType> = emptyParams\n): UseAuthStateResult<ErrorType> => {\n const authProvider = useAuthProvider();\n const logout = useLogout();\n const basename = useBasename();\n const notify = useNotify();\n const { onSuccess, onError, onSettled, ...options } = queryOptions;\n\n const queryResult = useQuery<boolean, any>({\n queryKey: ['auth', 'checkAuth', params],\n queryFn: ({ signal }) => {\n // The authProvider is optional in react-admin\n if (!authProvider) {\n return true;\n }\n return authProvider\n .checkAuth({ ...params, signal })\n .then(() => true)\n .catch(error => {\n // This is necessary because react-query requires the error to be defined\n if (error != null) {\n throw error;\n }\n\n throw new Error();\n });\n },\n retry: false,\n ...options,\n });\n\n const onSuccessEvent = useEvent(onSuccess ?? noop);\n const onSettledEvent = useEvent(onSettled ?? noop);\n const onErrorEvent = useEvent(\n onError ??\n ((error: any) => {\n if (!logoutOnFailure) return;\n const loginUrl = removeDoubleSlashes(\n `${basename}/${defaultAuthParams.loginUrl}`\n );\n logout(\n {},\n error && error.redirectTo != null\n ? error.redirectTo\n : loginUrl\n );\n const shouldSkipNotify = error && error.message === false;\n !shouldSkipNotify &&\n notify(getErrorMessage(error, 'ra.auth.auth_check_error'), {\n type: 'error',\n });\n })\n );\n\n useEffect(() => {\n if (queryResult.data === undefined || queryResult.isFetching) return;\n if (queryOptions.enabled === false) return;\n onSuccessEvent(queryResult.data);\n }, [\n onSuccessEvent,\n queryResult.data,\n queryResult.isFetching,\n queryOptions.enabled,\n ]);\n\n useEffect(() => {\n if (queryResult.error == null || queryResult.isFetching) return;\n if (queryOptions.enabled === false) return;\n onErrorEvent(queryResult.error);\n }, [\n onErrorEvent,\n queryResult.error,\n queryResult.isFetching,\n queryOptions.enabled,\n ]);\n\n useEffect(() => {\n if (queryResult.status === 'pending' || queryResult.isFetching) return;\n if (queryOptions.enabled === false) return;\n onSettledEvent(queryResult.data, queryResult.error);\n }, [\n onSettledEvent,\n queryResult.data,\n queryResult.error,\n queryResult.status,\n queryResult.isFetching,\n queryOptions.enabled,\n ]);\n\n const result = useMemo(() => {\n return {\n ...queryResult,\n authenticated: queryResult.error ? false : queryResult.data,\n };\n }, [queryResult]);\n\n return authProvider != null\n ? result\n : (noAuthProviderQueryResult as UseAuthStateResult<ErrorType>);\n};\n\ntype UseAuthStateOptions<ErrorType = Error> = Omit<\n UseQueryOptions<boolean, ErrorType>,\n 'queryKey' | 'queryFn'\n> & {\n onSuccess?: (data: boolean) => void;\n onError?: (err: ErrorType) => void;\n onSettled?: (data?: boolean, error?: Error) => void;\n};\n\nexport type UseAuthStateResult<ErrorType = Error> = QueryObserverResult<\n boolean,\n ErrorType\n> & {\n authenticated?: QueryObserverResult<boolean, ErrorType>['data'];\n};\n\nexport default useAuthState;\n\nconst getErrorMessage = (error, defaultMessage) =>\n typeof error === 'string'\n ? error\n : typeof error === 'undefined' || !error.message\n ? defaultMessage\n : error.message;\n\nconst noop = () => {};\n\nconst noAuthProviderQueryResult = {\n authenticated: true,\n data: true,\n dataUpdatedAt: 0,\n error: null,\n errorUpdatedAt: 0,\n errorUpdateCount: 0,\n failureCount: 0,\n failureReason: null,\n fetchStatus: 'idle',\n isError: false,\n isInitialLoading: false,\n isLoading: false,\n isLoadingError: false,\n isFetched: true,\n isFetchedAfterMount: true,\n isFetching: false,\n isPaused: false,\n isPlaceholderData: false,\n isPending: false,\n isRefetchError: false,\n isRefetching: false,\n isStale: false,\n isSuccess: true,\n status: 'success',\n refetch: () => Promise.resolve(noAuthProviderQueryResult),\n};\n", "export class Subscribable<TListener extends Function> {\n protected listeners = new Set<TListener>()\n\n constructor() {\n this.subscribe = this.subscribe.bind(this)\n }\n\n subscribe(listener: TListener): () => void {\n this.listeners.add(listener)\n\n this.onSubscribe()\n\n return () => {\n this.listeners.delete(listener)\n this.onUnsubscribe()\n }\n }\n\n hasListeners(): boolean {\n return this.listeners.size > 0\n }\n\n protected onSubscribe(): void {\n // Do nothing\n }\n\n protected onUnsubscribe(): void {\n // Do nothing\n }\n}\n", "import type {\n DefaultError,\n Enabled,\n FetchStatus,\n MutationKey,\n MutationStatus,\n QueryFunction,\n QueryKey,\n QueryOptions,\n StaleTime,\n} from './types'\nimport type { Mutation } from './mutation'\nimport type { FetchOptions, Query } from './query'\n\n// TYPES\n\nexport interface QueryFilters<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> {\n /**\n * Filter to active queries, inactive queries or all queries\n */\n type?: QueryTypeFilter\n /**\n * Match query key exactly\n */\n exact?: boolean\n /**\n * Include queries matching this predicate function\n */\n predicate?: (query: Query<TQueryFnData, TError, TData, TQueryKey>) => boolean\n /**\n * Include queries matching this query key\n */\n queryKey?: TQueryKey\n /**\n * Include or exclude stale queries\n */\n stale?: boolean\n /**\n * Include queries matching their fetchStatus\n */\n fetchStatus?: FetchStatus\n}\n\nexport interface MutationFilters<\n TData = unknown,\n TError = DefaultError,\n TVariables = unknown,\n TContext = unknown,\n> {\n /**\n * Match mutation key exactly\n */\n exact?: boolean\n /**\n * Include mutations matching this predicate function\n */\n predicate?: (\n mutation: Mutation<TData, TError, TVariables, TContext>,\n ) => boolean\n /**\n * Include mutations matching this mutation key\n */\n mutationKey?: MutationKey\n /**\n * Filter by mutation status\n */\n status?: MutationStatus\n}\n\nexport type Updater<TInput, TOutput> = TOutput | ((input: TInput) => TOutput)\n\nexport type QueryTypeFilter = 'all' | 'active' | 'inactive'\n\n// UTILS\n\nexport const isServer = typeof window === 'undefined' || 'Deno' in globalThis\n\nexport function noop(): void\nexport function noop(): undefined\nexport function noop() {}\n\nexport function functionalUpdate<TInput, TOutput>(\n updater: Updater<TInput, TOutput>,\n input: TInput,\n): TOutput {\n return typeof updater === 'function'\n ? (updater as (_: TInput) => TOutput)(input)\n : updater\n}\n\nexport function isValidTimeout(value: unknown): value is number {\n return typeof value === 'number' && value >= 0 && value !== Infinity\n}\n\nexport function timeUntilStale(updatedAt: number, staleTime?: number): number {\n return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0)\n}\n\nexport function resolveStaleTime<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n staleTime: undefined | StaleTime<TQueryFnData, TError, TData, TQueryKey>,\n query: Query<TQueryFnData, TError, TData, TQueryKey>,\n): number | undefined {\n return typeof staleTime === 'function' ? staleTime(query) : staleTime\n}\n\nexport function resolveEnabled<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n enabled: undefined | Enabled<TQueryFnData, TError, TData, TQueryKey>,\n query: Query<TQueryFnData, TError, TData, TQueryKey>,\n): boolean | undefined {\n return typeof enabled === 'function' ? enabled(query) : enabled\n}\n\nexport function matchQuery(\n filters: QueryFilters,\n query: Query<any, any, any, any>,\n): boolean {\n const {\n type = 'all',\n exact,\n fetchStatus,\n predicate,\n queryKey,\n stale,\n } = filters\n\n if (queryKey) {\n if (exact) {\n if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) {\n return false\n }\n } else if (!partialMatchKey(query.queryKey, queryKey)) {\n return false\n }\n }\n\n if (type !== 'all') {\n const isActive = query.isActive()\n if (type === 'active' && !isActive) {\n return false\n }\n if (type === 'inactive' && isActive) {\n return false\n }\n }\n\n if (typeof stale === 'boolean' && query.isStale() !== stale) {\n return false\n }\n\n if (fetchStatus && fetchStatus !== query.state.fetchStatus) {\n return false\n }\n\n if (predicate && !predicate(query)) {\n return false\n }\n\n return true\n}\n\nexport function matchMutation(\n filters: MutationFilters,\n mutation: Mutation<any, any>,\n): boolean {\n const { exact, status, predicate, mutationKey } = filters\n if (mutationKey) {\n if (!mutation.options.mutationKey) {\n return false\n }\n if (exact) {\n if (hashKey(mutation.options.mutationKey) !== hashKey(mutationKey)) {\n return false\n }\n } else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) {\n return false\n }\n }\n\n if (status && mutation.state.status !== status) {\n return false\n }\n\n if (predicate && !predicate(mutation)) {\n return false\n }\n\n return true\n}\n\nexport function hashQueryKeyByOptions<TQueryKey extends QueryKey = QueryKey>(\n queryKey: TQueryKey,\n options?: Pick<QueryOptions<any, any, any, any>, 'queryKeyHashFn'>,\n): string {\n const hashFn = options?.queryKeyHashFn || hashKey\n return hashFn(queryKey)\n}\n\n/**\n * Default query & mutation keys hash function.\n * Hashes the value into a stable hash.\n */\nexport function hashKey(queryKey: QueryKey | MutationKey): string {\n return JSON.stringify(queryKey, (_, val) =>\n isPlainObject(val)\n ? Object.keys(val)\n .sort()\n .reduce((result, key) => {\n result[key] = val[key]\n return result\n }, {} as any)\n : val,\n )\n}\n\n/**\n * Checks if key `b` partially matches with key `a`.\n */\nexport function partialMatchKey(a: QueryKey, b: QueryKey): boolean\nexport function partialMatchKey(a: any, b: any): boolean {\n if (a === b) {\n return true\n }\n\n if (typeof a !== typeof b) {\n return false\n }\n\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n return !Object.keys(b).some((key) => !partialMatchKey(a[key], b[key]))\n }\n\n return false\n}\n\n/**\n * This function returns `a` if `b` is deeply equal.\n * If not, it will replace any deeply equal children of `b` with those of `a`.\n * This can be used for structural sharing between JSON values for example.\n */\nexport function replaceEqualDeep<T>(a: unknown, b: T): T\nexport function replaceEqualDeep(a: any, b: any): any {\n if (a === b) {\n return a\n }\n\n const array = isPlainArray(a) && isPlainArray(b)\n\n if (array || (isPlainObject(a) && isPlainObject(b))) {\n const aItems = array ? a : Object.keys(a)\n const aSize = aItems.length\n const bItems = array ? b : Object.keys(b)\n const bSize = bItems.length\n const copy: any = array ? [] : {}\n\n let equalItems = 0\n\n for (let i = 0; i < bSize; i++) {\n const key = array ? i : bItems[i]\n if (\n ((!array && aItems.includes(key)) || array) &&\n a[key] === undefined &&\n b[key] === undefined\n ) {\n copy[key] = undefined\n equalItems++\n } else {\n copy[key] = replaceEqualDeep(a[key], b[key])\n if (copy[key] === a[key] && a[key] !== undefined) {\n equalItems++\n }\n }\n }\n\n return aSize === bSize && equalItems === aSize ? a : copy\n }\n\n return b\n}\n\n/**\n * Shallow compare objects.\n */\nexport function shallowEqualObjects<T extends Record<string, any>>(\n a: T,\n b: T | undefined,\n): boolean {\n if (!b || Object.keys(a).length !== Object.keys(b).length) {\n return false\n }\n\n for (const key in a) {\n if (a[key] !== b[key]) {\n return false\n }\n }\n\n return true\n}\n\nexport function isPlainArray(value: unknown) {\n return Array.isArray(value) && value.length === Object.keys(value).length\n}\n\n// Copied from: https://github.com/jonschlinkert/is-plain-object\n// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types\nexport function isPlainObject(o: any): o is Object {\n if (!hasObjectPrototype(o)) {\n return false\n }\n\n // If has no constructor\n const ctor = o.constructor\n if (ctor === undefined) {\n return true\n }\n\n // If has modified prototype\n const prot = ctor.prototype\n if (!hasObjectPrototype(prot)) {\n return false\n }\n\n // If constructor does not have an Object-specific method\n if (!prot.hasOwnProperty('isPrototypeOf')) {\n return false\n }\n\n // Handles Objects created by Object.create(<arbitrary prototype>)\n if (Object.getPrototypeOf(o) !== Object.prototype) {\n return false\n }\n\n // Most likely a plain Object\n return true\n}\n\nfunction hasObjectPrototype(o: any): boolean {\n return Object.prototype.toString.call(o) === '[object Object]'\n}\n\nexport function sleep(timeout: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, timeout)\n })\n}\n\nexport function replaceData<\n TData,\n TOptions extends QueryOptions<any, any, any, any>,\n>(prevData: TData | undefined, data: TData, options: TOptions): TData {\n if (typeof options.structuralSharing === 'function') {\n return options.structuralSharing(prevData, data) as TData\n } else if (options.structuralSharing !== false) {\n if (process.env.NODE_ENV !== 'production') {\n try {\n return replaceEqualDeep(prevData, data)\n } catch (error) {\n console.error(\n `Structural sharing requires data to be JSON serializable. To fix this, turn off structuralSharing or return JSON-serializable data from your queryFn. [${options.queryHash}]: ${error}`,\n )\n }\n }\n // Structurally share data between prev and new data if needed\n return replaceEqualDeep(prevData, data)\n }\n return data\n}\n\nexport function keepPreviousData<T>(\n previousData: T | undefined,\n): T | undefined {\n return previousData\n}\n\nexport function addToEnd<T>(items: Array<T>, item: T, max = 0): Array<T> {\n const newItems = [...items, item]\n return max && newItems.length > max ? newItems.slice(1) : newItems\n}\n\nexport function addToStart<T>(items: Array<T>, item: T, max = 0): Array<T> {\n const newItems = [item, ...items]\n return max && newItems.length > max ? newItems.slice(0, -1) : newItems\n}\n\nexport const skipToken = Symbol()\nexport type SkipToken = typeof skipToken\n\nexport function ensureQueryFn<\n TQueryFnData = unknown,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: {\n queryFn?: QueryFunction<TQueryFnData, TQueryKey> | SkipToken\n queryHash?: string\n },\n fetchOptions?: FetchOptions<TQueryFnData>,\n): QueryFunction<TQueryFnData, TQueryKey> {\n if (process.env.NODE_ENV !== 'production') {\n if (options.queryFn === skipToken) {\n console.error(\n `Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${options.queryHash}'`,\n )\n }\n }\n\n // if we attempt to retry a fetch that was triggered from an initialPromise\n // when we don't have a queryFn yet, we can't retry, so we just return the already rejected initialPromise\n // if an observer has already mounted, we will be able to retry with that queryFn\n if (!options.queryFn && fetchOptions?.initialPromise) {\n return () => fetchOptions.initialPromise!\n }\n\n if (!options.queryFn || options.queryFn === skipToken) {\n return () =>\n Promise.reject(new Error(`Missing queryFn: '${options.queryHash}'`))\n }\n\n return options.queryFn\n}\n", "import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype Listener = (focused: boolean) => void\n\ntype SetupFn = (\n setFocused: (focused?: boolean) => void,\n) => (() => void) | undefined\n\nexport class FocusManager extends Subscribable<Listener> {\n #focused?: boolean\n #cleanup?: () => void\n\n #setup: SetupFn\n\n constructor() {\n super()\n this.#setup = (onFocus) => {\n // addEventListener does not exist in React Native, but window does\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!isServer && window.addEventListener) {\n const listener = () => onFocus()\n // Listen to visibilitychange\n window.addEventListener('visibilitychange', listener, false)\n\n return () => {\n // Be sure to unsubscribe if a new handler is set\n window.removeEventListener('visibilitychange', listener)\n }\n }\n return\n }\n }\n\n protected onSubscribe(): void {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup)\n }\n }\n\n protected onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.()\n this.#cleanup = undefined\n }\n }\n\n setEventListener(setup: SetupFn): void {\n this.#setup = setup\n this.#cleanup?.()\n this.#cleanup = setup((focused) => {\n if (typeof focused === 'boolean') {\n this.setFocused(focused)\n } else {\n this.onFocus()\n }\n })\n }\n\n setFocused(focused?: boolean): void {\n const changed = this.#focused !== focused\n if (changed) {\n this.#focused = focused\n this.onFocus()\n }\n }\n\n onFocus(): void {\n const isFocused = this.isFocused()\n this.listeners.forEach((listener) => {\n listener(isFocused)\n })\n }\n\n isFocused(): boolean {\n if (typeof this.#focused === 'boolean') {\n return this.#focused\n }\n\n // document global can be unavailable in react native\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return globalThis.document?.visibilityState !== 'hidden'\n }\n}\n\nexport const focusManager = new FocusManager()\n", "import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype Listener = (online: boolean) => void\ntype SetupFn = (setOnline: Listener) => (() => void) | undefined\n\nexport class OnlineManager extends Subscribable<Listener> {\n #online = true\n #cleanup?: () => void\n\n #setup: SetupFn\n\n constructor() {\n super()\n this.#setup = (onOnline) => {\n // addEventListener does not exist in React Native, but window does\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!isServer && window.addEventListener) {\n const onlineListener = () => onOnline(true)\n const offlineListener = () => onOnline(false)\n // Listen to online\n window.addEventListener('online', onlineListener, false)\n window.addEventListener('offline', offlineListener, false)\n\n return () => {\n // Be sure to unsubscribe if a new handler is set\n window.removeEventListener('online', onlineListener)\n window.removeEventListener('offline', offlineListener)\n }\n }\n\n return\n }\n }\n\n protected onSubscribe(): void {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup)\n }\n }\n\n protected onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.()\n this.#cleanup = undefined\n }\n }\n\n setEventListener(setup: SetupFn): void {\n this.#setup = setup\n this.#cleanup?.()\n this.#cleanup = setup(this.setOnline.bind(this))\n }\n\n setOnline(online: boolean): void {\n const changed = this.#online !== online\n\n if (changed) {\n this.#online = online\n this.listeners.forEach((listener) => {\n listener(online)\n })\n }\n }\n\n isOnline(): boolean {\n return this.#online\n }\n}\n\nexport const onlineManager = new OnlineManager()\n", "/**\n * Thenable types which matches React's types for promises\n *\n * React seemingly uses `.status`, `.value` and `.reason` properties on a promises to optimistically unwrap data from promises\n *\n * @see https://github.com/facebook/react/blob/main/packages/shared/ReactTypes.js#L112-L138\n * @see https://github.com/facebook/react/blob/4f604941569d2e8947ce1460a0b2997e835f37b9/packages/react-debug-tools/src/ReactDebugHooks.js#L224-L227\n */\n\ninterface Fulfilled<T> {\n status: 'fulfilled'\n value: T\n}\ninterface Rejected {\n status: 'rejected'\n reason: unknown\n}\ninterface Pending<T> {\n status: 'pending'\n\n /**\n * Resolve the promise with a value.\n * Will remove the `resolve` and `reject` properties from the promise.\n */\n resolve: (value: T) => void\n /**\n * Reject the promise with a reason.\n * Will remove the `resolve` and `reject` properties from the promise.\n */\n reject: (reason: unknown) => void\n}\n\nexport type FulfilledThenable<T> = Promise<T> & Fulfilled<T>\nexport type RejectedThenable<T> = Promise<T> & Rejected\nexport type PendingThenable<T> = Promise<T> & Pending<T>\n\nexport type Thenable<T> =\n | FulfilledThenable<T>\n | RejectedThenable<T>\n | PendingThenable<T>\n\nexport function pendingThenable<T>(): PendingThenable<T> {\n let resolve: Pending<T>['resolve']\n let reject: Pending<T>['reject']\n // this could use `Promise.withResolvers()` in the future\n const thenable = new Promise((_resolve, _reject) => {\n resolve = _resolve\n reject = _reject\n }) as PendingThenable<T>\n\n thenable.status = 'pending'\n thenable.catch(() => {\n // prevent unhandled rejection errors\n })\n\n function finalize(data: Fulfilled<T> | Rejected) {\n Object.assign(thenable, data)\n\n // clear pending props props to avoid calling them twice\n delete (thenable as Partial<PendingThenable<T>>).resolve\n delete (thenable as Partial<PendingThenable<T>>).reject\n }\n\n thenable.resolve = (value) => {\n finalize({\n status: 'fulfilled',\n value,\n })\n\n resolve(value)\n }\n thenable.reject = (reason) => {\n finalize({\n status: 'rejected',\n reason,\n })\n\n reject(reason)\n }\n\n return thenable\n}\n", "import { focusManager } from './focusManager'\nimport { onlineManager } from './onlineManager'\nimport { pendingThenable } from './thenable'\nimport { isServer, sleep } from './utils'\nimport type { CancelOptions, DefaultError, NetworkMode } from './types'\n\n// TYPES\n\ninterface RetryerConfig<TData = unknown, TError = DefaultError> {\n fn: () => TData | Promise<TData>\n initialPromise?: Promise<TData>\n abort?: () => void\n onError?: (error: TError) => void\n onSuccess?: (data: TData) => void\n onFail?: (failureCount: number, error: TError) => void\n onPause?: () => void\n onContinue?: () => void\n retry?: RetryValue<TError>\n retryDelay?: RetryDelayValue<TError>\n networkMode: NetworkMode | undefined\n canRun: () => boolean\n}\n\nexport interface Retryer<TData = unknown> {\n promise: Promise<TData>\n cancel: (cancelOptions?: CancelOptions) => void\n continue: () => Promise<unknown>\n cancelRetry: () => void\n continueRetry: () => void\n canStart: () => boolean\n start: () => Promise<TData>\n}\n\nexport type RetryValue<TError> = boolean | number | ShouldRetryFunction<TError>\n\ntype ShouldRetryFunction<TError = DefaultError> = (\n failureCount: number,\n error: TError,\n) => boolean\n\nexport type RetryDelayValue<TError> = number | RetryDelayFunction<TError>\n\ntype RetryDelayFunction<TError = DefaultError> = (\n failureCount: number,\n error: TError,\n) => number\n\nfunction defaultRetryDelay(failureCount: number) {\n return Math.min(1000 * 2 ** failureCount, 30000)\n}\n\nexport function canFetch(networkMode: NetworkMode | undefined): boolean {\n return (networkMode ?? 'online') === 'online'\n ? onlineManager.isOnline()\n : true\n}\n\nexport class CancelledError extends Error {\n revert?: boolean\n silent?: boolean\n constructor(options?: CancelOptions) {\n super('CancelledError')\n this.revert = options?.revert\n this.silent = options?.silent\n }\n}\n\nexport function isCancelledError(value: any): value is CancelledError {\n return value instanceof CancelledError\n}\n\nexport function createRetryer<TData = unknown, TError = DefaultError>(\n config: RetryerConfig<TData, TError>,\n): Retryer<TData> {\n let isRetryCancelled = false\n let failureCount = 0\n let isResolved = false\n let continueFn: ((value?: unknown) => void) | undefined\n\n const thenable = pendingThenable<TData>()\n\n const cancel = (cancelOptions?: CancelOptions): void => {\n if (!isResolved) {\n reject(new CancelledError(cancelOptions))\n\n config.abort?.()\n }\n }\n const cancelRetry = () => {\n isRetryCancelled = true\n }\n\n const continueRetry = () => {\n isRetryCancelled = false\n }\n\n const canContinue = () =>\n focusManager.isFocused() &&\n (config.networkMode === 'always' || onlineManager.isOnline()) &&\n config.canRun()\n\n const canStart = () => canFetch(config.networkMode) && config.canRun()\n\n const resolve = (value: any) => {\n if (!isResolved) {\n isResolved = true\n config.onSuccess?.(value)\n continueFn?.()\n thenable.resolve(value)\n }\n }\n\n const reject = (value: any) => {\n if (!isResolved) {\n isResolved = true\n config.onError?.(value)\n continueFn?.()\n thenable.reject(value)\n }\n }\n\n const pause = () => {\n return new Promise((continueResolve) => {\n continueFn = (value) => {\n if (isResolved || canContinue()) {\n continueResolve(value)\n }\n }\n config.onPause?.()\n }).then(() => {\n continueFn = undefined\n if (!isResolved) {\n config.onContinue?.()\n }\n })\n }\n\n // Create loop function\n const run = () => {\n // Do nothing if already resolved\n if (isResolved) {\n return\n }\n\n let promiseOrValue: any\n\n // we can re-use config.initialPromise on the first call of run()\n const initialPromise =\n failureCount === 0 ? config.initialPromise : undefined\n\n // Execute query\n try {\n promiseOrValue = initialPromise ?? config.fn()\n } catch (error) {\n promiseOrValue = Promise.reject(error)\n }\n\n Promise.resolve(promiseOrValue)\n .then(resolve)\n .catch((error) => {\n // Stop if the fetch is already resolved\n if (isResolved) {\n return\n }\n\n // Do we need to retry the request?\n const retry = config.retry ?? (isServer ? 0 : 3)\n const retryDelay = config.retryDelay ?? defaultRetryDelay\n const delay =\n typeof retryDelay === 'function'\n ? retryDelay(failureCount, error)\n : retryDelay\n const shouldRetry =\n retry === true ||\n (typeof retry === 'number' && failureCount < retry) ||\n (typeof retry === 'function' && retry(failureCount, error))\n\n if (isRetryCancelled || !shouldRetry) {\n // We are done if the query does not need to be retried\n reject(error)\n return\n }\n\n failureCount++\n\n // Notify on fail\n config.onFail?.(failureCount, error)\n\n // Delay\n sleep(delay)\n // Pause if the document is not visible or when the device is offline\n .then(() => {\n return canContinue() ? undefined : pause()\n })\n .then(() => {\n if (isRetryCancelled) {\n reject(error)\n } else {\n run()\n }\n })\n })\n }\n\n return {\n promise: thenable,\n cancel,\n continue: () => {\n continueFn?.()\n return thenable\n },\n cancelRetry,\n continueRetry,\n canStart,\n start: () => {\n // Start loop\n if (canStart()) {\n run()\n } else {\n pause().then(run)\n }\n return thenable\n },\n }\n}\n", "// TYPES\n\ntype NotifyCallback = () => void\n\ntype NotifyFunction = (callback: () => void) => void\n\ntype BatchNotifyFunction = (callback: () => void) => void\n\ntype BatchCallsCallback<T extends Array<unknown>> = (...args: T) => void\n\ntype ScheduleFunction = (callback: () => void) => void\n\nexport function createNotifyManager() {\n let queue: Array<NotifyCallback> = []\n let transactions = 0\n let notifyFn: NotifyFunction = (callback) => {\n callback()\n }\n let batchNotifyFn: BatchNotifyFunction = (callback: () => void) => {\n callback()\n }\n let scheduleFn: ScheduleFunction = (cb) => setTimeout(cb, 0)\n\n const schedule = (callback: NotifyCallback): void => {\n if (transactions) {\n queue.push(callback)\n } else {\n scheduleFn(() => {\n notifyFn(callback)\n })\n }\n }\n const flush = (): void => {\n const originalQueue = queue\n queue = []\n if (originalQueue.length) {\n scheduleFn(() => {\n batchNotifyFn(() => {\n originalQueue.forEach((callback) => {\n notifyFn(callback)\n })\n })\n })\n }\n }\n\n return {\n batch: <T>(callback: () => T): T => {\n let result\n transactions++\n try {\n result = callback()\n } finally {\n transactions--\n if (!transactions) {\n flush()\n }\n }\n return result\n },\n /**\n * All calls to the wrapped function will be batched.\n */\n batchCalls: <T extends Array<unknown>>(\n callback: BatchCallsCallback<T>,\n ): BatchCallsCallback<T> => {\n return (...args) => {\n schedule(() => {\n callback(...args)\n })\n }\n },\n schedule,\n /**\n * Use this method to set a custom notify function.\n * This can be used to for example wrap notifications with `React.act` while running tests.\n */\n setNotifyFunction: (fn: NotifyFunction) => {\n notifyFn = fn\n },\n /**\n * Use this method to set a custom function to batch notifications together into a single tick.\n * By default React Query will use the batch function provided by ReactDOM or React Native.\n */\n setBatchNotifyFunction: (fn: BatchNotifyFunction) => {\n batchNotifyFn = fn\n },\n setScheduler: (fn: ScheduleFunction) => {\n scheduleFn = fn\n },\n } as const\n}\n\n// SINGLETON\nexport const notifyManager = createNotifyManager()\n", "import { isServer, isValidTimeout } from './utils'\n\nexport abstract class Removable {\n gcTime!: number\n #gcTimeout?: ReturnType<typeof setTimeout>\n\n destroy(): void {\n this.clearGcTimeout()\n }\n\n protected scheduleGc(): void {\n this.clearGcTimeout()\n\n if (isValidTimeout(this.gcTime)) {\n this.#gcTimeout = setTimeout(() => {\n this.optionalRemove()\n }, this.gcTime)\n }\n }\n\n protected updateGcTime(newGcTime: number | undefined): void {\n // Default to 5 minutes (Infinity for server-side) if no gcTime is set\n this.gcTime = Math.max(\n this.gcTime || 0,\n newGcTime ?? (isServer ? Infinity : 5 * 60 * 1000),\n )\n }\n\n protected clearGcTimeout() {\n if (this.#gcTimeout) {\n clearTimeout(this.#gcTimeout)\n this.#gcTimeout = undefined\n }\n }\n\n protected abstract optionalRemove(): void\n}\n", "import {\n ensureQueryFn,\n noop,\n replaceData,\n resolveEnabled,\n skipToken,\n timeUntilStale,\n} from './utils'\nimport { notifyManager } from './notifyManager'\nimport { canFetch, createRetryer, isCancelledError } from './retryer'\nimport { Removable } from './removable'\nimport type { QueryCache } from './queryCache'\nimport type { QueryClient } from './queryClient'\nimport type {\n CancelOptions,\n DefaultError,\n FetchStatus,\n InitialDataFunction,\n OmitKeyof,\n QueryFunction,\n QueryFunctionContext,\n QueryKey,\n QueryMeta,\n QueryOptions,\n QueryStatus,\n SetDataOptions,\n} from './types'\nimport type { QueryObserver } from './queryObserver'\nimport type { Retryer } from './retryer'\n\n// TYPES\n\ninterface QueryConfig<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey = QueryKey,\n> {\n client: QueryClient\n queryKey: TQueryKey\n queryHash: string\n options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n defaultOptions?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n state?: QueryState<TData, TError>\n}\n\nexport interface QueryState<TData = unknown, TError = DefaultError> {\n data: TData | undefined\n dataUpdateCount: number\n dataUpdatedAt: number\n error: TError | null\n errorUpdateCount: number\n errorUpdatedAt: number\n fetchFailureCount: number\n fetchFailureReason: TError | null\n fetchMeta: FetchMeta | null\n isInvalidated: boolean\n status: QueryStatus\n fetchStatus: FetchStatus\n}\n\nexport interface FetchContext<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey = QueryKey,\n> {\n fetchFn: () => unknown | Promise<unknown>\n fetchOptions?: FetchOptions\n signal: AbortSignal\n options: QueryOptions<TQueryFnData, TError, TData, any>\n client: QueryClient\n queryKey: TQueryKey\n state: QueryState<TData, TError>\n}\n\nexport interface QueryBehavior<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> {\n onFetch: (\n context: FetchContext<TQueryFnData, TError, TData, TQueryKey>,\n query: Query,\n ) => void\n}\n\nexport type FetchDirection = 'forward' | 'backward'\n\nexport interface FetchMeta {\n fetchMore?: { direction: FetchDirection }\n}\n\nexport interface FetchOptions<TData = unknown> {\n cancelRefetch?: boolean\n meta?: FetchMeta\n initialPromise?: Promise<TData>\n}\n\ninterface FailedAction<TError> {\n type: 'failed'\n failureCount: number\n error: TError\n}\n\ninterface FetchAction {\n type: 'fetch'\n meta?: FetchMeta\n}\n\ninterface SuccessAction<TData> {\n data: TData | undefined\n type: 'success'\n dataUpdatedAt?: number\n manual?: boolean\n}\n\ninterface ErrorAction<TError> {\n type: 'error'\n error: TError\n}\n\ninterface InvalidateAction {\n type: 'invalidate'\n}\n\ninterface PauseAction {\n type: 'pause'\n}\n\ninterface ContinueAction {\n type: 'continue'\n}\n\ninterface SetStateAction<TData, TError> {\n type: 'setState'\n state: Partial<QueryState<TData, TError>>\n setStateOptions?: SetStateOptions\n}\n\nexport type Action<TData, TError> =\n | ContinueAction\n | ErrorAction<TError>\n | FailedAction<TError>\n | FetchAction\n | InvalidateAction\n | PauseAction\n | SetStateAction<TData, TError>\n | SuccessAction<TData>\n\nexport interface SetStateOptions {\n meta?: any\n}\n\n// CLASS\n\nexport class Query<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> extends Removable {\n queryKey: TQueryKey\n queryHash: string\n options!: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n state: QueryState<TData, TError>\n\n #initialState: QueryState<TData, TError>\n #revertState?: QueryState<TData, TError>\n #cache: QueryCache\n #client: QueryClient\n #retryer?: Retryer<TData>\n observers: Array<QueryObserver<any, any, any, any, any>>\n #defaultOptions?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n #abortSignalConsumed: boolean\n\n constructor(config: QueryConfig<TQueryFnData, TError, TData, TQueryKey>) {\n super()\n\n this.#abortSignalConsumed = false\n this.#defaultOptions = config.defaultOptions\n this.setOptions(config.options)\n this.observers = []\n this.#client = config.client\n this.#cache = this.#client.getQueryCache()\n this.queryKey = config.queryKey\n this.queryHash = config.queryHash\n this.#initialState = getDefaultState(this.options)\n this.state = config.state ?? this.#initialState\n this.scheduleGc()\n }\n get meta(): QueryMeta | undefined {\n return this.options.meta\n }\n\n get promise(): Promise<TData> | undefined {\n return this.#retryer?.promise\n }\n\n setOptions(\n options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n ): void {\n this.options = { ...this.#defaultOptions, ...options }\n\n this.updateGcTime(this.options.gcTime)\n }\n\n protected optionalRemove() {\n if (!this.observers.length && this.state.fetchStatus === 'idle') {\n this.#cache.remove(this)\n }\n }\n\n setData(\n newData: TData,\n options?: SetDataOptions & { manual: boolean },\n ): TData {\n const data = replaceData(this.state.data, newData, this.options)\n\n // Set data and mark it as cached\n this.#dispatch({\n data,\n type: 'success',\n dataUpdatedAt: options?.updatedAt,\n manual: options?.manual,\n })\n\n return data\n }\n\n setState(\n state: Partial<QueryState<TData, TError>>,\n setStateOptions?: SetStateOptions,\n ): void {\n this.#dispatch({ type: 'setState', state, setStateOptions })\n }\n\n cancel(options?: CancelOptions): Promise<void> {\n const promise = this.#retryer?.promise\n this.#retryer?.cancel(options)\n return promise ? promise.then(noop).catch(noop) : Promise.resolve()\n }\n\n destroy(): void {\n super.destroy()\n\n this.cancel({ silent: true })\n }\n\n reset(): void {\n this.destroy()\n this.setState(this.#initialState)\n }\n\n isActive(): boolean {\n return this.observers.some(\n (observer) => resolveEnabled(observer.options.enabled, this) !== false,\n )\n }\n\n isDisabled(): boolean {\n if (this.getObserversCount() > 0) {\n return !this.isActive()\n }\n // if a query has no observers, it should still be considered disabled if it never attempted a fetch\n return (\n this.options.queryFn === skipToken ||\n this.state.dataUpdateCount + this.state.errorUpdateCount === 0\n )\n }\n\n isStale(): boolean {\n if (this.state.isInvalidated) {\n return true\n }\n\n if (this.getObserversCount() > 0) {\n return this.observers.some(\n (observer) => observer.getCurrentResult().isStale,\n )\n }\n\n return this.state.data === undefined\n }\n\n isStaleByTime(staleTime = 0): boolean {\n return (\n this.state.isInvalidated ||\n this.state.data === undefined ||\n !timeUntilStale(this.state.dataUpdatedAt, staleTime)\n )\n }\n\n onFocus(): void {\n const observer = this.observers.find((x) => x.shouldFetchOnWindowFocus())\n\n observer?.refetch({ cancelRefetch: false })\n\n // Continue fetch if currently paused\n this.#retryer?.continue()\n }\n\n onOnline(): void {\n const observer = this.observers.find((x) => x.shouldFetchOnReconnect())\n\n observer?.refetch({ cancelRefetch: false })\n\n // Continue fetch if currently paused\n this.#retryer?.continue()\n }\n\n addObserver(observer: QueryObserver<any, any, any, any, any>): void {\n if (!this.observers.includes(observer)) {\n this.observers.push(observer)\n\n // Stop the query from being garbage collected\n this.clearGcTimeout()\n\n this.#cache.notify({ type: 'observerAdded', query: this, observer })\n }\n }\n\n removeObserver(observer: QueryObserver<any, any, any, any, any>): void {\n if (this.observers.includes(observer)) {\n this.observers = this.observers.filter((x) => x !== observer)\n\n if (!this.observers.length) {\n // If the transport layer does not support cancellation\n // we'll let the query continue so the result can be cached\n if (this.#retryer) {\n if (this.#abortSignalConsumed) {\n this.#retryer.cancel({ revert: true })\n } else {\n this.#retryer.cancelRetry()\n }\n }\n\n this.scheduleGc()\n }\n\n this.#cache.notify({ type: 'observerRemoved', query: this, observer })\n }\n }\n\n getObserversCount(): number {\n return this.observers.length\n }\n\n invalidate(): void {\n if (!this.state.isInvalidated) {\n this.#dispatch({ type: 'invalidate' })\n }\n }\n\n fetch(\n options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n fetchOptions?: FetchOptions<TQueryFnData>,\n ): Promise<TData> {\n if (this.state.fetchStatus !== 'idle') {\n if (this.state.data !== undefined && fetchOptions?.cancelRefetch) {\n // Silently cancel current fetch if the user wants to cancel refetch\n this.cancel({ silent: true })\n } else if (this.#retryer) {\n // make sure that retries that were potentially cancelled due to unmounts can continue\n this.#retryer.continueRetry()\n // Return current promise if we are already fetching\n return this.#retryer.promise\n }\n }\n\n // Update config if passed, otherwise the config from the last execution is used\n if (options) {\n this.setOptions(options)\n }\n\n // Use the options from the first observer with a query function if no function is found.\n // This can happen when the query is hydrated or created with setQueryData.\n if (!this.options.queryFn) {\n const observer = this.observers.find((x) => x.options.queryFn)\n if (observer) {\n this.setOptions(observer.options)\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (!Array.isArray(this.options.queryKey)) {\n console.error(\n `As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`,\n )\n }\n }\n\n const abortController = new AbortController()\n\n // Adds an enumerable signal property to the object that\n // which sets abortSignalConsumed to true when the signal\n // is read.\n const addSignalProperty = (object: unknown) => {\n Object.defineProperty(object, 'signal', {\n enumerable: true,\n get: () => {\n this.#abortSignalConsumed = true\n return abortController.signal\n },\n })\n }\n\n // Create fetch function\n const fetchFn = () => {\n const queryFn = ensureQueryFn(this.options, fetchOptions)\n\n // Create query function context\n const queryFnContext: OmitKeyof<\n QueryFunctionContext<TQueryKey>,\n 'signal'\n > = {\n client: this.#client,\n queryKey: this.queryKey,\n meta: this.meta,\n }\n\n addSignalProperty(queryFnContext)\n\n this.#abortSignalConsumed = false\n if (this.options.persister) {\n return this.options.persister(\n queryFn as QueryFunction<any>,\n queryFnContext as QueryFunctionContext<TQueryKey>,\n this as unknown as Query,\n )\n }\n\n return queryFn(queryFnContext as QueryFunctionContext<TQueryKey>)\n }\n\n // Trigger behavior hook\n const context: OmitKeyof<\n FetchContext<TQueryFnData, TError, TData, TQueryKey>,\n 'signal'\n > = {\n fetchOptions,\n options: this.options,\n queryKey: this.queryKey,\n client: this.#client,\n state: this.state,\n fetchFn,\n }\n\n addSignalProperty(context)\n\n this.options.behavior?.onFetch(\n context as FetchContext<TQueryFnData, TError, TData, TQueryKey>,\n this as unknown as Query,\n )\n\n // Store state in case the current fetch needs to be reverted\n this.#revertState = this.state\n\n // Set to fetching state if not already in it\n if (\n this.state.fetchStatus === 'idle' ||\n this.state.fetchMeta !== context.fetchOptions?.meta\n ) {\n this.#dispatch({ type: 'fetch', meta: context.fetchOptions?.meta })\n }\n\n const onError = (error: TError | { silent?: boolean }) => {\n // Optimistically update state if needed\n if (!(isCancelledError(error) && error.silent)) {\n this.#dispatch({\n type: 'error',\n error: error as TError,\n })\n }\n\n if (!isCancelledError(error)) {\n // Notify cache callback\n this.#cache.config.onError?.(\n error as any,\n this as Query<any, any, any, any>,\n )\n this.#cache.config.onSettled?.(\n this.state.data,\n error as any,\n this as Query<any, any, any, any>,\n )\n }\n\n // Schedule query gc after fetching\n this.scheduleGc()\n }\n\n // Try to fetch the data\n this.#retryer = createRetryer({\n initialPromise: fetchOptions?.initialPromise as\n | Promise<TData>\n | undefined,\n fn: context.fetchFn as () => Promise<TData>,\n abort: abortController.abort.bind(abortController),\n onSuccess: (data) => {\n if (data === undefined) {\n if (process.env.NODE_ENV !== 'production') {\n console.error(\n `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`,\n )\n }\n onError(new Error(`${this.queryHash} data is undefined`) as any)\n return\n }\n\n try {\n this.setData(data)\n } catch (error) {\n onError(error as TError)\n return\n }\n\n // Notify cache callback\n this.#cache.config.onSuccess?.(data, this as Query<any, any, any, any>)\n this.#cache.config.onSettled?.(\n data,\n this.state.error as any,\n this as Query<any, any, any, any>,\n )\n\n // Schedule query gc after fetching\n this.scheduleGc()\n },\n onError,\n onFail: (failureCount, error) => {\n this.#dispatch({ type: 'failed', failureCount, error })\n },\n onPause: () => {\n this.#dispatch({ type: 'pause' })\n },\n onContinue: () => {\n this.#dispatch({ type: 'continue' })\n },\n retry: context.options.retry,\n retryDelay: context.options.retryDelay,\n networkMode: context.options.networkMode,\n canRun: () => true,\n })\n\n return this.#retryer.start()\n }\n\n #dispatch(action: Action<TData, TError>): void {\n const reducer = (\n state: QueryState<TData, TError>,\n ): QueryState<TData, TError> => {\n switch (action.type) {\n case 'failed':\n return {\n ...state,\n fetchFailureCount: action.failureCount,\n fetchFailureReason: action.error,\n }\n case 'pause':\n return {\n ...state,\n fetchStatus: 'paused',\n }\n case 'continue':\n return {\n ...state,\n fetchStatus: 'fetching',\n }\n case 'fetch':\n return {\n ...state,\n ...fetchState(state.data, this.options),\n fetchMeta: action.meta ?? null,\n }\n case 'success':\n return {\n ...state,\n data: action.data,\n dataUpdateCount: state.dataUpdateCount + 1,\n dataUpdatedAt: action.dataUpdatedAt ?? Date.now(),\n error: null,\n isInvalidated: false,\n status: 'success',\n ...(!action.manual && {\n fetchStatus: 'idle',\n fetchFailureCount: 0,\n fetchFailureReason: null,\n }),\n }\n case 'error':\n const error = action.error\n\n if (isCancelledError(error) && error.revert && this.#revertState) {\n return { ...this.#revertState, fetchStatus: 'idle' }\n }\n\n return {\n ...state,\n error,\n errorUpdateCount: state.errorUpdateCount + 1,\n errorUpdatedAt: Date.now(),\n fetchFailureCount: state.fetchFailureCount + 1,\n fetchFailureReason: error,\n fetchStatus: 'idle',\n status: 'error',\n }\n case 'invalidate':\n return {\n ...state,\n isInvalidated: true,\n }\n case 'setState':\n return {\n ...state,\n ...action.state,\n }\n }\n }\n\n this.state = reducer(this.state)\n\n notifyManager.batch(() => {\n this.observers.forEach((observer) => {\n observer.onQueryUpdate()\n })\n\n this.#cache.notify({ query: this, type: 'updated', action })\n })\n }\n}\n\nexport function fetchState<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey,\n>(\n data: TData | undefined,\n options: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n) {\n return {\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchStatus: canFetch(options.networkMode) ? 'fetching' : 'paused',\n ...(data === undefined &&\n ({\n error: null,\n status: 'pending',\n } as const)),\n } as const\n}\n\nfunction getDefaultState<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey,\n>(\n options: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n): QueryState<TData, TError> {\n const data =\n typeof options.initialData === 'function'\n ? (options.initialData as InitialDataFunction<TData>)()\n : options.initialData\n\n const hasData = data !== undefined\n\n const initialDataUpdatedAt = hasData\n ? typeof options.initialDataUpdatedAt === 'function'\n ? (options.initialDataUpdatedAt as () => number | undefined)()\n : options.initialDataUpdatedAt\n : 0\n\n return {\n data,\n dataUpdateCount: 0,\n dataUpdatedAt: hasData ? (initialDataUpdatedAt ?? Date.now()) : 0,\n error: null,\n errorUpdateCount: 0,\n errorUpdatedAt: 0,\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchMeta: null,\n isInvalidated: false,\n status: hasData ? 'success' : 'pending',\n fetchStatus: 'idle',\n }\n}\n", "import { hashQueryKeyByOptions, matchQuery } from './utils'\nimport { Query } from './query'\nimport { notifyManager } from './notifyManager'\nimport { Subscribable } from './subscribable'\nimport type { QueryFilters } from './utils'\nimport type { Action, QueryState } from './query'\nimport type {\n DefaultError,\n NotifyEvent,\n QueryKey,\n QueryOptions,\n WithRequired,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { QueryObserver } from './queryObserver'\n\n// TYPES\n\ninterface QueryCacheConfig {\n onError?: (\n error: DefaultError,\n query: Query<unknown, unknown, unknown>,\n ) => void\n onSuccess?: (data: unknown, query: Query<unknown, unknown, unknown>) => void\n onSettled?: (\n data: unknown | undefined,\n error: DefaultError | null,\n query: Query<unknown, unknown, unknown>,\n ) => void\n}\n\ninterface NotifyEventQueryAdded extends NotifyEvent {\n type: 'added'\n query: Query<any, any, any, any>\n}\n\ninterface NotifyEventQueryRemoved extends NotifyEvent {\n type: 'removed'\n query: Query<any, any, any, any>\n}\n\ninterface NotifyEventQueryUpdated extends NotifyEvent {\n type: 'updated'\n query: Query<any, any, any, any>\n action: Action<any, any>\n}\n\ninterface NotifyEventQueryObserverAdded extends NotifyEvent {\n type: 'observerAdded'\n query: Query<any, any, any, any>\n observer: QueryObserver<any, any, any, any, any>\n}\n\ninterface NotifyEventQueryObserverRemoved extends NotifyEvent {\n type: 'observerRemoved'\n query: Query<any, any, any, any>\n observer: QueryObserver<any, any, any, any, any>\n}\n\ninterface NotifyEventQueryObserverResultsUpdated extends NotifyEvent {\n type: 'observerResultsUpdated'\n query: Query<any, any, any, any>\n}\n\ninterface NotifyEventQueryObserverOptionsUpdated extends NotifyEvent {\n type: 'observerOptionsUpdated'\n query: Query<any, any, any, any>\n observer: QueryObserver<any, any, any, any, any>\n}\n\nexport type QueryCacheNotifyEvent =\n | NotifyEventQueryAdded\n | NotifyEventQueryRemoved\n | NotifyEventQueryUpdated\n | NotifyEventQueryObserverAdded\n | NotifyEventQueryObserverRemoved\n | NotifyEventQueryObserverResultsUpdated\n | NotifyEventQueryObserverOptionsUpdated\n\ntype QueryCacheListener = (event: QueryCacheNotifyEvent) => void\n\nexport interface QueryStore {\n has: (queryHash: string) => boolean\n set: (queryHash: string, query: Query) => void\n get: (queryHash: string) => Query | undefined\n delete: (queryHash: string) => void\n values: () => IterableIterator<Query>\n}\n\n// CLASS\n\nexport class QueryCache extends Subscribable<QueryCacheListener> {\n #queries: QueryStore\n\n constructor(public config: QueryCacheConfig = {}) {\n super()\n this.#queries = new Map<string, Query>()\n }\n\n build<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n >(\n client: QueryClient,\n options: WithRequired<\n QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n 'queryKey'\n >,\n state?: QueryState<TData, TError>,\n ): Query<TQueryFnData, TError, TData, TQueryKey> {\n const queryKey = options.queryKey\n const queryHash =\n options.queryHash ?? hashQueryKeyByOptions(queryKey, options)\n let query = this.get<TQueryFnData, TError, TData, TQueryKey>(queryHash)\n\n if (!query) {\n query = new Query({\n client,\n queryKey,\n queryHash,\n options: client.defaultQueryOptions(options),\n state,\n defaultOptions: client.getQueryDefaults(queryKey),\n })\n this.add(query)\n }\n\n return query\n }\n\n add(query: Query<any, any, any, any>): void {\n if (!this.#queries.has(query.queryHash)) {\n this.#queries.set(query.queryHash, query)\n\n this.notify({\n type: 'added',\n query,\n })\n }\n }\n\n remove(query: Query<any, any, any, any>): void {\n const queryInMap = this.#queries.get(query.queryHash)\n\n if (queryInMap) {\n query.destroy()\n\n if (queryInMap === query) {\n this.#queries.delete(query.queryHash)\n }\n\n this.notify({ type: 'removed', query })\n }\n }\n\n clear(): void {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n this.remove(query)\n })\n })\n }\n\n get<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n >(\n queryHash: string,\n ): Query<TQueryFnData, TError, TData, TQueryKey> | undefined {\n return this.#queries.get(queryHash) as\n | Query<TQueryFnData, TError, TData, TQueryKey>\n | undefined\n }\n\n getAll(): Array<Query> {\n return [...this.#queries.values()]\n }\n\n find<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData>(\n filters: WithRequired<QueryFilters, 'queryKey'>,\n ): Query<TQueryFnData, TError, TData> | undefined {\n const defaultedFilters = { exact: true, ...filters }\n\n return this.getAll().find((query) =>\n matchQuery(defaultedFilters, query),\n ) as Query<TQueryFnData, TError, TData> | undefined\n }\n\n findAll(filters: QueryFilters<any, any, any, any> = {}): Array<Query> {\n const queries = this.getAll()\n return Object.keys(filters).length > 0\n ? queries.filter((query) => matchQuery(filters, query))\n : queries\n }\n\n notify(event: QueryCacheNotifyEvent): void {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event)\n })\n })\n }\n\n onFocus(): void {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onFocus()\n })\n })\n }\n\n onOnline(): void {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onOnline()\n })\n })\n }\n}\n", "import { notifyManager } from './notifyManager'\nimport { Removable } from './removable'\nimport { createRetryer } from './retryer'\nimport type {\n DefaultError,\n MutationMeta,\n MutationOptions,\n MutationStatus,\n} from './types'\nimport type { MutationCache } from './mutationCache'\nimport type { MutationObserver } from './mutationObserver'\nimport type { Retryer } from './retryer'\n\n// TYPES\n\ninterface MutationConfig<TData, TError, TVariables, TContext> {\n mutationId: number\n mutationCache: MutationCache\n options: MutationOptions<TData, TError, TVariables, TContext>\n state?: MutationState<TData, TError, TVariables, TContext>\n}\n\nexport interface MutationState<\n TData = unknown,\n TError = DefaultError,\n TVariables = unknown,\n TContext = unknown,\n> {\n context: TContext | undefined\n data: TData | undefined\n error: TError | null\n failureCount: number\n failureReason: TError | null\n isPaused: boolean\n status: MutationStatus\n variables: TVariables | undefined\n submittedAt: number\n}\n\ninterface FailedAction<TError> {\n type: 'failed'\n failureCount: number\n error: TError | null\n}\n\ninterface PendingAction<TVariables, TContext> {\n type: 'pending'\n isPaused: boolean\n variables?: TVariables\n context?: TContext\n}\n\ninterface SuccessAction<TData> {\n type: 'success'\n data: TData\n}\n\ninterface ErrorAction<TError> {\n type: 'error'\n error: TError\n}\n\ninterface PauseAction {\n type: 'pause'\n}\n\ninterface ContinueAction {\n type: 'continue'\n}\n\nexport type Action<TData, TError, TVariables, TContext> =\n | ContinueAction\n | ErrorAction<TError>\n | FailedAction<TError>\n | PendingAction<TVariables, TContext>\n | PauseAction\n | SuccessAction<TData>\n\n// CLASS\n\nexport class Mutation<\n TData = unknown,\n TError = DefaultError,\n TVariables = unknown,\n TContext = unknown,\n> extends Removable {\n state: MutationState<TData, TError, TVariables, TContext>\n options!: MutationOptions<TData, TError, TVariables, TContext>\n readonly mutationId: number\n\n #observers: Array<MutationObserver<TData, TError, TVariables, TContext>>\n #mutationCache: MutationCache\n #retryer?: Retryer<TData>\n\n constructor(config: MutationConfig<TData, TError, TVariables, TContext>) {\n super()\n\n this.mutationId = config.mutationId\n this.#mutationCache = config.mutationCache\n this.#observers = []\n this.state = config.state || getDefaultState()\n\n this.setOptions(config.options)\n this.scheduleGc()\n }\n\n setOptions(\n options: MutationOptions<TData, TError, TVariables, TContext>,\n ): void {\n this.options = options\n\n this.updateGcTime(this.options.gcTime)\n }\n\n get meta(): MutationMeta | undefined {\n return this.options.meta\n }\n\n addObserver(observer: MutationObserver<any, any, any, any>): void {\n if (!this.#observers.includes(observer)) {\n this.#observers.push(observer)\n\n // Stop the mutation from being garbage collected\n this.clearGcTimeout()\n\n this.#mutationCache.notify({\n type: 'observerAdded',\n mutation: this,\n observer,\n })\n }\n }\n\n removeObserver(observer: MutationObserver<any, any, any, any>): void {\n this.#observers = this.#observers.filter((x) => x !== observer)\n\n this.scheduleGc()\n\n this.#mutationCache.notify({\n type: 'observerRemoved',\n mutation: this,\n observer,\n })\n }\n\n protected optionalRemove() {\n if (!this.#observers.length) {\n if (this.state.status === 'pending') {\n this.scheduleGc()\n } else {\n this.#mutationCache.remove(this)\n }\n }\n }\n\n continue(): Promise<unknown> {\n return (\n this.#retryer?.continue() ??\n // continuing a mutation assumes that variables are set, mutation must have been dehydrated before\n this.execute(this.state.variables!)\n )\n }\n\n async execute(variables: TVariables): Promise<TData> {\n this.#retryer = createRetryer({\n fn: () => {\n if (!this.options.mutationFn) {\n return Promise.reject(new Error('No mutationFn found'))\n }\n return this.options.mutationFn(variables)\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: 'failed', failureCount, error })\n },\n onPause: () => {\n this.#dispatch({ type: 'pause' })\n },\n onContinue: () => {\n this.#dispatch({ type: 'continue' })\n },\n retry: this.options.retry ?? 0,\n retryDelay: this.options.retryDelay,\n networkMode: this.options.networkMode,\n canRun: () => this.#mutationCache.canRun(this),\n })\n\n const restored = this.state.status === 'pending'\n const isPaused = !this.#retryer.canStart()\n\n try {\n if (!restored) {\n this.#dispatch({ type: 'pending', variables, isPaused })\n // Notify cache callback\n await this.#mutationCache.config.onMutate?.(\n variables,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n const context = await this.options.onMutate?.(variables)\n if (context !== this.state.context) {\n this.#dispatch({\n type: 'pending',\n context,\n variables,\n isPaused,\n })\n }\n }\n const data = await this.#retryer.start()\n\n // Notify cache callback\n await this.#mutationCache.config.onSuccess?.(\n data,\n variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onSuccess?.(data, variables, this.state.context!)\n\n // Notify cache callback\n await this.#mutationCache.config.onSettled?.(\n data,\n null,\n this.state.variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onSettled?.(data, null, variables, this.state.context)\n\n this.#dispatch({ type: 'success', data })\n return data\n } catch (error) {\n try {\n // Notify cache callback\n await this.#mutationCache.config.onError?.(\n error as any,\n variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onError?.(\n error as TError,\n variables,\n this.state.context,\n )\n\n // Notify cache callback\n await this.#mutationCache.config.onSettled?.(\n undefined,\n error as any,\n this.state.variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onSettled?.(\n undefined,\n error as TError,\n variables,\n this.state.context,\n )\n throw error\n } finally {\n this.#dispatch({ type: 'error', error: error as TError })\n }\n } finally {\n this.#mutationCache.runNext(this)\n }\n }\n\n #dispatch(action: Action<TData, TError, TVariables, TContext>): void {\n const reducer = (\n state: MutationState<TData, TError, TVariables, TContext>,\n ): MutationState<TData, TError, TVariables, TContext> => {\n switch (action.type) {\n case 'failed':\n return {\n ...state,\n failureCount: action.failureCount,\n failureReason: action.error,\n }\n case 'pause':\n return {\n ...state,\n isPaused: true,\n }\n case 'continue':\n return {\n ...state,\n isPaused: false,\n }\n case 'pending':\n return {\n ...state,\n context: action.context,\n data: undefined,\n failureCount: 0,\n failureReason: null,\n error: null,\n isPaused: action.isPaused,\n status: 'pending',\n variables: action.variables,\n submittedAt: Date.now(),\n }\n case 'success':\n return {\n ...state,\n data: action.data,\n failureCount: 0,\n failureReason: null,\n error: null,\n status: 'success',\n isPaused: false,\n }\n case 'error':\n return {\n ...state,\n data: undefined,\n error: action.error,\n failureCount: state.failureCount + 1,\n failureReason: action.error,\n isPaused: false,\n status: 'error',\n }\n }\n }\n this.state = reducer(this.state)\n\n notifyManager.batch(() => {\n this.#observers.forEach((observer) => {\n observer.onMutationUpdate(action)\n })\n this.#mutationCache.notify({\n mutation: this,\n type: 'updated',\n action,\n })\n })\n }\n}\n\nexport function getDefaultState<\n TData,\n TError,\n TVariables,\n TContext,\n>(): MutationState<TData, TError, TVariables, TContext> {\n return {\n context: undefined,\n data: undefined,\n error: null,\n failureCount: 0,\n failureReason: null,\n isPaused: false,\n status: 'idle',\n variables: undefined,\n submittedAt: 0,\n }\n}\n", "import { notifyManager } from './notifyManager'\nimport { Mutation } from './mutation'\nimport { matchMutation, noop } from './utils'\nimport { Subscribable } from './subscribable'\nimport type { MutationObserver } from './mutationObserver'\nimport type { DefaultError, MutationOptions, NotifyEvent } from './types'\nimport type { QueryClient } from './queryClient'\nimport type { Action, MutationState } from './mutation'\nimport type { MutationFilters } from './utils'\n\n// TYPES\n\ninterface MutationCacheConfig {\n onError?: (\n error: DefaultError,\n variables: unknown,\n context: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => Promise<unknown> | unknown\n onSuccess?: (\n data: unknown,\n variables: unknown,\n context: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => Promise<unknown> | unknown\n onMutate?: (\n variables: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => Promise<unknown> | unknown\n onSettled?: (\n data: unknown | undefined,\n error: DefaultError | null,\n variables: unknown,\n context: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => Promise<unknown> | unknown\n}\n\ninterface NotifyEventMutationAdded extends NotifyEvent {\n type: 'added'\n mutation: Mutation<any, any, any, any>\n}\ninterface NotifyEventMutationRemoved extends NotifyEvent {\n type: 'removed'\n mutation: Mutation<any, any, any, any>\n}\n\ninterface NotifyEventMutationObserverAdded extends NotifyEvent {\n type: 'observerAdded'\n mutation: Mutation<any, any, any, any>\n observer: MutationObserver<any, any, any>\n}\n\ninterface NotifyEventMutationObserverRemoved extends NotifyEvent {\n type: 'observerRemoved'\n mutation: Mutation<any, any, any, any>\n observer: MutationObserver<any, any, any>\n}\n\ninterface NotifyEventMutationObserverOptionsUpdated extends NotifyEvent {\n type: 'observerOptionsUpdated'\n mutation?: Mutation<any, any, any, any>\n observer: MutationObserver<any, any, any, any>\n}\n\ninterface NotifyEventMutationUpdated extends NotifyEvent {\n type: 'updated'\n mutation: Mutation<any, any, any, any>\n action: Action<any, any, any, any>\n}\n\nexport type MutationCacheNotifyEvent =\n | NotifyEventMutationAdded\n | NotifyEventMutationRemoved\n | NotifyEventMutationObserverAdded\n | NotifyEventMutationObserverRemoved\n | NotifyEventMutationObserverOptionsUpdated\n | NotifyEventMutationUpdated\n\ntype MutationCacheListener = (event: MutationCacheNotifyEvent) => void\n\n// CLASS\n\nexport class MutationCache extends Subscribable<MutationCacheListener> {\n #mutations: Set<Mutation<any, any, any, any>>\n #scopes: Map<string, Array<Mutation<any, any, any, any>>>\n #mutationId: number\n\n constructor(public config: MutationCacheConfig = {}) {\n super()\n this.#mutations = new Set()\n this.#scopes = new Map()\n this.#mutationId = 0\n }\n\n build<TData, TError, TVariables, TContext>(\n client: QueryClient,\n options: MutationOptions<TData, TError, TVariables, TContext>,\n state?: MutationState<TData, TError, TVariables, TContext>,\n ): Mutation<TData, TError, TVariables, TContext> {\n const mutation = new Mutation({\n mutationCache: this,\n mutationId: ++this.#mutationId,\n options: client.defaultMutationOptions(options),\n state,\n })\n\n this.add(mutation)\n\n return mutation\n }\n\n add(mutation: Mutation<any, any, any, any>): void {\n this.#mutations.add(mutation)\n const scope = scopeFor(mutation)\n if (typeof scope === 'string') {\n const scopedMutations = this.#scopes.get(scope)\n if (scopedMutations) {\n scopedMutations.push(mutation)\n } else {\n this.#scopes.set(scope, [mutation])\n }\n }\n this.notify({ type: 'added', mutation })\n }\n\n remove(mutation: Mutation<any, any, any, any>): void {\n if (this.#mutations.delete(mutation)) {\n const scope = scopeFor(mutation)\n if (typeof scope === 'string') {\n const scopedMutations = this.#scopes.get(scope)\n if (scopedMutations) {\n if (scopedMutations.length > 1) {\n const index = scopedMutations.indexOf(mutation)\n if (index !== -1) {\n scopedMutations.splice(index, 1)\n }\n } else if (scopedMutations[0] === mutation) {\n this.#scopes.delete(scope)\n }\n }\n }\n }\n\n // Currently we notify the removal even if the mutation was already removed.\n // Consider making this an error or not notifying of the removal depending on the desired semantics.\n this.notify({ type: 'removed', mutation })\n }\n\n canRun(mutation: Mutation<any, any, any, any>): boolean {\n const scope = scopeFor(mutation)\n if (typeof scope === 'string') {\n const mutationsWithSameScope = this.#scopes.get(scope)\n const firstPendingMutation = mutationsWithSameScope?.find(\n (m) => m.state.status === 'pending',\n )\n // we can run if there is no current pending mutation (start use-case)\n // or if WE are the first pending mutation (continue use-case)\n return !firstPendingMutation || firstPendingMutation === mutation\n } else {\n // For unscoped mutations there are never any pending mutations in front of the\n // current mutation\n return true\n }\n }\n\n runNext(mutation: Mutation<any, any, any, any>): Promise<unknown> {\n const scope = scopeFor(mutation)\n if (typeof scope === 'string') {\n const foundMutation = this.#scopes\n .get(scope)\n ?.find((m) => m !== mutation && m.state.isPaused)\n\n return foundMutation?.continue() ?? Promise.resolve()\n } else {\n return Promise.resolve()\n }\n }\n\n clear(): void {\n notifyManager.batch(() => {\n this.#mutations.forEach((mutation) => {\n this.notify({ type: 'removed', mutation })\n })\n this.#mutations.clear()\n this.#scopes.clear()\n })\n }\n\n getAll(): Array<Mutation> {\n return Array.from(this.#mutations)\n }\n\n find<\n TData = unknown,\n TError = DefaultError,\n TVariables = any,\n TContext = unknown,\n >(\n filters: MutationFilters,\n ): Mutation<TData, TError, TVariables, TContext> | undefined {\n const defaultedFilters = { exact: true, ...filters }\n\n return this.getAll().find((mutation) =>\n matchMutation(defaultedFilters, mutation),\n ) as Mutation<TData, TError, TVariables, TContext> | undefined\n }\n\n findAll(filters: MutationFilters = {}): Array<Mutation> {\n return this.getAll().filter((mutation) => matchMutation(filters, mutation))\n }\n\n notify(event: MutationCacheNotifyEvent) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event)\n })\n })\n }\n\n resumePausedMutations(): Promise<unknown> {\n const pausedMutations = this.getAll().filter((x) => x.state.isPaused)\n\n return notifyManager.batch(() =>\n Promise.all(\n pausedMutations.map((mutation) => mutation.continue().catch(noop)),\n ),\n )\n }\n}\n\nfunction scopeFor(mutation: Mutation<any, any, any, any>) {\n return mutation.options.scope?.id\n}\n", "import { addToEnd, addToStart, ensureQueryFn } from './utils'\nimport type { QueryBehavior } from './query'\nimport type {\n InfiniteData,\n InfiniteQueryPageParamsOptions,\n OmitKeyof,\n QueryFunctionContext,\n QueryKey,\n} from './types'\n\nexport function infiniteQueryBehavior<TQueryFnData, TError, TData, TPageParam>(\n pages?: number,\n): QueryBehavior<TQueryFnData, TError, InfiniteData<TData, TPageParam>> {\n return {\n onFetch: (context, query) => {\n const options = context.options as InfiniteQueryPageParamsOptions<TData>\n const direction = context.fetchOptions?.meta?.fetchMore?.direction\n const oldPages = context.state.data?.pages || []\n const oldPageParams = context.state.data?.pageParams || []\n let result: InfiniteData<unknown> = { pages: [], pageParams: [] }\n let currentPage = 0\n\n const fetchFn = async () => {\n let cancelled = false\n const addSignalProperty = (object: unknown) => {\n Object.defineProperty(object, 'signal', {\n enumerable: true,\n get: () => {\n if (context.signal.aborted) {\n cancelled = true\n } else {\n context.signal.addEventListener('abort', () => {\n cancelled = true\n })\n }\n return context.signal\n },\n })\n }\n\n const queryFn = ensureQueryFn(context.options, context.fetchOptions)\n\n // Create function to fetch a page\n const fetchPage = async (\n data: InfiniteData<unknown>,\n param: unknown,\n previous?: boolean,\n ): Promise<InfiniteData<unknown>> => {\n if (cancelled) {\n return Promise.reject()\n }\n\n if (param == null && data.pages.length) {\n return Promise.resolve(data)\n }\n\n const queryFnContext: OmitKeyof<\n QueryFunctionContext<QueryKey, unknown>,\n 'signal'\n > = {\n client: context.client,\n queryKey: context.queryKey,\n pageParam: param,\n direction: previous ? 'backward' : 'forward',\n meta: context.options.meta,\n }\n\n addSignalProperty(queryFnContext)\n\n const page = await queryFn(\n queryFnContext as QueryFunctionContext<QueryKey, unknown>,\n )\n\n const { maxPages } = context.options\n const addTo = previous ? addToStart : addToEnd\n\n return {\n pages: addTo(data.pages, page, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages),\n }\n }\n\n // fetch next / previous page?\n if (direction && oldPages.length) {\n const previous = direction === 'backward'\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam\n const oldData = {\n pages: oldPages,\n pageParams: oldPageParams,\n }\n const param = pageParamFn(options, oldData)\n\n result = await fetchPage(oldData, param, previous)\n } else {\n const remainingPages = pages ?? oldPages.length\n\n // Fetch all pages\n do {\n const param =\n currentPage === 0\n ? (oldPageParams[0] ?? options.initialPageParam)\n : getNextPageParam(options, result)\n if (currentPage > 0 && param == null) {\n break\n }\n result = await fetchPage(result, param)\n currentPage++\n } while (currentPage < remainingPages)\n }\n\n return result\n }\n if (context.options.persister) {\n context.fetchFn = () => {\n return context.options.persister?.(\n fetchFn as any,\n {\n client: context.client,\n queryKey: context.queryKey,\n meta: context.options.meta,\n signal: context.signal,\n },\n query,\n )\n }\n } else {\n context.fetchFn = fetchFn\n }\n },\n }\n}\n\nfunction getNextPageParam(\n options: InfiniteQueryPageParamsOptions<any>,\n { pages, pageParams }: InfiniteData<unknown>,\n): unknown | undefined {\n const lastIndex = pages.length - 1\n return pages.length > 0\n ? options.getNextPageParam(\n pages[lastIndex],\n pages,\n pageParams[lastIndex],\n pageParams,\n )\n : undefined\n}\n\nfunction getPreviousPageParam(\n options: InfiniteQueryPageParamsOptions<any>,\n { pages, pageParams }: InfiniteData<unknown>,\n): unknown | undefined {\n return pages.length > 0\n ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams)\n : undefined\n}\n\n/**\n * Checks if there is a next page.\n */\nexport function hasNextPage(\n options: InfiniteQueryPageParamsOptions<any, any>,\n data?: InfiniteData<unknown>,\n): boolean {\n if (!data) return false\n return getNextPageParam(options, data) != null\n}\n\n/**\n * Checks if there is a previous page.\n */\nexport function hasPreviousPage(\n options: InfiniteQueryPageParamsOptions<any, any>,\n data?: InfiniteData<unknown>,\n): boolean {\n if (!data || !options.getPreviousPageParam) return false\n return getPreviousPageParam(options, data) != null\n}\n", "import {\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n noop,\n partialMatchKey,\n resolveStaleTime,\n skipToken,\n} from './utils'\nimport { QueryCache } from './queryCache'\nimport { MutationCache } from './mutationCache'\nimport { focusManager } from './focusManager'\nimport { onlineManager } from './onlineManager'\nimport { notifyManager } from './notifyManager'\nimport { infiniteQueryBehavior } from './infiniteQueryBehavior'\nimport type {\n CancelOptions,\n DefaultError,\n DefaultOptions,\n DefaultedQueryObserverOptions,\n EnsureInfiniteQueryDataOptions,\n EnsureQueryDataOptions,\n FetchInfiniteQueryOptions,\n FetchQueryOptions,\n InferDataFromTag,\n InferErrorFromTag,\n InfiniteData,\n InvalidateOptions,\n InvalidateQueryFilters,\n MutationKey,\n MutationObserverOptions,\n MutationOptions,\n NoInfer,\n OmitKeyof,\n QueryClientConfig,\n QueryKey,\n QueryObserverOptions,\n QueryOptions,\n RefetchOptions,\n RefetchQueryFilters,\n ResetOptions,\n SetDataOptions,\n} from './types'\nimport type { QueryState } from './query'\nimport type { MutationFilters, QueryFilters, Updater } from './utils'\n\n// TYPES\n\ninterface QueryDefaults {\n queryKey: QueryKey\n defaultOptions: OmitKeyof<QueryOptions<any, any, any>, 'queryKey'>\n}\n\ninterface MutationDefaults {\n mutationKey: MutationKey\n defaultOptions: MutationOptions<any, any, any, any>\n}\n\n// CLASS\n\nexport class QueryClient {\n #queryCache: QueryCache\n #mutationCache: MutationCache\n #defaultOptions: DefaultOptions\n #queryDefaults: Map<string, QueryDefaults>\n #mutationDefaults: Map<string, MutationDefaults>\n #mountCount: number\n #unsubscribeFocus?: () => void\n #unsubscribeOnline?: () => void\n\n constructor(config: QueryClientConfig = {}) {\n this.#queryCache = config.queryCache || new QueryCache()\n this.#mutationCache = config.mutationCache || new MutationCache()\n this.#defaultOptions = config.defaultOptions || {}\n this.#queryDefaults = new Map()\n this.#mutationDefaults = new Map()\n this.#mountCount = 0\n }\n\n mount(): void {\n this.#mountCount++\n if (this.#mountCount !== 1) return\n\n this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n if (focused) {\n await this.resumePausedMutations()\n this.#queryCache.onFocus()\n }\n })\n this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n if (online) {\n await this.resumePausedMutations()\n this.#queryCache.onOnline()\n }\n })\n }\n\n unmount(): void {\n this.#mountCount--\n if (this.#mountCount !== 0) return\n\n this.#unsubscribeFocus?.()\n this.#unsubscribeFocus = undefined\n\n this.#unsubscribeOnline?.()\n this.#unsubscribeOnline = undefined\n }\n\n isFetching<\n TQueryFilters extends QueryFilters<any, any, any, any> = QueryFilters,\n >(filters?: TQueryFilters): number {\n return this.#queryCache.findAll({ ...filters, fetchStatus: 'fetching' })\n .length\n }\n\n isMutating<\n TMutationFilters extends MutationFilters<any, any> = MutationFilters,\n >(filters?: TMutationFilters): number {\n return this.#mutationCache.findAll({ ...filters, status: 'pending' }).length\n }\n\n getQueryData<\n TQueryFnData = unknown,\n TTaggedQueryKey extends QueryKey = QueryKey,\n TInferredQueryFnData = InferDataFromTag<TQueryFnData, TTaggedQueryKey>,\n >(queryKey: TTaggedQueryKey): TInferredQueryFnData | undefined {\n const options = this.defaultQueryOptions({ queryKey })\n\n return this.#queryCache.get(options.queryHash)?.state.data as\n | TInferredQueryFnData\n | undefined\n }\n\n ensureQueryData<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n >(\n options: EnsureQueryDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n ): Promise<TData> {\n const defaultedOptions = this.defaultQueryOptions(options)\n const query = this.#queryCache.build(this, defaultedOptions)\n const cachedData = query.state.data\n\n if (cachedData === undefined) {\n return this.fetchQuery(options)\n }\n\n if (\n options.revalidateIfStale &&\n query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))\n ) {\n void this.prefetchQuery(defaultedOptions)\n }\n\n return Promise.resolve(cachedData)\n }\n\n getQueriesData<\n TQueryFnData = unknown,\n TQueryFilters extends QueryFilters<\n any,\n any,\n any,\n any\n > = QueryFilters<TQueryFnData>,\n TInferredQueryFnData = TQueryFilters extends QueryFilters<\n infer TData,\n any,\n any,\n any\n >\n ? TData\n : TQueryFnData,\n >(\n filters: TQueryFilters,\n ): Array<[QueryKey, TInferredQueryFnData | undefined]> {\n return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n const data = state.data as TInferredQueryFnData | undefined\n return [queryKey, data]\n })\n }\n\n setQueryData<\n TQueryFnData = unknown,\n TTaggedQueryKey extends QueryKey = QueryKey,\n TInferredQueryFnData = InferDataFromTag<TQueryFnData, TTaggedQueryKey>,\n >(\n queryKey: TTaggedQueryKey,\n updater: Updater<\n NoInfer<TInferredQueryFnData> | undefined,\n NoInfer<TInferredQueryFnData> | undefined\n >,\n options?: SetDataOptions,\n ): TInferredQueryFnData | undefined {\n const defaultedOptions = this.defaultQueryOptions<\n any,\n any,\n unknown,\n any,\n QueryKey\n >({ queryKey })\n\n const query = this.#queryCache.get<TInferredQueryFnData>(\n defaultedOptions.queryHash,\n )\n const prevData = query?.state.data\n const data = functionalUpdate(updater, prevData)\n\n if (data === undefined) {\n return undefined\n }\n\n return this.#queryCache\n .build(this, defaultedOptions)\n .setData(data, { ...options, manual: true })\n }\n\n setQueriesData<\n TQueryFnData,\n TQueryFilters extends QueryFilters<\n any,\n any,\n any,\n any\n > = QueryFilters<TQueryFnData>,\n TInferredQueryFnData = TQueryFilters extends QueryFilters<\n infer TData,\n any,\n any,\n any\n >\n ? TData\n : TQueryFnData,\n >(\n filters: TQueryFilters,\n updater: Updater<\n NoInfer<TInferredQueryFnData> | undefined,\n NoInfer<TInferredQueryFnData> | undefined\n >,\n options?: SetDataOptions,\n ): Array<[QueryKey, TInferredQueryFnData | undefined]> {\n return notifyManager.batch(() =>\n this.#queryCache\n .findAll(filters)\n .map(({ queryKey }) => [\n queryKey,\n this.setQueryData<TInferredQueryFnData>(queryKey, updater, options),\n ]),\n )\n }\n\n getQueryState<\n TQueryFnData = unknown,\n TError = DefaultError,\n TTaggedQueryKey extends QueryKey = QueryKey,\n TInferredQueryFnData = InferDataFromTag<TQueryFnData, TTaggedQueryKey>,\n TInferredError = InferErrorFromTag<TError, TTaggedQueryKey>,\n >(\n queryKey: TTaggedQueryKey,\n ): QueryState<TInferredQueryFnData, TInferredError> | undefined {\n const options = this.defaultQueryOptions({ queryKey })\n return this.#queryCache.get<TInferredQueryFnData, TInferredError>(\n options.queryHash,\n )?.state\n }\n\n removeQueries<\n TQueryFnData = unknown,\n TError = DefaultError,\n TTaggedQueryKey extends QueryKey = QueryKey,\n TInferredQueryFnData = InferDataFromTag<TQueryFnData, TTaggedQueryKey>,\n TInferredError = InferErrorFromTag<TError, TTaggedQueryKey>,\n >(\n filters?: QueryFilters<\n TInferredQueryFnData,\n TInferredError,\n TInferredQueryFnData,\n TTaggedQueryKey\n >,\n ): void {\n const queryCache = this.#queryCache\n notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n queryCache.remove(query)\n })\n })\n }\n\n resetQueries<\n TQueryFnData = unknown,\n TError = DefaultError,\n TTaggedQueryKey extends QueryKey = QueryKey,\n TInferredQueryFnData = InferDataFromTag<TQueryFnData, TTaggedQueryKey>,\n TInferredError = InferErrorFromTag<TError, TTaggedQueryKey>,\n >(\n filters?: QueryFilters<\n TInferredQueryFnData,\n TInferredError,\n TInferredQueryFnData,\n TTaggedQueryKey\n >,\n options?: ResetOptions,\n ): Promise<void> {\n const queryCache = this.#queryCache\n\n return notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n query.reset()\n })\n return this.refetchQueries(\n {\n type: 'active',\n ...filters,\n },\n options,\n )\n })\n }\n\n cancelQueries<\n TQueryFnData = unknown,\n TError = DefaultError,\n TTaggedQueryKey extends QueryKey = QueryKey,\n TInferredQueryFnData = InferDataFromTag<TQueryFnData, TTaggedQueryKey>,\n TInferredError = InferErrorFromTag<TError, TTaggedQueryKey>,\n >(\n filters?: QueryFilters<\n TInferredQueryFnData,\n TInferredError,\n TInferredQueryFnData,\n TTaggedQueryKey\n >,\n cancelOptions: CancelOptions = {},\n ): Promise<void> {\n const defaultedCancelOptions = { revert: true, ...cancelOptions }\n\n const promises = notifyManager.batch(() =>\n this.#queryCache\n .findAll(filters)\n .map((query) => query.cancel(defaultedCancelOptions)),\n )\n\n return Promise.all(promises).then(noop).catch(noop)\n }\n\n invalidateQueries<\n TQueryFnData = unknown,\n TError = DefaultError,\n TTaggedQueryKey extends QueryKey = QueryKey,\n TInferredQueryFnData = InferDataFromTag<TQueryFnData, TTaggedQueryKey>,\n TInferredError = InferErrorFromTag<TError, TTaggedQueryKey>,\n >(\n filters?: InvalidateQueryFilters<\n TInferredQueryFnData,\n TInferredError,\n TInferredQueryFnData,\n TTaggedQueryKey\n >,\n options: InvalidateOptions = {},\n ): Promise<void> {\n return notifyManager.batch(() => {\n this.#queryCache.findAll(filters).forEach((query) => {\n query.invalidate()\n })\n\n if (filters?.refetchType === 'none') {\n return Promise.resolve()\n }\n return this.refetchQueries(\n {\n ...filters,\n type: filters?.refetchType ?? filters?.type ?? 'active',\n },\n options,\n )\n })\n }\n\n refetchQueries<\n TQueryFnData = unknown,\n TError = DefaultError,\n TTaggedQueryKey extends QueryKey = QueryKey,\n TInferredQueryFnData = InferDataFromTag<TQueryFnData, TTaggedQueryKey>,\n TInferredError = InferErrorFromTag<TError, TTaggedQueryKey>,\n >(\n filters?: RefetchQueryFilters<\n TInferredQueryFnData,\n TInferredError,\n TInferredQueryFnData,\n TTaggedQueryKey\n >,\n options: RefetchOptions = {},\n ): Promise<void> {\n const fetchOptions = {\n ...options,\n cancelRefetch: options.cancelRefetch ?? true,\n }\n const promises = notifyManager.batch(() =>\n this.#queryCache\n .findAll(filters)\n .filter((query) => !query.isDisabled())\n .map((query) => {\n let promise = query.fetch(undefined, fetchOptions)\n if (!fetchOptions.throwOnError) {\n promise = promise.catch(noop)\n }\n return query.state.fetchStatus === 'paused'\n ? Promise.resolve()\n : promise\n }),\n )\n\n return Promise.all(promises).then(noop)\n }\n\n fetchQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n >(\n options: FetchQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n ): Promise<TData> {\n const defaultedOptions = this.defaultQueryOptions(options)\n\n // https://github.com/tannerlinsley/react-query/issues/652\n if (defaultedOptions.retry === undefined) {\n defaultedOptions.retry = false\n }\n\n const query = this.#queryCache.build(this, defaultedOptions)\n\n return query.isStaleByTime(\n resolveStaleTime(defaultedOptions.staleTime, query),\n )\n ? query.fetch(defaultedOptions)\n : Promise.resolve(query.state.data as TData)\n }\n\n prefetchQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n >(\n options: FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n ): Promise<void> {\n return this.fetchQuery(options).then(noop).catch(noop)\n }\n\n fetchInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n >(\n options: FetchInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n ): Promise<InfiniteData<TData, TPageParam>> {\n options.behavior = infiniteQueryBehavior<\n TQueryFnData,\n TError,\n TData,\n TPageParam\n >(options.pages)\n return this.fetchQuery(options as any)\n }\n\n prefetchInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n >(\n options: FetchInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n ): Promise<void> {\n return this.fetchInfiniteQuery(options).then(noop).catch(noop)\n }\n\n ensureInfiniteQueryData<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n >(\n options: EnsureInfiniteQueryDataOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n ): Promise<InfiniteData<TData, TPageParam>> {\n options.behavior = infiniteQueryBehavior<\n TQueryFnData,\n TError,\n TData,\n TPageParam\n >(options.pages)\n\n return this.ensureQueryData(options as any)\n }\n\n resumePausedMutations(): Promise<unknown> {\n if (onlineManager.isOnline()) {\n return this.#mutationCache.resumePausedMutations()\n }\n return Promise.resolve()\n }\n\n getQueryCache(): QueryCache {\n return this.#queryCache\n }\n\n getMutationCache(): MutationCache {\n return this.#mutationCache\n }\n\n getDefaultOptions(): DefaultOptions {\n return this.#defaultOptions\n }\n\n setDefaultOptions(options: DefaultOptions): void {\n this.#defaultOptions = options\n }\n\n setQueryDefaults<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n >(\n queryKey: QueryKey,\n options: Partial<\n OmitKeyof<\n QueryObserverOptions<TQueryFnData, TError, TData, TQueryData>,\n 'queryKey'\n >\n >,\n ): void {\n this.#queryDefaults.set(hashKey(queryKey), {\n queryKey,\n defaultOptions: options,\n })\n }\n\n getQueryDefaults(\n queryKey: QueryKey,\n ): OmitKeyof<QueryObserverOptions<any, any, any, any, any>, 'queryKey'> {\n const defaults = [...this.#queryDefaults.values()]\n\n const result: OmitKeyof<\n QueryObserverOptions<any, any, any, any, any>,\n 'queryKey'\n > = {}\n\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n Object.assign(result, queryDefault.defaultOptions)\n }\n })\n return result\n }\n\n setMutationDefaults<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n >(\n mutationKey: MutationKey,\n options: OmitKeyof<\n MutationObserverOptions<TData, TError, TVariables, TContext>,\n 'mutationKey'\n >,\n ): void {\n this.#mutationDefaults.set(hashKey(mutationKey), {\n mutationKey,\n defaultOptions: options,\n })\n }\n\n getMutationDefaults(\n mutationKey: MutationKey,\n ): OmitKeyof<MutationObserverOptions<any, any, any, any>, 'mutationKey'> {\n const defaults = [...this.#mutationDefaults.values()]\n\n const result: OmitKeyof<\n MutationObserverOptions<any, any, any, any>,\n 'mutationKey'\n > = {}\n\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n Object.assign(result, queryDefault.defaultOptions)\n }\n })\n\n return result\n }\n\n defaultQueryOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n >(\n options:\n | QueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >\n | DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n ): DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n > {\n if (options._defaulted) {\n return options as DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >\n }\n\n const defaultedOptions = {\n ...this.#defaultOptions.queries,\n ...this.getQueryDefaults(options.queryKey),\n ...options,\n _defaulted: true,\n }\n\n if (!defaultedOptions.queryHash) {\n defaultedOptions.queryHash = hashQueryKeyByOptions(\n defaultedOptions.queryKey,\n defaultedOptions,\n )\n }\n\n // dependent default values\n if (defaultedOptions.refetchOnReconnect === undefined) {\n defaultedOptions.refetchOnReconnect =\n defaultedOptions.networkMode !== 'always'\n }\n if (defaultedOptions.throwOnError === undefined) {\n defaultedOptions.throwOnError = !!defaultedOptions.suspense\n }\n\n if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n defaultedOptions.networkMode = 'offlineFirst'\n }\n\n if (defaultedOptions.queryFn === skipToken) {\n defaultedOptions.enabled = false\n }\n\n return defaultedOptions as DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >\n }\n\n defaultMutationOptions<T extends MutationOptions<any, any, any, any>>(\n options?: T,\n ): T {\n if (options?._defaulted) {\n return options\n }\n return {\n ...this.#defaultOptions.mutations,\n ...(options?.mutationKey &&\n this.getMutationDefaults(options.mutationKey)),\n ...options,\n _defaulted: true,\n } as T\n }\n\n clear(): void {\n this.#queryCache.clear()\n this.#mutationCache.clear()\n }\n}\n", "import { focusManager } from './focusManager'\nimport { notifyManager } from './notifyManager'\nimport { fetchState } from './query'\nimport { Subscribable } from './subscribable'\nimport { pendingThenable } from './thenable'\nimport {\n isServer,\n isValidTimeout,\n noop,\n replaceData,\n resolveEnabled,\n resolveStaleTime,\n shallowEqualObjects,\n timeUntilStale,\n} from './utils'\nimport type { FetchOptions, Query, QueryState } from './query'\nimport type { QueryClient } from './queryClient'\nimport type { PendingThenable, Thenable } from './thenable'\nimport type {\n DefaultError,\n DefaultedQueryObserverOptions,\n PlaceholderDataFunction,\n QueryKey,\n QueryObserverBaseResult,\n QueryObserverOptions,\n QueryObserverResult,\n QueryOptions,\n RefetchOptions,\n} from './types'\n\ntype QueryObserverListener<TData, TError> = (\n result: QueryObserverResult<TData, TError>,\n) => void\n\nexport interface NotifyOptions {\n listeners?: boolean\n}\n\ninterface ObserverFetchOptions extends FetchOptions {\n throwOnError?: boolean\n}\n\nexport class QueryObserver<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> extends Subscribable<QueryObserverListener<TData, TError>> {\n #client: QueryClient\n #currentQuery: Query<TQueryFnData, TError, TQueryData, TQueryKey> = undefined!\n #currentQueryInitialState: QueryState<TQueryData, TError> = undefined!\n #currentResult: QueryObserverResult<TData, TError> = undefined!\n #currentResultState?: QueryState<TQueryData, TError>\n #currentResultOptions?: QueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >\n #currentThenable: Thenable<TData>\n #selectError: TError | null\n #selectFn?: (data: TQueryData) => TData\n #selectResult?: TData\n // This property keeps track of the last query with defined data.\n // It will be used to pass the previous data and query to the placeholder function between renders.\n #lastQueryWithDefinedData?: Query<TQueryFnData, TError, TQueryData, TQueryKey>\n #staleTimeoutId?: ReturnType<typeof setTimeout>\n #refetchIntervalId?: ReturnType<typeof setInterval>\n #currentRefetchInterval?: number | false\n #trackedProps = new Set<keyof QueryObserverResult>()\n\n constructor(\n client: QueryClient,\n public options: QueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n ) {\n super()\n\n this.#client = client\n this.#selectError = null\n this.#currentThenable = pendingThenable()\n if (!this.options.experimental_prefetchInRender) {\n this.#currentThenable.reject(\n new Error('experimental_prefetchInRender feature flag is not enabled'),\n )\n }\n\n this.bindMethods()\n this.setOptions(options)\n }\n\n protected bindMethods(): void {\n this.refetch = this.refetch.bind(this)\n }\n\n protected onSubscribe(): void {\n if (this.listeners.size === 1) {\n this.#currentQuery.addObserver(this)\n\n if (shouldFetchOnMount(this.#currentQuery, this.options)) {\n this.#executeFetch()\n } else {\n this.updateResult()\n }\n\n this.#updateTimers()\n }\n }\n\n protected onUnsubscribe(): void {\n if (!this.hasListeners()) {\n this.destroy()\n }\n }\n\n shouldFetchOnReconnect(): boolean {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnReconnect,\n )\n }\n\n shouldFetchOnWindowFocus(): boolean {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnWindowFocus,\n )\n }\n\n destroy(): void {\n this.listeners = new Set()\n this.#clearStaleTimeout()\n this.#clearRefetchInterval()\n this.#currentQuery.removeObserver(this)\n }\n\n setOptions(\n options: QueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n notifyOptions?: NotifyOptions,\n ): void {\n const prevOptions = this.options\n const prevQuery = this.#currentQuery\n\n this.options = this.#client.defaultQueryOptions(options)\n\n if (\n this.options.enabled !== undefined &&\n typeof this.options.enabled !== 'boolean' &&\n typeof this.options.enabled !== 'function' &&\n typeof resolveEnabled(this.options.enabled, this.#currentQuery) !==\n 'boolean'\n ) {\n throw new Error(\n 'Expected enabled to be a boolean or a callback that returns a boolean',\n )\n }\n\n this.#updateQuery()\n this.#currentQuery.setOptions(this.options)\n\n if (\n prevOptions._defaulted &&\n !shallowEqualObjects(this.options, prevOptions)\n ) {\n this.#client.getQueryCache().notify({\n type: 'observerOptionsUpdated',\n query: this.#currentQuery,\n observer: this,\n })\n }\n\n const mounted = this.hasListeners()\n\n // Fetch if there are subscribers\n if (\n mounted &&\n shouldFetchOptionally(\n this.#currentQuery,\n prevQuery,\n this.options,\n prevOptions,\n )\n ) {\n this.#executeFetch()\n }\n\n // Update result\n this.updateResult(notifyOptions)\n\n // Update stale interval if needed\n if (\n mounted &&\n (this.#currentQuery !== prevQuery ||\n resolveEnabled(this.options.enabled, this.#currentQuery) !==\n resolveEnabled(prevOptions.enabled, this.#currentQuery) ||\n resolveStaleTime(this.options.staleTime, this.#currentQuery) !==\n resolveStaleTime(prevOptions.staleTime, this.#currentQuery))\n ) {\n this.#updateStaleTimeout()\n }\n\n const nextRefetchInterval = this.#computeRefetchInterval()\n\n // Update refetch interval if needed\n if (\n mounted &&\n (this.#currentQuery !== prevQuery ||\n resolveEnabled(this.options.enabled, this.#currentQuery) !==\n resolveEnabled(prevOptions.enabled, this.#currentQuery) ||\n nextRefetchInterval !== this.#currentRefetchInterval)\n ) {\n this.#updateRefetchInterval(nextRefetchInterval)\n }\n }\n\n getOptimisticResult(\n options: DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n ): QueryObserverResult<TData, TError> {\n const query = this.#client.getQueryCache().build(this.#client, options)\n\n const result = this.createResult(query, options)\n\n if (shouldAssignObserverCurrentProperties(this, result)) {\n // this assigns the optimistic result to the current Observer\n // because if the query function changes, useQuery will be performing\n // an effect where it would fetch again.\n // When the fetch finishes, we perform a deep data cloning in order\n // to reuse objects references. This deep data clone is performed against\n // the `observer.currentResult.data` property\n // When QueryKey changes, we refresh the query and get new `optimistic`\n // result, while we leave the `observer.currentResult`, so when new data\n // arrives, it finds the old `observer.currentResult` which is related\n // to the old QueryKey. Which means that currentResult and selectData are\n // out of sync already.\n // To solve this, we move the cursor of the currentResult every time\n // an observer reads an optimistic value.\n\n // When keeping the previous data, the result doesn't change until new\n // data arrives.\n this.#currentResult = result\n this.#currentResultOptions = this.options\n this.#currentResultState = this.#currentQuery.state\n }\n return result\n }\n\n getCurrentResult(): QueryObserverResult<TData, TError> {\n return this.#currentResult\n }\n\n trackResult(\n result: QueryObserverResult<TData, TError>,\n onPropTracked?: (key: keyof QueryObserverResult) => void,\n ): QueryObserverResult<TData, TError> {\n const trackedResult = {} as QueryObserverResult<TData, TError>\n\n Object.keys(result).forEach((key) => {\n Object.defineProperty(trackedResult, key, {\n configurable: false,\n enumerable: true,\n get: () => {\n this.trackProp(key as keyof QueryObserverResult)\n onPropTracked?.(key as keyof QueryObserverResult)\n return result[key as keyof QueryObserverResult]\n },\n })\n })\n\n return trackedResult\n }\n\n trackProp(key: keyof QueryObserverResult) {\n this.#trackedProps.add(key)\n }\n\n getCurrentQuery(): Query<TQueryFnData, TError, TQueryData, TQueryKey> {\n return this.#currentQuery\n }\n\n refetch({ ...options }: RefetchOptions = {}): Promise<\n QueryObserverResult<TData, TError>\n > {\n return this.fetch({\n ...options,\n })\n }\n\n fetchOptimistic(\n options: QueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n ): Promise<QueryObserverResult<TData, TError>> {\n const defaultedOptions = this.#client.defaultQueryOptions(options)\n\n const query = this.#client\n .getQueryCache()\n .build(this.#client, defaultedOptions)\n\n return query.fetch().then(() => this.createResult(query, defaultedOptions))\n }\n\n protected fetch(\n fetchOptions: ObserverFetchOptions,\n ): Promise<QueryObserverResult<TData, TError>> {\n return this.#executeFetch({\n ...fetchOptions,\n cancelRefetch: fetchOptions.cancelRefetch ?? true,\n }).then(() => {\n this.updateResult()\n return this.#currentResult\n })\n }\n\n #executeFetch(\n fetchOptions?: Omit<ObserverFetchOptions, 'initialPromise'>,\n ): Promise<TQueryData | undefined> {\n // Make sure we reference the latest query as the current one might have been removed\n this.#updateQuery()\n\n // Fetch\n let promise: Promise<TQueryData | undefined> = this.#currentQuery.fetch(\n this.options as QueryOptions<TQueryFnData, TError, TQueryData, TQueryKey>,\n fetchOptions,\n )\n\n if (!fetchOptions?.throwOnError) {\n promise = promise.catch(noop)\n }\n\n return promise\n }\n\n #updateStaleTimeout(): void {\n this.#clearStaleTimeout()\n const staleTime = resolveStaleTime(\n this.options.staleTime,\n this.#currentQuery,\n )\n\n if (isServer || this.#currentResult.isStale || !isValidTimeout(staleTime)) {\n return\n }\n\n const time = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime)\n\n // The timeout is sometimes triggered 1 ms before the stale time expiration.\n // To mitigate this issue we always add 1 ms to the timeout.\n const timeout = time + 1\n\n this.#staleTimeoutId = setTimeout(() => {\n if (!this.#currentResult.isStale) {\n this.updateResult()\n }\n }, timeout)\n }\n\n #computeRefetchInterval() {\n return (\n (typeof this.options.refetchInterval === 'function'\n ? this.options.refetchInterval(this.#currentQuery)\n : this.options.refetchInterval) ?? false\n )\n }\n\n #updateRefetchInterval(nextInterval: number | false): void {\n this.#clearRefetchInterval()\n\n this.#currentRefetchInterval = nextInterval\n\n if (\n isServer ||\n resolveEnabled(this.options.enabled, this.#currentQuery) === false ||\n !isValidTimeout(this.#currentRefetchInterval) ||\n this.#currentRefetchInterval === 0\n ) {\n return\n }\n\n this.#refetchIntervalId = setInterval(() => {\n if (\n this.options.refetchIntervalInBackground ||\n focusManager.isFocused()\n ) {\n this.#executeFetch()\n }\n }, this.#currentRefetchInterval)\n }\n\n #updateTimers(): void {\n this.#updateStaleTimeout()\n this.#updateRefetchInterval(this.#computeRefetchInterval())\n }\n\n #clearStaleTimeout(): void {\n if (this.#staleTimeoutId) {\n clearTimeout(this.#staleTimeoutId)\n this.#staleTimeoutId = undefined\n }\n }\n\n #clearRefetchInterval(): void {\n if (this.#refetchIntervalId) {\n clearInterval(this.#refetchIntervalId)\n this.#refetchIntervalId = undefined\n }\n }\n\n protected createResult(\n query: Query<TQueryFnData, TError, TQueryData, TQueryKey>,\n options: QueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n ): QueryObserverResult<TData, TError> {\n const prevQuery = this.#currentQuery\n const prevOptions = this.options\n const prevResult = this.#currentResult as\n | QueryObserverResult<TData, TError>\n | undefined\n const prevResultState = this.#currentResultState\n const prevResultOptions = this.#currentResultOptions\n const queryChange = query !== prevQuery\n const queryInitialState = queryChange\n ? query.state\n : this.#currentQueryInitialState\n\n const { state } = query\n let newState = { ...state }\n let isPlaceholderData = false\n let data: TData | undefined\n\n // Optimistically set result in fetching state if needed\n if (options._optimisticResults) {\n const mounted = this.hasListeners()\n\n const fetchOnMount = !mounted && shouldFetchOnMount(query, options)\n\n const fetchOptionally =\n mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions)\n\n if (fetchOnMount || fetchOptionally) {\n newState = {\n ...newState,\n ...fetchState(state.data, query.options),\n }\n }\n if (options._optimisticResults === 'isRestoring') {\n newState.fetchStatus = 'idle'\n }\n }\n\n let { error, errorUpdatedAt, status } = newState\n\n // Select data if needed\n if (options.select && newState.data !== undefined) {\n // Memoize select result\n if (\n prevResult &&\n newState.data === prevResultState?.data &&\n options.select === this.#selectFn\n ) {\n data = this.#selectResult\n } else {\n try {\n this.#selectFn = options.select\n data = options.select(newState.data)\n data = replaceData(prevResult?.data, data, options)\n this.#selectResult = data\n this.#selectError = null\n } catch (selectError) {\n this.#selectError = selectError as TError\n }\n }\n }\n // Use query data\n else {\n data = newState.data as unknown as TData\n }\n\n // Show placeholder data if needed\n if (\n options.placeholderData !== undefined &&\n data === undefined &&\n status === 'pending'\n ) {\n let placeholderData\n\n // Memoize placeholder data\n if (\n prevResult?.isPlaceholderData &&\n options.placeholderData === prevResultOptions?.placeholderData\n ) {\n placeholderData = prevResult.data\n } else {\n placeholderData =\n typeof options.placeholderData === 'function'\n ? (\n options.placeholderData as unknown as PlaceholderDataFunction<TQueryData>\n )(\n this.#lastQueryWithDefinedData?.state.data,\n this.#lastQueryWithDefinedData as any,\n )\n : options.placeholderData\n if (options.select && placeholderData !== undefined) {\n try {\n placeholderData = options.select(placeholderData)\n this.#selectError = null\n } catch (selectError) {\n this.#selectError = selectError as TError\n }\n }\n }\n\n if (placeholderData !== undefined) {\n status = 'success'\n data = replaceData(\n prevResult?.data,\n placeholderData as unknown,\n options,\n ) as TData\n isPlaceholderData = true\n }\n }\n\n if (this.#selectError) {\n error = this.#selectError as any\n data = this.#selectResult\n errorUpdatedAt = Date.now()\n status = 'error'\n }\n\n const isFetching = newState.fetchStatus === 'fetching'\n const isPending = status === 'pending'\n const isError = status === 'error'\n\n const isLoading = isPending && isFetching\n const hasData = data !== undefined\n\n const result: QueryObserverBaseResult<TData, TError> = {\n status,\n fetchStatus: newState.fetchStatus,\n isPending,\n isSuccess: status === 'success',\n isError,\n isInitialLoading: isLoading,\n isLoading,\n data,\n dataUpdatedAt: newState.dataUpdatedAt,\n error,\n errorUpdatedAt,\n failureCount: newState.fetchFailureCount,\n failureReason: newState.fetchFailureReason,\n errorUpdateCount: newState.errorUpdateCount,\n isFetched: newState.dataUpdateCount > 0 || newState.errorUpdateCount > 0,\n isFetchedAfterMount:\n newState.dataUpdateCount > queryInitialState.dataUpdateCount ||\n newState.errorUpdateCount > queryInitialState.errorUpdateCount,\n isFetching,\n isRefetching: isFetching && !isPending,\n isLoadingError: isError && !hasData,\n isPaused: newState.fetchStatus === 'paused',\n isPlaceholderData,\n isRefetchError: isError && hasData,\n isStale: isStale(query, options),\n refetch: this.refetch,\n promise: this.#currentThenable,\n }\n\n const nextResult = result as QueryObserverResult<TData, TError>\n\n if (this.options.experimental_prefetchInRender) {\n const finalizeThenableIfPossible = (thenable: PendingThenable<TData>) => {\n if (nextResult.status === 'error') {\n thenable.reject(nextResult.error)\n } else if (nextResult.data !== undefined) {\n thenable.resolve(nextResult.data)\n }\n }\n\n /**\n * Create a new thenable and result promise when the results have changed\n */\n const recreateThenable = () => {\n const pending =\n (this.#currentThenable =\n nextResult.promise =\n pendingThenable())\n\n finalizeThenableIfPossible(pending)\n }\n\n const prevThenable = this.#currentThenable\n switch (prevThenable.status) {\n case 'pending':\n // Finalize the previous thenable if it was pending\n // and we are still observing the same query\n if (query.queryHash === prevQuery.queryHash) {\n finalizeThenableIfPossible(prevThenable)\n }\n break\n case 'fulfilled':\n if (\n nextResult.status === 'error' ||\n nextResult.data !== prevThenable.value\n ) {\n recreateThenable()\n }\n break\n case 'rejected':\n if (\n nextResult.status !== 'error' ||\n nextResult.error !== prevThenable.reason\n ) {\n recreateThenable()\n }\n break\n }\n }\n\n return nextResult\n }\n\n updateResult(notifyOptions?: NotifyOptions): void {\n const prevResult = this.#currentResult as\n | QueryObserverResult<TData, TError>\n | undefined\n\n const nextResult = this.createResult(this.#currentQuery, this.options)\n\n this.#currentResultState = this.#currentQuery.state\n this.#currentResultOptions = this.options\n\n if (this.#currentResultState.data !== undefined) {\n this.#lastQueryWithDefinedData = this.#currentQuery\n }\n\n // Only notify and update result if something has changed\n if (shallowEqualObjects(nextResult, prevResult)) {\n return\n }\n\n this.#currentResult = nextResult\n\n // Determine which callbacks to trigger\n const defaultNotifyOptions: NotifyOptions = {}\n\n const shouldNotifyListeners = (): boolean => {\n if (!prevResult) {\n return true\n }\n\n const { notifyOnChangeProps } = this.options\n const notifyOnChangePropsValue =\n typeof notifyOnChangeProps === 'function'\n ? notifyOnChangeProps()\n : notifyOnChangeProps\n\n if (\n notifyOnChangePropsValue === 'all' ||\n (!notifyOnChangePropsValue && !this.#trackedProps.size)\n ) {\n return true\n }\n\n const includedProps = new Set(\n notifyOnChangePropsValue ?? this.#trackedProps,\n )\n\n if (this.options.throwOnError) {\n includedProps.add('error')\n }\n\n return Object.keys(this.#currentResult).some((key) => {\n const typedKey = key as keyof QueryObserverResult\n const changed = this.#currentResult[typedKey] !== prevResult[typedKey]\n\n return changed && includedProps.has(typedKey)\n })\n }\n\n if (notifyOptions?.listeners !== false && shouldNotifyListeners()) {\n defaultNotifyOptions.listeners = true\n }\n\n this.#notify({ ...defaultNotifyOptions, ...notifyOptions })\n }\n\n #updateQuery(): void {\n const query = this.#client.getQueryCache().build(this.#client, this.options)\n\n if (query === this.#currentQuery) {\n return\n }\n\n const prevQuery = this.#currentQuery as\n | Query<TQueryFnData, TError, TQueryData, TQueryKey>\n | undefined\n this.#currentQuery = query\n this.#currentQueryInitialState = query.state\n\n if (this.hasListeners()) {\n prevQuery?.removeObserver(this)\n query.addObserver(this)\n }\n }\n\n onQueryUpdate(): void {\n this.updateResult()\n\n if (this.hasListeners()) {\n this.#updateTimers()\n }\n }\n\n #notify(notifyOptions: NotifyOptions): void {\n notifyManager.batch(() => {\n // First, trigger the listeners\n if (notifyOptions.listeners) {\n this.listeners.forEach((listener) => {\n listener(this.#currentResult)\n })\n }\n\n // Then the cache listeners\n this.#client.getQueryCache().notify({\n query: this.#currentQuery,\n type: 'observerResultsUpdated',\n })\n })\n }\n}\n\nfunction shouldLoadOnMount(\n query: Query<any, any, any, any>,\n options: QueryObserverOptions<any, any, any, any>,\n): boolean {\n return (\n resolveEnabled(options.enabled, query) !== false &&\n query.state.data === undefined &&\n !(query.state.status === 'error' && options.retryOnMount === false)\n )\n}\n\nfunction shouldFetchOnMount(\n query: Query<any, any, any, any>,\n options: QueryObserverOptions<any, any, any, any, any>,\n): boolean {\n return (\n shouldLoadOnMount(query, options) ||\n (query.state.data !== undefined &&\n shouldFetchOn(query, options, options.refetchOnMount))\n )\n}\n\nfunction shouldFetchOn(\n query: Query<any, any, any, any>,\n options: QueryObserverOptions<any, any, any, any, any>,\n field: (typeof options)['refetchOnMount'] &\n (typeof options)['refetchOnWindowFocus'] &\n (typeof options)['refetchOnReconnect'],\n) {\n if (resolveEnabled(options.enabled, query) !== false) {\n const value = typeof field === 'function' ? field(query) : field\n\n return value === 'always' || (value !== false && isStale(query, options))\n }\n return false\n}\n\nfunction shouldFetchOptionally(\n query: Query<any, any, any, any>,\n prevQuery: Query<any, any, any, any>,\n options: QueryObserverOptions<any, any, any, any, any>,\n prevOptions: QueryObserverOptions<any, any, any, any, any>,\n): boolean {\n return (\n (query !== prevQuery ||\n resolveEnabled(prevOptions.enabled, query) === false) &&\n (!options.suspense || query.state.status !== 'error') &&\n isStale(query, options)\n )\n}\n\nfunction isStale(\n query: Query<any, any, any, any>,\n options: QueryObserverOptions<any, any, any, any, any>,\n): boolean {\n return (\n resolveEnabled(options.enabled, query) !== false &&\n query.isStaleByTime(resolveStaleTime(options.staleTime, query))\n )\n}\n\n// this function would decide if we will update the observer's 'current'\n// properties after an optimistic reading via getOptimisticResult\nfunction shouldAssignObserverCurrentProperties<\n TQueryFnData = unknown,\n TError = unknown,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n observer: QueryObserver<TQueryFnData, TError, TData, TQueryData, TQueryKey>,\n optimisticResult: QueryObserverResult<TData, TError>,\n) {\n // if the newly created result isn't what the observer is holding as current,\n // then we'll need to update the properties as well\n if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) {\n return true\n }\n\n // basically, just keep previous properties if nothing changed\n return false\n}\n", "import { QueryObserver } from './queryObserver'\nimport {\n hasNextPage,\n hasPreviousPage,\n infiniteQueryBehavior,\n} from './infiniteQueryBehavior'\nimport type { Subscribable } from './subscribable'\nimport type {\n DefaultError,\n DefaultedInfiniteQueryObserverOptions,\n FetchNextPageOptions,\n FetchPreviousPageOptions,\n InfiniteData,\n InfiniteQueryObserverBaseResult,\n InfiniteQueryObserverOptions,\n InfiniteQueryObserverResult,\n QueryKey,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { NotifyOptions } from './queryObserver'\nimport type { Query } from './query'\n\ntype InfiniteQueryObserverListener<TData, TError> = (\n result: InfiniteQueryObserverResult<TData, TError>,\n) => void\n\nexport class InfiniteQueryObserver<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> extends QueryObserver<\n TQueryFnData,\n TError,\n TData,\n InfiniteData<TQueryData, TPageParam>,\n TQueryKey\n> {\n // Type override\n subscribe!: Subscribable<\n InfiniteQueryObserverListener<TData, TError>\n >['subscribe']\n\n // Type override\n getCurrentResult!: ReplaceReturnType<\n QueryObserver<\n TQueryFnData,\n TError,\n TData,\n InfiniteData<TQueryData, TPageParam>,\n TQueryKey\n >['getCurrentResult'],\n InfiniteQueryObserverResult<TData, TError>\n >\n\n // Type override\n protected fetch!: ReplaceReturnType<\n QueryObserver<\n TQueryFnData,\n TError,\n TData,\n InfiniteData<TQueryData, TPageParam>,\n TQueryKey\n >['fetch'],\n Promise<InfiniteQueryObserverResult<TData, TError>>\n >\n\n constructor(\n client: QueryClient,\n options: InfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n ) {\n super(client, options)\n }\n\n protected bindMethods(): void {\n super.bindMethods()\n this.fetchNextPage = this.fetchNextPage.bind(this)\n this.fetchPreviousPage = this.fetchPreviousPage.bind(this)\n }\n\n setOptions(\n options: InfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n notifyOptions?: NotifyOptions,\n ): void {\n super.setOptions(\n {\n ...options,\n behavior: infiniteQueryBehavior(),\n },\n notifyOptions,\n )\n }\n\n getOptimisticResult(\n options: DefaultedInfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n ): InfiniteQueryObserverResult<TData, TError> {\n options.behavior = infiniteQueryBehavior()\n return super.getOptimisticResult(options) as InfiniteQueryObserverResult<\n TData,\n TError\n >\n }\n\n fetchNextPage(\n options?: FetchNextPageOptions,\n ): Promise<InfiniteQueryObserverResult<TData, TError>> {\n return this.fetch({\n ...options,\n meta: {\n fetchMore: { direction: 'forward' },\n },\n })\n }\n\n fetchPreviousPage(\n options?: FetchPreviousPageOptions,\n ): Promise<InfiniteQueryObserverResult<TData, TError>> {\n return this.fetch({\n ...options,\n meta: {\n fetchMore: { direction: 'backward' },\n },\n })\n }\n\n protected createResult(\n query: Query<\n TQueryFnData,\n TError,\n InfiniteData<TQueryData, TPageParam>,\n TQueryKey\n >,\n options: InfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n ): InfiniteQueryObserverResult<TData, TError> {\n const { state } = query\n const parentResult = super.createResult(query, options)\n\n const { isFetching, isRefetching, isError, isRefetchError } = parentResult\n const fetchDirection = state.fetchMeta?.fetchMore?.direction\n\n const isFetchNextPageError = isError && fetchDirection === 'forward'\n const isFetchingNextPage = isFetching && fetchDirection === 'forward'\n\n const isFetchPreviousPageError = isError && fetchDirection === 'backward'\n const isFetchingPreviousPage = isFetching && fetchDirection === 'backward'\n\n const result: InfiniteQueryObserverBaseResult<TData, TError> = {\n ...parentResult,\n fetchNextPage: this.fetchNextPage,\n fetchPreviousPage: this.fetchPreviousPage,\n hasNextPage: hasNextPage(options, state.data),\n hasPreviousPage: hasPreviousPage(options, state.data),\n isFetchNextPageError,\n isFetchingNextPage,\n isFetchPreviousPageError,\n isFetchingPreviousPage,\n isRefetchError:\n isRefetchError && !isFetchNextPageError && !isFetchPreviousPageError,\n isRefetching:\n isRefetching && !isFetchingNextPage && !isFetchingPreviousPage,\n }\n\n return result as InfiniteQueryObserverResult<TData, TError>\n }\n}\n\ntype ReplaceReturnType<\n TFunction extends (...args: Array<any>) => unknown,\n TReturn,\n> = (...args: Parameters<TFunction>) => TReturn\n", "import { getDefaultState } from './mutation'\nimport { notifyManager } from './notifyManager'\nimport { Subscribable } from './subscribable'\nimport { hashKey, shallowEqualObjects } from './utils'\nimport type { QueryClient } from './queryClient'\nimport type {\n DefaultError,\n MutateOptions,\n MutationObserverOptions,\n MutationObserverResult,\n} from './types'\nimport type { Action, Mutation } from './mutation'\n\n// TYPES\n\ntype MutationObserverListener<TData, TError, TVariables, TContext> = (\n result: MutationObserverResult<TData, TError, TVariables, TContext>,\n) => void\n\n// CLASS\n\nexport class MutationObserver<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> extends Subscribable<\n MutationObserverListener<TData, TError, TVariables, TContext>\n> {\n options!: MutationObserverOptions<TData, TError, TVariables, TContext>\n\n #client: QueryClient\n #currentResult: MutationObserverResult<TData, TError, TVariables, TContext> =\n undefined!\n #currentMutation?: Mutation<TData, TError, TVariables, TContext>\n #mutateOptions?: MutateOptions<TData, TError, TVariables, TContext>\n\n constructor(\n client: QueryClient,\n options: MutationObserverOptions<TData, TError, TVariables, TContext>,\n ) {\n super()\n\n this.#client = client\n this.setOptions(options)\n this.bindMethods()\n this.#updateResult()\n }\n\n protected bindMethods(): void {\n this.mutate = this.mutate.bind(this)\n this.reset = this.reset.bind(this)\n }\n\n setOptions(\n options: MutationObserverOptions<TData, TError, TVariables, TContext>,\n ) {\n const prevOptions = this.options as\n | MutationObserverOptions<TData, TError, TVariables, TContext>\n | undefined\n this.options = this.#client.defaultMutationOptions(options)\n if (!shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getMutationCache().notify({\n type: 'observerOptionsUpdated',\n mutation: this.#currentMutation,\n observer: this,\n })\n }\n\n if (\n prevOptions?.mutationKey &&\n this.options.mutationKey &&\n hashKey(prevOptions.mutationKey) !== hashKey(this.options.mutationKey)\n ) {\n this.reset()\n } else if (this.#currentMutation?.state.status === 'pending') {\n this.#currentMutation.setOptions(this.options)\n }\n }\n\n protected onUnsubscribe(): void {\n if (!this.hasListeners()) {\n this.#currentMutation?.removeObserver(this)\n }\n }\n\n onMutationUpdate(action: Action<TData, TError, TVariables, TContext>): void {\n this.#updateResult()\n\n this.#notify(action)\n }\n\n getCurrentResult(): MutationObserverResult<\n TData,\n TError,\n TVariables,\n TContext\n > {\n return this.#currentResult\n }\n\n reset(): void {\n // reset needs to remove the observer from the mutation because there is no way to \"get it back\"\n // another mutate call will yield a new mutation!\n this.#currentMutation?.removeObserver(this)\n this.#currentMutation = undefined\n this.#updateResult()\n this.#notify()\n }\n\n mutate(\n variables: TVariables,\n options?: MutateOptions<TData, TError, TVariables, TContext>,\n ): Promise<TData> {\n this.#mutateOptions = options\n\n this.#currentMutation?.removeObserver(this)\n\n this.#currentMutation = this.#client\n .getMutationCache()\n .build(this.#client, this.options)\n\n this.#currentMutation.addObserver(this)\n\n return this.#currentMutation.execute(variables)\n }\n\n #updateResult(): void {\n const state =\n this.#currentMutation?.state ??\n getDefaultState<TData, TError, TVariables, TContext>()\n\n this.#currentResult = {\n ...state,\n isPending: state.status === 'pending',\n isSuccess: state.status === 'success',\n isError: state.status === 'error',\n isIdle: state.status === 'idle',\n mutate: this.mutate,\n reset: this.reset,\n } as MutationObserverResult<TData, TError, TVariables, TContext>\n }\n\n #notify(action?: Action<TData, TError, TVariables, TContext>): void {\n notifyManager.batch(() => {\n // First trigger the mutate callbacks\n if (this.#mutateOptions && this.hasListeners()) {\n const variables = this.#currentResult.variables!\n const context = this.#currentResult.context\n\n if (action?.type === 'success') {\n this.#mutateOptions.onSuccess?.(action.data, variables, context!)\n this.#mutateOptions.onSettled?.(action.data, null, variables, context)\n } else if (action?.type === 'error') {\n this.#mutateOptions.onError?.(action.error, variables, context)\n this.#mutateOptions.onSettled?.(\n undefined,\n action.error,\n variables,\n context,\n )\n }\n }\n\n // Then trigger the listeners\n this.listeners.forEach((listener) => {\n listener(this.#currentResult)\n })\n })\n }\n}\n", "/* istanbul ignore file */\n\nimport type { QueryClient } from './queryClient'\nimport type { DehydrateOptions, HydrateOptions } from './hydration'\nimport type { MutationState } from './mutation'\nimport type { FetchDirection, Query, QueryBehavior } from './query'\nimport type { RetryDelayValue, RetryValue } from './retryer'\nimport type { QueryFilters, QueryTypeFilter, SkipToken } from './utils'\nimport type { QueryCache } from './queryCache'\nimport type { MutationCache } from './mutationCache'\n\nexport type OmitKeyof<\n TObject,\n TKey extends TStrictly extends 'safely'\n ?\n | keyof TObject\n | (string & Record<never, never>)\n | (number & Record<never, never>)\n | (symbol & Record<never, never>)\n : keyof TObject,\n TStrictly extends 'strictly' | 'safely' = 'strictly',\n> = Omit<TObject, TKey>\n\nexport type Override<TTargetA, TTargetB> = {\n [AKey in keyof TTargetA]: AKey extends keyof TTargetB\n ? TTargetB[AKey]\n : TTargetA[AKey]\n}\n\nexport type NoInfer<T> = [T][T extends any ? 0 : never]\n\nexport interface Register {\n // defaultError: Error\n // queryMeta: Record<string, unknown>\n // mutationMeta: Record<string, unknown>\n // queryKey: ReadonlyArray<unknown>\n // mutationKey: ReadonlyArray<unknown>\n}\n\nexport type DefaultError = Register extends {\n defaultError: infer TError\n}\n ? TError\n : Error\n\nexport type QueryKey = Register extends {\n queryKey: infer TQueryKey\n}\n ? TQueryKey extends ReadonlyArray<unknown>\n ? TQueryKey\n : TQueryKey extends Array<unknown>\n ? TQueryKey\n : ReadonlyArray<unknown>\n : ReadonlyArray<unknown>\n\nexport const dataTagSymbol = Symbol('dataTagSymbol')\nexport type dataTagSymbol = typeof dataTagSymbol\nexport const dataTagErrorSymbol = Symbol('dataTagErrorSymbol')\nexport type dataTagErrorSymbol = typeof dataTagErrorSymbol\nexport const unsetMarker = Symbol('unsetMarker')\nexport type UnsetMarker = typeof unsetMarker\nexport type AnyDataTag = {\n [dataTagSymbol]: any\n [dataTagErrorSymbol]: any\n}\nexport type DataTag<\n TType,\n TValue,\n TError = UnsetMarker,\n> = TType extends AnyDataTag\n ? TType\n : TType & {\n [dataTagSymbol]: TValue\n [dataTagErrorSymbol]: TError\n }\n\nexport type InferDataFromTag<TQueryFnData, TTaggedQueryKey extends QueryKey> =\n TTaggedQueryKey extends DataTag<unknown, infer TaggedValue, unknown>\n ? TaggedValue\n : TQueryFnData\n\nexport type InferErrorFromTag<TError, TTaggedQueryKey extends QueryKey> =\n TTaggedQueryKey extends DataTag<unknown, unknown, infer TaggedError>\n ? TaggedError extends UnsetMarker\n ? TError\n : TaggedError\n : TError\n\nexport type QueryFunction<\n T = unknown,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n> = (context: QueryFunctionContext<TQueryKey, TPageParam>) => T | Promise<T>\n\nexport type StaleTime<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = number | ((query: Query<TQueryFnData, TError, TData, TQueryKey>) => number)\n\nexport type Enabled<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> =\n | boolean\n | ((query: Query<TQueryFnData, TError, TData, TQueryKey>) => boolean)\n\nexport type QueryPersister<\n T = unknown,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n> = [TPageParam] extends [never]\n ? (\n queryFn: QueryFunction<T, TQueryKey, never>,\n context: QueryFunctionContext<TQueryKey>,\n query: Query,\n ) => T | Promise<T>\n : (\n queryFn: QueryFunction<T, TQueryKey, TPageParam>,\n context: QueryFunctionContext<TQueryKey>,\n query: Query,\n ) => T | Promise<T>\n\nexport type QueryFunctionContext<\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n> = [TPageParam] extends [never]\n ? {\n client: QueryClient\n queryKey: TQueryKey\n signal: AbortSignal\n meta: QueryMeta | undefined\n pageParam?: unknown\n /**\n * @deprecated\n * if you want access to the direction, you can add it to the pageParam\n */\n direction?: unknown\n }\n : {\n client: QueryClient\n queryKey: TQueryKey\n signal: AbortSignal\n pageParam: TPageParam\n /**\n * @deprecated\n * if you want access to the direction, you can add it to the pageParam\n */\n direction: FetchDirection\n meta: QueryMeta | undefined\n }\n\nexport type InitialDataFunction<T> = () => T | undefined\n\ntype NonFunctionGuard<T> = T extends Function ? never : T\n\nexport type PlaceholderDataFunction<\n TQueryFnData = unknown,\n TError = DefaultError,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = (\n previousData: TQueryData | undefined,\n previousQuery: Query<TQueryFnData, TError, TQueryData, TQueryKey> | undefined,\n) => TQueryData | undefined\n\nexport type QueriesPlaceholderDataFunction<TQueryData> = (\n previousData: undefined,\n previousQuery: undefined,\n) => TQueryData | undefined\n\nexport type QueryKeyHashFunction<TQueryKey extends QueryKey> = (\n queryKey: TQueryKey,\n) => string\n\nexport type GetPreviousPageParamFunction<TPageParam, TQueryFnData = unknown> = (\n firstPage: TQueryFnData,\n allPages: Array<TQueryFnData>,\n firstPageParam: TPageParam,\n allPageParams: Array<TPageParam>,\n) => TPageParam | undefined | null\n\nexport type GetNextPageParamFunction<TPageParam, TQueryFnData = unknown> = (\n lastPage: TQueryFnData,\n allPages: Array<TQueryFnData>,\n lastPageParam: TPageParam,\n allPageParams: Array<TPageParam>,\n) => TPageParam | undefined | null\n\nexport interface InfiniteData<TData, TPageParam = unknown> {\n pages: Array<TData>\n pageParams: Array<TPageParam>\n}\n\nexport type QueryMeta = Register extends {\n queryMeta: infer TQueryMeta\n}\n ? TQueryMeta extends Record<string, unknown>\n ? TQueryMeta\n : Record<string, unknown>\n : Record<string, unknown>\n\nexport type NetworkMode = 'online' | 'always' | 'offlineFirst'\n\nexport type NotifyOnChangeProps =\n | Array<keyof InfiniteQueryObserverResult>\n | 'all'\n | undefined\n | (() => Array<keyof InfiniteQueryObserverResult> | 'all' | undefined)\n\nexport interface QueryOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n> {\n /**\n * If `false`, failed queries will not retry by default.\n * If `true`, failed queries will retry infinitely., failureCount: num\n * If set to an integer number, e.g. 3, failed queries will retry until the failed query count meets that number.\n * If set to a function `(failureCount, error) => boolean` failed queries will retry until the function returns false.\n */\n retry?: RetryValue<TError>\n retryDelay?: RetryDelayValue<TError>\n networkMode?: NetworkMode\n /**\n * The time in milliseconds that unused/inactive cache data remains in memory.\n * When a query's cache becomes unused or inactive, that cache data will be garbage collected after this duration.\n * When different garbage collection times are specified, the longest one will be used.\n * Setting it to `Infinity` will disable garbage collection.\n */\n gcTime?: number\n queryFn?: QueryFunction<TQueryFnData, TQueryKey, TPageParam> | SkipToken\n persister?: QueryPersister<\n NoInfer<TQueryFnData>,\n NoInfer<TQueryKey>,\n NoInfer<TPageParam>\n >\n queryHash?: string\n queryKey?: TQueryKey\n queryKeyHashFn?: QueryKeyHashFunction<TQueryKey>\n initialData?: TData | InitialDataFunction<TData>\n initialDataUpdatedAt?: number | (() => number | undefined)\n behavior?: QueryBehavior<TQueryFnData, TError, TData, TQueryKey>\n /**\n * Set this to `false` to disable structural sharing between query results.\n * Set this to a function which accepts the old and new data and returns resolved data of the same type to implement custom structural sharing logic.\n * Defaults to `true`.\n */\n structuralSharing?:\n | boolean\n | ((oldData: unknown | undefined, newData: unknown) => unknown)\n _defaulted?: boolean\n /**\n * Additional payload to be stored on each query.\n * Use this property to pass information that can be used in other places.\n */\n meta?: QueryMeta\n /**\n * Maximum number of pages to store in the data of an infinite query.\n */\n maxPages?: number\n}\n\nexport interface InitialPageParam<TPageParam = unknown> {\n initialPageParam: TPageParam\n}\n\nexport interface InfiniteQueryPageParamsOptions<\n TQueryFnData = unknown,\n TPageParam = unknown,\n> extends InitialPageParam<TPageParam> {\n /**\n * This function can be set to automatically get the previous cursor for infinite queries.\n * The result will also be used to determine the value of `hasPreviousPage`.\n */\n getPreviousPageParam?: GetPreviousPageParamFunction<TPageParam, TQueryFnData>\n /**\n * This function can be set to automatically get the next cursor for infinite queries.\n * The result will also be used to determine the value of `hasNextPage`.\n */\n getNextPageParam: GetNextPageParamFunction<TPageParam, TQueryFnData>\n}\n\nexport type ThrowOnError<\n TQueryFnData,\n TError,\n TQueryData,\n TQueryKey extends QueryKey,\n> =\n | boolean\n | ((\n error: TError,\n query: Query<TQueryFnData, TError, TQueryData, TQueryKey>,\n ) => boolean)\n\nexport interface QueryObserverOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n> extends WithRequired<\n QueryOptions<TQueryFnData, TError, TQueryData, TQueryKey, TPageParam>,\n 'queryKey'\n > {\n /**\n * Set this to `false` or a function that returns `false` to disable automatic refetching when the query mounts or changes query keys.\n * To refetch the query, use the `refetch` method returned from the `useQuery` instance.\n * Accepts a boolean or function that returns a boolean.\n * Defaults to `true`.\n */\n enabled?: Enabled<TQueryFnData, TError, TQueryData, TQueryKey>\n /**\n * The time in milliseconds after data is considered stale.\n * If set to `Infinity`, the data will never be considered stale.\n * If set to a function, the function will be executed with the query to compute a `staleTime`.\n * Defaults to `0`.\n */\n staleTime?: StaleTime<TQueryFnData, TError, TQueryData, TQueryKey>\n /**\n * If set to a number, the query will continuously refetch at this frequency in milliseconds.\n * If set to a function, the function will be executed with the latest data and query to compute a frequency\n * Defaults to `false`.\n */\n refetchInterval?:\n | number\n | false\n | ((\n query: Query<TQueryFnData, TError, TQueryData, TQueryKey>,\n ) => number | false | undefined)\n /**\n * If set to `true`, the query will continue to refetch while their tab/window is in the background.\n * Defaults to `false`.\n */\n refetchIntervalInBackground?: boolean\n /**\n * If set to `true`, the query will refetch on window focus if the data is stale.\n * If set to `false`, the query will not refetch on window focus.\n * If set to `'always'`, the query will always refetch on window focus.\n * If set to a function, the function will be executed with the latest data and query to compute the value.\n * Defaults to `true`.\n */\n refetchOnWindowFocus?:\n | boolean\n | 'always'\n | ((\n query: Query<TQueryFnData, TError, TQueryData, TQueryKey>,\n ) => boolean | 'always')\n /**\n * If set to `true`, the query will refetch on reconnect if the data is stale.\n * If set to `false`, the query will not refetch on reconnect.\n * If set to `'always'`, the query will always refetch on reconnect.\n * If set to a function, the function will be executed with the latest data and query to compute the value.\n * Defaults to the value of `networkOnline` (`true`)\n */\n refetchOnReconnect?:\n | boolean\n | 'always'\n | ((\n query: Query<TQueryFnData, TError, TQueryData, TQueryKey>,\n ) => boolean | 'always')\n /**\n * If set to `true`, the query will refetch on mount if the data is stale.\n * If set to `false`, will disable additional instances of a query to trigger background refetch.\n * If set to `'always'`, the query will always refetch on mount.\n * If set to a function, the function will be executed with the latest data and query to compute the value\n * Defaults to `true`.\n */\n refetchOnMount?:\n | boolean\n | 'always'\n | ((\n query: Query<TQueryFnData, TError, TQueryData, TQueryKey>,\n ) => boolean | 'always')\n /**\n * If set to `false`, the query will not be retried on mount if it contains an error.\n * Defaults to `true`.\n */\n retryOnMount?: boolean\n /**\n * If set, the component will only re-render if any of the listed properties change.\n * When set to `['data', 'error']`, the component will only re-render when the `data` or `error` properties change.\n * When set to `'all'`, the component will re-render whenever a query is updated.\n * When set to a function, the function will be executed to compute the list of properties.\n * By default, access to properties will be tracked, and the component will only re-render when one of the tracked properties change.\n */\n notifyOnChangeProps?: NotifyOnChangeProps\n /**\n * Whether errors should be thrown instead of setting the `error` property.\n * If set to `true` or `suspense` is `true`, all errors will be thrown to the error boundary.\n * If set to `false` and `suspense` is `false`, errors are returned as state.\n * If set to a function, it will be passed the error and the query, and it should return a boolean indicating whether to show the error in an error boundary (`true`) or return the error as state (`false`).\n * Defaults to `false`.\n */\n throwOnError?: ThrowOnError<TQueryFnData, TError, TQueryData, TQueryKey>\n /**\n * This option can be used to transform or select a part of the data returned by the query function.\n */\n select?: (data: TQueryData) => TData\n /**\n * If set to `true`, the query will suspend when `status === 'pending'`\n * and throw errors when `status === 'error'`.\n * Defaults to `false`.\n */\n suspense?: boolean\n /**\n * If set, this value will be used as the placeholder data for this particular query observer while the query is still in the `loading` data and no initialData has been provided.\n */\n placeholderData?:\n | NonFunctionGuard<TQueryData>\n | PlaceholderDataFunction<\n NonFunctionGuard<TQueryData>,\n TError,\n NonFunctionGuard<TQueryData>,\n TQueryKey\n >\n\n _optimisticResults?: 'optimistic' | 'isRestoring'\n\n /**\n * Enable prefetching during rendering\n */\n experimental_prefetchInRender?: boolean\n}\n\nexport type WithRequired<TTarget, TKey extends keyof TTarget> = TTarget & {\n [_ in TKey]: {}\n}\nexport type Optional<TTarget, TKey extends keyof TTarget> = Pick<\n Partial<TTarget>,\n TKey\n> &\n OmitKeyof<TTarget, TKey>\n\nexport type DefaultedQueryObserverOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = WithRequired<\n QueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>,\n 'throwOnError' | 'refetchOnReconnect' | 'queryHash'\n>\n\nexport interface InfiniteQueryObserverOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> extends QueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n InfiniteData<TQueryData, TPageParam>,\n TQueryKey,\n TPageParam\n >,\n InfiniteQueryPageParamsOptions<TQueryFnData, TPageParam> {}\n\nexport type DefaultedInfiniteQueryObserverOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = WithRequired<\n InfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n 'throwOnError' | 'refetchOnReconnect' | 'queryHash'\n>\n\nexport interface FetchQueryOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n> extends WithRequired<\n QueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>,\n 'queryKey'\n > {\n initialPageParam?: never\n /**\n * The time in milliseconds after data is considered stale.\n * If the data is fresh it will be returned from the cache.\n */\n staleTime?: StaleTime<TQueryFnData, TError, TData, TQueryKey>\n}\n\nexport interface EnsureQueryDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n> extends FetchQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n > {\n revalidateIfStale?: boolean\n}\n\nexport type EnsureInfiniteQueryDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = FetchInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n> & {\n revalidateIfStale?: boolean\n}\n\ntype FetchInfiniteQueryPages<TQueryFnData = unknown, TPageParam = unknown> =\n | { pages?: never }\n | {\n pages: number\n getNextPageParam: GetNextPageParamFunction<TPageParam, TQueryFnData>\n }\n\nexport type FetchInfiniteQueryOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = Omit<\n FetchQueryOptions<\n TQueryFnData,\n TError,\n InfiniteData<TData, TPageParam>,\n TQueryKey,\n TPageParam\n >,\n 'initialPageParam'\n> &\n InitialPageParam<TPageParam> &\n FetchInfiniteQueryPages<TQueryFnData, TPageParam>\n\nexport interface ResultOptions {\n throwOnError?: boolean\n}\n\nexport interface RefetchOptions extends ResultOptions {\n /**\n * If set to `true`, a currently running request will be cancelled before a new request is made\n *\n * If set to `false`, no refetch will be made if there is already a request running.\n *\n * Defaults to `true`.\n */\n cancelRefetch?: boolean\n}\n\nexport interface InvalidateQueryFilters<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> extends QueryFilters<TQueryFnData, TError, TData, TQueryKey> {\n refetchType?: QueryTypeFilter | 'none'\n}\n\nexport interface RefetchQueryFilters<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> extends QueryFilters<TQueryFnData, TError, TData, TQueryKey> {}\n\nexport interface InvalidateOptions extends RefetchOptions {}\nexport interface ResetOptions extends RefetchOptions {}\n\nexport interface FetchNextPageOptions extends ResultOptions {\n /**\n * If set to `true`, calling `fetchNextPage` repeatedly will invoke `queryFn` every time,\n * whether the previous invocation has resolved or not. Also, the result from previous invocations will be ignored.\n *\n * If set to `false`, calling `fetchNextPage` repeatedly won't have any effect until the first invocation has resolved.\n *\n * Defaults to `true`.\n */\n cancelRefetch?: boolean\n}\n\nexport interface FetchPreviousPageOptions extends ResultOptions {\n /**\n * If set to `true`, calling `fetchPreviousPage` repeatedly will invoke `queryFn` every time,\n * whether the previous invocation has resolved or not. Also, the result from previous invocations will be ignored.\n *\n * If set to `false`, calling `fetchPreviousPage` repeatedly won't have any effect until the first invocation has resolved.\n *\n * Defaults to `true`.\n */\n cancelRefetch?: boolean\n}\n\nexport type QueryStatus = 'pending' | 'error' | 'success'\nexport type FetchStatus = 'fetching' | 'paused' | 'idle'\n\nexport interface QueryObserverBaseResult<\n TData = unknown,\n TError = DefaultError,\n> {\n /**\n * The last successfully resolved data for the query.\n */\n data: TData | undefined\n /**\n * The timestamp for when the query most recently returned the `status` as `\"success\"`.\n */\n dataUpdatedAt: number\n /**\n * The error object for the query, if an error was thrown.\n * - Defaults to `null`.\n */\n error: TError | null\n /**\n * The timestamp for when the query most recently returned the `status` as `\"error\"`.\n */\n errorUpdatedAt: number\n /**\n * The failure count for the query.\n * - Incremented every time the query fails.\n * - Reset to `0` when the query succeeds.\n */\n failureCount: number\n /**\n * The failure reason for the query retry.\n * - Reset to `null` when the query succeeds.\n */\n failureReason: TError | null\n /**\n * The sum of all errors.\n */\n errorUpdateCount: number\n /**\n * A derived boolean from the `status` variable, provided for convenience.\n * - `true` if the query attempt resulted in an error.\n */\n isError: boolean\n /**\n * Will be `true` if the query has been fetched.\n */\n isFetched: boolean\n /**\n * Will be `true` if the query has been fetched after the component mounted.\n * - This property can be used to not show any previously cached data.\n */\n isFetchedAfterMount: boolean\n /**\n * A derived boolean from the `fetchStatus` variable, provided for convenience.\n * - `true` whenever the `queryFn` is executing, which includes initial `pending` as well as background refetch.\n */\n isFetching: boolean\n /**\n * Is `true` whenever the first fetch for a query is in-flight.\n * - Is the same as `isFetching && isPending`.\n */\n isLoading: boolean\n /**\n * Will be `pending` if there's no cached data and no query attempt was finished yet.\n */\n isPending: boolean\n /**\n * Will be `true` if the query failed while fetching for the first time.\n */\n isLoadingError: boolean\n /**\n * @deprecated `isInitialLoading` is being deprecated in favor of `isLoading`\n * and will be removed in the next major version.\n */\n isInitialLoading: boolean\n /**\n * A derived boolean from the `fetchStatus` variable, provided for convenience.\n * - The query wanted to fetch, but has been `paused`.\n */\n isPaused: boolean\n /**\n * Will be `true` if the data shown is the placeholder data.\n */\n isPlaceholderData: boolean\n /**\n * Will be `true` if the query failed while refetching.\n */\n isRefetchError: boolean\n /**\n * Is `true` whenever a background refetch is in-flight, which _does not_ include initial `pending`.\n * - Is the same as `isFetching && !isPending`.\n */\n isRefetching: boolean\n /**\n * Will be `true` if the data in the cache is invalidated or if the data is older than the given `staleTime`.\n */\n isStale: boolean\n /**\n * A derived boolean from the `status` variable, provided for convenience.\n * - `true` if the query has received a response with no errors and is ready to display its data.\n */\n isSuccess: boolean\n /**\n * A function to manually refetch the query.\n */\n refetch: (\n options?: RefetchOptions,\n ) => Promise<QueryObserverResult<TData, TError>>\n /**\n * The status of the query.\n * - Will be:\n * - `pending` if there's no cached data and no query attempt was finished yet.\n * - `error` if the query attempt resulted in an error.\n * - `success` if the query has received a response with no errors and is ready to display its data.\n */\n status: QueryStatus\n /**\n * The fetch status of the query.\n * - `fetching`: Is `true` whenever the queryFn is executing, which includes initial `pending` as well as background refetch.\n * - `paused`: The query wanted to fetch, but has been `paused`.\n * - `idle`: The query is not fetching.\n * - See [Network Mode](https://tanstack.com/query/latest/docs/framework/react/guides/network-mode) for more information.\n */\n fetchStatus: FetchStatus\n /**\n * A stable promise that will be resolved with the data of the query.\n * Requires the `experimental_prefetchInRender` feature flag to be enabled.\n * @example\n *\n * ### Enabling the feature flag\n * ```ts\n * const client = new QueryClient({\n * defaultOptions: {\n * queries: {\n * experimental_prefetchInRender: true,\n * },\n * },\n * })\n * ```\n *\n * ### Usage\n * ```tsx\n * import { useQuery } from '@tanstack/react-query'\n * import React from 'react'\n * import { fetchTodos, type Todo } from './api'\n *\n * function TodoList({ query }: { query: UseQueryResult<Todo[], Error> }) {\n * const data = React.use(query.promise)\n *\n * return (\n * <ul>\n * {data.map(todo => (\n * <li key={todo.id}>{todo.title}</li>\n * ))}\n * </ul>\n * )\n * }\n *\n * export function App() {\n * const query = useQuery({ queryKey: ['todos'], queryFn: fetchTodos })\n *\n * return (\n * <>\n * <h1>Todos</h1>\n * <React.Suspense fallback={<div>Loading...</div>}>\n * <TodoList query={query} />\n * </React.Suspense>\n * </>\n * )\n * }\n * ```\n */\n promise: Promise<TData>\n}\n\nexport interface QueryObserverPendingResult<\n TData = unknown,\n TError = DefaultError,\n> extends QueryObserverBaseResult<TData, TError> {\n data: undefined\n error: null\n isError: false\n isPending: true\n isLoadingError: false\n isRefetchError: false\n isSuccess: false\n isPlaceholderData: false\n status: 'pending'\n}\n\nexport interface QueryObserverLoadingResult<\n TData = unknown,\n TError = DefaultError,\n> extends QueryObserverBaseResult<TData, TError> {\n data: undefined\n error: null\n isError: false\n isPending: true\n isLoading: true\n isLoadingError: false\n isRefetchError: false\n isSuccess: false\n isPlaceholderData: false\n status: 'pending'\n}\n\nexport interface QueryObserverLoadingErrorResult<\n TData = unknown,\n TError = DefaultError,\n> extends QueryObserverBaseResult<TData, TError> {\n data: undefined\n error: TError\n isError: true\n isPending: false\n isLoading: false\n isLoadingError: true\n isRefetchError: false\n isSuccess: false\n isPlaceholderData: false\n status: 'error'\n}\n\nexport interface QueryObserverRefetchErrorResult<\n TData = unknown,\n TError = DefaultError,\n> extends QueryObserverBaseResult<TData, TError> {\n data: TData\n error: TError\n isError: true\n isPending: false\n isLoading: false\n isLoadingError: false\n isRefetchError: true\n isSuccess: false\n isPlaceholderData: false\n status: 'error'\n}\n\nexport interface QueryObserverSuccessResult<\n TData = unknown,\n TError = DefaultError,\n> extends QueryObserverBaseResult<TData, TError> {\n data: TData\n error: null\n isError: false\n isPending: false\n isLoading: false\n isLoadingError: false\n isRefetchError: false\n isSuccess: true\n isPlaceholderData: false\n status: 'success'\n}\n\nexport interface QueryObserverPlaceholderResult<\n TData = unknown,\n TError = DefaultError,\n> extends QueryObserverBaseResult<TData, TError> {\n data: TData\n isError: false\n error: null\n isPending: false\n isLoading: false\n isLoadingError: false\n isRefetchError: false\n isSuccess: true\n isPlaceholderData: true\n status: 'success'\n}\n\nexport type DefinedQueryObserverResult<\n TData = unknown,\n TError = DefaultError,\n> =\n | QueryObserverRefetchErrorResult<TData, TError>\n | QueryObserverSuccessResult<TData, TError>\n\nexport type QueryObserverResult<TData = unknown, TError = DefaultError> =\n | DefinedQueryObserverResult<TData, TError>\n | QueryObserverLoadingErrorResult<TData, TError>\n | QueryObserverLoadingResult<TData, TError>\n | QueryObserverPendingResult<TData, TError>\n | QueryObserverPlaceholderResult<TData, TError>\n\nexport interface InfiniteQueryObserverBaseResult<\n TData = unknown,\n TError = DefaultError,\n> extends QueryObserverBaseResult<TData, TError> {\n /**\n * This function allows you to fetch the next \"page\" of results.\n */\n fetchNextPage: (\n options?: FetchNextPageOptions,\n ) => Promise<InfiniteQueryObserverResult<TData, TError>>\n /**\n * This function allows you to fetch the previous \"page\" of results.\n */\n fetchPreviousPage: (\n options?: FetchPreviousPageOptions,\n ) => Promise<InfiniteQueryObserverResult<TData, TError>>\n /**\n * Will be `true` if there is a next page to be fetched (known via the `getNextPageParam` option).\n */\n hasNextPage: boolean\n /**\n * Will be `true` if there is a previous page to be fetched (known via the `getPreviousPageParam` option).\n */\n hasPreviousPage: boolean\n /**\n * Will be `true` if the query failed while fetching the next page.\n */\n isFetchNextPageError: boolean\n /**\n * Will be `true` while fetching the next page with `fetchNextPage`.\n */\n isFetchingNextPage: boolean\n /**\n * Will be `true` if the query failed while fetching the previous page.\n */\n isFetchPreviousPageError: boolean\n /**\n * Will be `true` while fetching the previous page with `fetchPreviousPage`.\n */\n isFetchingPreviousPage: boolean\n}\n\nexport interface InfiniteQueryObserverPendingResult<\n TData = unknown,\n TError = DefaultError,\n> extends InfiniteQueryObserverBaseResult<TData, TError> {\n data: undefined\n error: null\n isError: false\n isPending: true\n isLoadingError: false\n isRefetchError: false\n isFetchNextPageError: false\n isFetchPreviousPageError: false\n isSuccess: false\n isPlaceholderData: false\n status: 'pending'\n}\n\nexport interface InfiniteQueryObserverLoadingResult<\n TData = unknown,\n TError = DefaultError,\n> extends InfiniteQueryObserverBaseResult<TData, TError> {\n data: undefined\n error: null\n isError: false\n isPending: true\n isLoading: true\n isLoadingError: false\n isRefetchError: false\n isFetchNextPageError: false\n isFetchPreviousPageError: false\n isSuccess: false\n isPlaceholderData: false\n status: 'pending'\n}\n\nexport interface InfiniteQueryObserverLoadingErrorResult<\n TData = unknown,\n TError = DefaultError,\n> extends InfiniteQueryObserverBaseResult<TData, TError> {\n data: undefined\n error: TError\n isError: true\n isPending: false\n isLoading: false\n isLoadingError: true\n isRefetchError: false\n isFetchNextPageError: false\n isFetchPreviousPageError: false\n isSuccess: false\n isPlaceholderData: false\n status: 'error'\n}\n\nexport interface InfiniteQueryObserverRefetchErrorResult<\n TData = unknown,\n TError = DefaultError,\n> extends InfiniteQueryObserverBaseResult<TData, TError> {\n data: TData\n error: TError\n isError: true\n isPending: false\n isLoading: false\n isLoadingError: false\n isRefetchError: true\n isSuccess: false\n isPlaceholderData: false\n status: 'error'\n}\n\nexport interface InfiniteQueryObserverSuccessResult<\n TData = unknown,\n TError = DefaultError,\n> extends InfiniteQueryObserverBaseResult<TData, TError> {\n data: TData\n error: null\n isError: false\n isPending: false\n isLoading: false\n isLoadingError: false\n isRefetchError: false\n isFetchNextPageError: false\n isFetchPreviousPageError: false\n isSuccess: true\n isPlaceholderData: false\n status: 'success'\n}\n\nexport interface InfiniteQueryObserverPlaceholderResult<\n TData = unknown,\n TError = DefaultError,\n> extends InfiniteQueryObserverBaseResult<TData, TError> {\n data: TData\n isError: false\n error: null\n isPending: false\n isLoading: false\n isLoadingError: false\n isRefetchError: false\n isSuccess: true\n isPlaceholderData: true\n isFetchNextPageError: false\n isFetchPreviousPageError: false\n status: 'success'\n}\n\nexport type DefinedInfiniteQueryObserverResult<\n TData = unknown,\n TError = DefaultError,\n> =\n | InfiniteQueryObserverRefetchErrorResult<TData, TError>\n | InfiniteQueryObserverSuccessResult<TData, TError>\n\nexport type InfiniteQueryObserverResult<\n TData = unknown,\n TError = DefaultError,\n> =\n | DefinedInfiniteQueryObserverResult<TData, TError>\n | InfiniteQueryObserverLoadingErrorResult<TData, TError>\n | InfiniteQueryObserverLoadingResult<TData, TError>\n | InfiniteQueryObserverPendingResult<TData, TError>\n | InfiniteQueryObserverPlaceholderResult<TData, TError>\n\nexport type MutationKey = Register extends {\n mutationKey: infer TMutationKey\n}\n ? TMutationKey extends Array<unknown>\n ? TMutationKey\n : TMutationKey extends Array<unknown>\n ? TMutationKey\n : ReadonlyArray<unknown>\n : ReadonlyArray<unknown>\n\nexport type MutationStatus = 'idle' | 'pending' | 'success' | 'error'\n\nexport type MutationScope = {\n id: string\n}\n\nexport type MutationMeta = Register extends {\n mutationMeta: infer TMutationMeta\n}\n ? TMutationMeta extends Record<string, unknown>\n ? TMutationMeta\n : Record<string, unknown>\n : Record<string, unknown>\n\nexport type MutationFunction<TData = unknown, TVariables = unknown> = (\n variables: TVariables,\n) => Promise<TData>\n\nexport interface MutationOptions<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> {\n mutationFn?: MutationFunction<TData, TVariables>\n mutationKey?: MutationKey\n onMutate?: (\n variables: TVariables,\n ) => Promise<TContext | undefined> | TContext | undefined\n onSuccess?: (\n data: TData,\n variables: TVariables,\n context: TContext,\n ) => Promise<unknown> | unknown\n onError?: (\n error: TError,\n variables: TVariables,\n context: TContext | undefined,\n ) => Promise<unknown> | unknown\n onSettled?: (\n data: TData | undefined,\n error: TError | null,\n variables: TVariables,\n context: TContext | undefined,\n ) => Promise<unknown> | unknown\n retry?: RetryValue<TError>\n retryDelay?: RetryDelayValue<TError>\n networkMode?: NetworkMode\n gcTime?: number\n _defaulted?: boolean\n meta?: MutationMeta\n scope?: MutationScope\n}\n\nexport interface MutationObserverOptions<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> extends MutationOptions<TData, TError, TVariables, TContext> {\n throwOnError?: boolean | ((error: TError) => boolean)\n}\n\nexport interface MutateOptions<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> {\n onSuccess?: (data: TData, variables: TVariables, context: TContext) => void\n onError?: (\n error: TError,\n variables: TVariables,\n context: TContext | undefined,\n ) => void\n onSettled?: (\n data: TData | undefined,\n error: TError | null,\n variables: TVariables,\n context: TContext | undefined,\n ) => void\n}\n\nexport type MutateFunction<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> = (\n variables: TVariables,\n options?: MutateOptions<TData, TError, TVariables, TContext>,\n) => Promise<TData>\n\nexport interface MutationObserverBaseResult<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> extends MutationState<TData, TError, TVariables, TContext> {\n /**\n * The last successfully resolved data for the mutation.\n */\n data: TData | undefined\n /**\n * The variables object passed to the `mutationFn`.\n */\n variables: TVariables | undefined\n /**\n * The error object for the mutation, if an error was encountered.\n * - Defaults to `null`.\n */\n error: TError | null\n /**\n * A boolean variable derived from `status`.\n * - `true` if the last mutation attempt resulted in an error.\n */\n isError: boolean\n /**\n * A boolean variable derived from `status`.\n * - `true` if the mutation is in its initial state prior to executing.\n */\n isIdle: boolean\n /**\n * A boolean variable derived from `status`.\n * - `true` if the mutation is currently executing.\n */\n isPending: boolean\n /**\n * A boolean variable derived from `status`.\n * - `true` if the last mutation attempt was successful.\n */\n isSuccess: boolean\n /**\n * The status of the mutation.\n * - Will be:\n * - `idle` initial status prior to the mutation function executing.\n * - `pending` if the mutation is currently executing.\n * - `error` if the last mutation attempt resulted in an error.\n * - `success` if the last mutation attempt was successful.\n */\n status: MutationStatus\n /**\n * The mutation function you can call with variables to trigger the mutation and optionally hooks on additional callback options.\n * @param variables - The variables object to pass to the `mutationFn`.\n * @param options.onSuccess - This function will fire when the mutation is successful and will be passed the mutation's result.\n * @param options.onError - This function will fire if the mutation encounters an error and will be passed the error.\n * @param options.onSettled - This function will fire when the mutation is either successfully fetched or encounters an error and be passed either the data or error.\n * @remarks\n * - If you make multiple requests, `onSuccess` will fire only after the latest call you've made.\n * - All the callback functions (`onSuccess`, `onError`, `onSettled`) are void functions, and the returned value will be ignored.\n */\n mutate: MutateFunction<TData, TError, TVariables, TContext>\n /**\n * A function to clean the mutation internal state (i.e., it resets the mutation to its initial state).\n */\n reset: () => void\n}\n\nexport interface MutationObserverIdleResult<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> extends MutationObserverBaseResult<TData, TError, TVariables, TContext> {\n data: undefined\n variables: undefined\n error: null\n isError: false\n isIdle: true\n isPending: false\n isSuccess: false\n status: 'idle'\n}\n\nexport interface MutationObserverLoadingResult<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> extends MutationObserverBaseResult<TData, TError, TVariables, TContext> {\n data: undefined\n variables: TVariables\n error: null\n isError: false\n isIdle: false\n isPending: true\n isSuccess: false\n status: 'pending'\n}\n\nexport interface MutationObserverErrorResult<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> extends MutationObserverBaseResult<TData, TError, TVariables, TContext> {\n data: undefined\n error: TError\n variables: TVariables\n isError: true\n isIdle: false\n isPending: false\n isSuccess: false\n status: 'error'\n}\n\nexport interface MutationObserverSuccessResult<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> extends MutationObserverBaseResult<TData, TError, TVariables, TContext> {\n data: TData\n error: null\n variables: TVariables\n isError: false\n isIdle: false\n isPending: false\n isSuccess: true\n status: 'success'\n}\n\nexport type MutationObserverResult<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> =\n | MutationObserverIdleResult<TData, TError, TVariables, TContext>\n | MutationObserverLoadingResult<TData, TError, TVariables, TContext>\n | MutationObserverErrorResult<TData, TError, TVariables, TContext>\n | MutationObserverSuccessResult<TData, TError, TVariables, TContext>\n\nexport interface QueryClientConfig {\n queryCache?: QueryCache\n mutationCache?: MutationCache\n defaultOptions?: DefaultOptions\n}\n\nexport interface DefaultOptions<TError = DefaultError> {\n queries?: OmitKeyof<\n QueryObserverOptions<unknown, TError>,\n 'suspense' | 'queryKey'\n >\n mutations?: MutationObserverOptions<unknown, TError, unknown, unknown>\n hydrate?: HydrateOptions['defaultOptions']\n dehydrate?: DehydrateOptions\n}\n\nexport interface CancelOptions {\n revert?: boolean\n silent?: boolean\n}\n\nexport interface SetDataOptions {\n updatedAt?: number\n}\n\nexport type NotifyEventType =\n | 'added'\n | 'removed'\n | 'updated'\n | 'observerAdded'\n | 'observerRemoved'\n | 'observerResultsUpdated'\n | 'observerOptionsUpdated'\n\nexport interface NotifyEvent {\n type: NotifyEventType\n}\n", "'use client'\nimport * as React from 'react'\n\nimport {\n QueriesObserver,\n QueryObserver,\n notifyManager,\n} from '@tanstack/query-core'\nimport { useQueryClient } from './QueryClientProvider'\nimport { useIsRestoring } from './isRestoring'\nimport { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary,\n} from './errorBoundaryUtils'\nimport {\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch,\n} from './suspense'\nimport { noop } from './utils'\nimport type {\n DefinedUseQueryResult,\n UseQueryOptions,\n UseQueryResult,\n} from './types'\nimport type {\n DefaultError,\n OmitKeyof,\n QueriesObserverOptions,\n QueriesPlaceholderDataFunction,\n QueryClient,\n QueryFunction,\n QueryKey,\n QueryObserverOptions,\n ThrowOnError,\n} from '@tanstack/query-core'\n\n// This defines the `UseQueryOptions` that are accepted in `QueriesOptions` & `GetOptions`.\n// `placeholderData` function always gets undefined passed\ntype UseQueryOptionsForUseQueries<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = OmitKeyof<\n UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n 'placeholderData' | 'subscribed'\n> & {\n placeholderData?: TQueryFnData | QueriesPlaceholderDataFunction<TQueryFnData>\n}\n\n// Avoid TS depth-limit error in case of large array literal\ntype MAXIMUM_DEPTH = 20\n\n// Widen the type of the symbol to enable type inference even if skipToken is not immutable.\ntype SkipTokenForUseQueries = symbol\n\ntype GetUseQueryOptionsForUseQueries<T> =\n // Part 1: responsible for applying explicit type parameter to function arguments, if object { queryFnData: TQueryFnData, error: TError, data: TData }\n T extends {\n queryFnData: infer TQueryFnData\n error?: infer TError\n data: infer TData\n }\n ? UseQueryOptionsForUseQueries<TQueryFnData, TError, TData>\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? UseQueryOptionsForUseQueries<TQueryFnData, TError>\n : T extends { data: infer TData; error?: infer TError }\n ? UseQueryOptionsForUseQueries<unknown, TError, TData>\n : // Part 2: responsible for applying explicit type parameter to function arguments, if tuple [TQueryFnData, TError, TData]\n T extends [infer TQueryFnData, infer TError, infer TData]\n ? UseQueryOptionsForUseQueries<TQueryFnData, TError, TData>\n : T extends [infer TQueryFnData, infer TError]\n ? UseQueryOptionsForUseQueries<TQueryFnData, TError>\n : T extends [infer TQueryFnData]\n ? UseQueryOptionsForUseQueries<TQueryFnData>\n : // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided\n T extends {\n queryFn?:\n | QueryFunction<infer TQueryFnData, infer TQueryKey>\n | SkipTokenForUseQueries\n select?: (data: any) => infer TData\n throwOnError?: ThrowOnError<any, infer TError, any, any>\n }\n ? UseQueryOptionsForUseQueries<\n TQueryFnData,\n unknown extends TError ? DefaultError : TError,\n unknown extends TData ? TQueryFnData : TData,\n TQueryKey\n >\n : // Fallback\n UseQueryOptionsForUseQueries\n\n// A defined initialData setting should return a DefinedUseQueryResult rather than UseQueryResult\ntype GetDefinedOrUndefinedQueryResult<T, TData, TError = unknown> = T extends {\n initialData?: infer TInitialData\n}\n ? unknown extends TInitialData\n ? UseQueryResult<TData, TError>\n : TInitialData extends TData\n ? DefinedUseQueryResult<TData, TError>\n : TInitialData extends () => infer TInitialDataResult\n ? unknown extends TInitialDataResult\n ? UseQueryResult<TData, TError>\n : TInitialDataResult extends TData\n ? DefinedUseQueryResult<TData, TError>\n : UseQueryResult<TData, TError>\n : UseQueryResult<TData, TError>\n : UseQueryResult<TData, TError>\n\ntype GetUseQueryResult<T> =\n // Part 1: responsible for mapping explicit type parameter to function result, if object\n T extends { queryFnData: any; error?: infer TError; data: infer TData }\n ? GetDefinedOrUndefinedQueryResult<T, TData, TError>\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? GetDefinedOrUndefinedQueryResult<T, TQueryFnData, TError>\n : T extends { data: infer TData; error?: infer TError }\n ? GetDefinedOrUndefinedQueryResult<T, TData, TError>\n : // Part 2: responsible for mapping explicit type parameter to function result, if tuple\n T extends [any, infer TError, infer TData]\n ? GetDefinedOrUndefinedQueryResult<T, TData, TError>\n : T extends [infer TQueryFnData, infer TError]\n ? GetDefinedOrUndefinedQueryResult<T, TQueryFnData, TError>\n : T extends [infer TQueryFnData]\n ? GetDefinedOrUndefinedQueryResult<T, TQueryFnData>\n : // Part 3: responsible for mapping inferred type to results, if no explicit parameter was provided\n T extends {\n queryFn?:\n | QueryFunction<infer TQueryFnData, any>\n | SkipTokenForUseQueries\n select?: (data: any) => infer TData\n throwOnError?: ThrowOnError<any, infer TError, any, any>\n }\n ? GetDefinedOrUndefinedQueryResult<\n T,\n unknown extends TData ? TQueryFnData : TData,\n unknown extends TError ? DefaultError : TError\n >\n : // Fallback\n UseQueryResult\n\n/**\n * QueriesOptions reducer recursively unwraps function arguments to infer/enforce type param\n */\nexport type QueriesOptions<\n T extends Array<any>,\n TResults extends Array<any> = [],\n TDepth extends ReadonlyArray<number> = [],\n> = TDepth['length'] extends MAXIMUM_DEPTH\n ? Array<UseQueryOptionsForUseQueries>\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...TResults, GetUseQueryOptionsForUseQueries<Head>]\n : T extends [infer Head, ...infer Tails]\n ? QueriesOptions<\n [...Tails],\n [...TResults, GetUseQueryOptionsForUseQueries<Head>],\n [...TDepth, 1]\n >\n : ReadonlyArray<unknown> extends T\n ? T\n : // If T is *some* array but we couldn't assign unknown[] to it, then it must hold some known/homogenous type!\n // use this to infer the param types in the case of Array.map() argument\n T extends Array<\n UseQueryOptionsForUseQueries<\n infer TQueryFnData,\n infer TError,\n infer TData,\n infer TQueryKey\n >\n >\n ? Array<\n UseQueryOptionsForUseQueries<\n TQueryFnData,\n TError,\n TData,\n TQueryKey\n >\n >\n : // Fallback\n Array<UseQueryOptionsForUseQueries>\n\n/**\n * QueriesResults reducer recursively maps type param to results\n */\nexport type QueriesResults<\n T extends Array<any>,\n TResults extends Array<any> = [],\n TDepth extends ReadonlyArray<number> = [],\n> = TDepth['length'] extends MAXIMUM_DEPTH\n ? Array<UseQueryResult>\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...TResults, GetUseQueryResult<Head>]\n : T extends [infer Head, ...infer Tails]\n ? QueriesResults<\n [...Tails],\n [...TResults, GetUseQueryResult<Head>],\n [...TDepth, 1]\n >\n : { [K in keyof T]: GetUseQueryResult<T[K]> }\n\nexport function useQueries<\n T extends Array<any>,\n TCombinedResult = QueriesResults<T>,\n>(\n {\n queries,\n ...options\n }: {\n queries:\n | readonly [...QueriesOptions<T>]\n | readonly [...{ [K in keyof T]: GetUseQueryOptionsForUseQueries<T[K]> }]\n combine?: (result: QueriesResults<T>) => TCombinedResult\n subscribed?: boolean\n },\n queryClient?: QueryClient,\n): TCombinedResult {\n const client = useQueryClient(queryClient)\n const isRestoring = useIsRestoring()\n const errorResetBoundary = useQueryErrorResetBoundary()\n\n const defaultedQueries = React.useMemo(\n () =>\n queries.map((opts) => {\n const defaultedOptions = client.defaultQueryOptions(\n opts as QueryObserverOptions,\n )\n\n // Make sure the results are already in fetching state before subscribing or updating options\n defaultedOptions._optimisticResults = isRestoring\n ? 'isRestoring'\n : 'optimistic'\n\n return defaultedOptions\n }),\n [queries, client, isRestoring],\n )\n\n defaultedQueries.forEach((query) => {\n ensureSuspenseTimers(query)\n ensurePreventErrorBoundaryRetry(query, errorResetBoundary)\n })\n\n useClearResetErrorBoundary(errorResetBoundary)\n\n const [observer] = React.useState(\n () =>\n new QueriesObserver<TCombinedResult>(\n client,\n defaultedQueries,\n options as QueriesObserverOptions<TCombinedResult>,\n ),\n )\n\n // note: this must be called before useSyncExternalStore\n const [optimisticResult, getCombinedResult, trackResult] =\n observer.getOptimisticResult(\n defaultedQueries,\n (options as QueriesObserverOptions<TCombinedResult>).combine,\n )\n\n const shouldSubscribe = !isRestoring && options.subscribed !== false\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) =>\n shouldSubscribe\n ? observer.subscribe(notifyManager.batchCalls(onStoreChange))\n : noop,\n [observer, shouldSubscribe],\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult(),\n )\n\n React.useEffect(() => {\n // Do not notify on updates because of changes in the options because\n // these changes should already be reflected in the optimistic result.\n observer.setQueries(\n defaultedQueries,\n options as QueriesObserverOptions<TCombinedResult>,\n {\n listeners: false,\n },\n )\n }, [defaultedQueries, options, observer])\n\n const shouldAtLeastOneSuspend = optimisticResult.some((result, index) =>\n shouldSuspend(defaultedQueries[index], result),\n )\n\n const suspensePromises = shouldAtLeastOneSuspend\n ? optimisticResult.flatMap((result, index) => {\n const opts = defaultedQueries[index]\n\n if (opts) {\n const queryObserver = new QueryObserver(client, opts)\n if (shouldSuspend(opts, result)) {\n return fetchOptimistic(opts, queryObserver, errorResetBoundary)\n } else if (willFetch(result, isRestoring)) {\n void fetchOptimistic(opts, queryObserver, errorResetBoundary)\n }\n }\n return []\n })\n : []\n\n if (suspensePromises.length > 0) {\n throw Promise.all(suspensePromises)\n }\n const firstSingleResultWhichShouldThrow = optimisticResult.find(\n (result, index) => {\n const query = defaultedQueries[index]\n return (\n query &&\n getHasError({\n result,\n errorResetBoundary,\n throwOnError: query.throwOnError,\n query: client.getQueryCache().get(query.queryHash),\n suspense: query.suspense,\n })\n )\n },\n )\n\n if (firstSingleResultWhichShouldThrow?.error) {\n throw firstSingleResultWhichShouldThrow.error\n }\n\n return getCombinedResult(trackResult())\n}\n", "'use client'\nimport * as React from 'react'\n\nimport type { QueryClient } from '@tanstack/query-core'\n\nexport const QueryClientContext = React.createContext<QueryClient | undefined>(\n undefined,\n)\n\nexport const useQueryClient = (queryClient?: QueryClient) => {\n const client = React.useContext(QueryClientContext)\n\n if (queryClient) {\n return queryClient\n }\n\n if (!client) {\n throw new Error('No QueryClient set, use QueryClientProvider to set one')\n }\n\n return client\n}\n\nexport type QueryClientProviderProps = {\n client: QueryClient\n children?: React.ReactNode\n}\n\nexport const QueryClientProvider = ({\n client,\n children,\n}: QueryClientProviderProps): React.JSX.Element => {\n React.useEffect(() => {\n client.mount()\n return () => {\n client.unmount()\n }\n }, [client])\n\n return (\n <QueryClientContext.Provider value={client}>\n {children}\n </QueryClientContext.Provider>\n )\n}\n", "'use client'\nimport * as React from 'react'\n\nconst IsRestoringContext = React.createContext(false)\n\nexport const useIsRestoring = () => React.useContext(IsRestoringContext)\nexport const IsRestoringProvider = IsRestoringContext.Provider\n", "'use client'\nimport * as React from 'react'\n\n// CONTEXT\nexport type QueryErrorResetFunction = () => void\nexport type QueryErrorIsResetFunction = () => boolean\nexport type QueryErrorClearResetFunction = () => void\n\nexport interface QueryErrorResetBoundaryValue {\n clearReset: QueryErrorClearResetFunction\n isReset: QueryErrorIsResetFunction\n reset: QueryErrorResetFunction\n}\n\nfunction createValue(): QueryErrorResetBoundaryValue {\n let isReset = false\n return {\n clearReset: () => {\n isReset = false\n },\n reset: () => {\n isReset = true\n },\n isReset: () => {\n return isReset\n },\n }\n}\n\nconst QueryErrorResetBoundaryContext = React.createContext(createValue())\n\n// HOOK\n\nexport const useQueryErrorResetBoundary = () =>\n React.useContext(QueryErrorResetBoundaryContext)\n\n// COMPONENT\n\nexport type QueryErrorResetBoundaryFunction = (\n value: QueryErrorResetBoundaryValue,\n) => React.ReactNode\n\nexport interface QueryErrorResetBoundaryProps {\n children: QueryErrorResetBoundaryFunction | React.ReactNode\n}\n\nexport const QueryErrorResetBoundary = ({\n children,\n}: QueryErrorResetBoundaryProps) => {\n const [value] = React.useState(() => createValue())\n return (\n <QueryErrorResetBoundaryContext.Provider value={value}>\n {typeof children === 'function' ? children(value) : children}\n </QueryErrorResetBoundaryContext.Provider>\n )\n}\n", "'use client'\nimport * as React from 'react'\nimport { shouldThrowError } from './utils'\nimport type {\n DefaultedQueryObserverOptions,\n Query,\n QueryKey,\n QueryObserverResult,\n ThrowOnError,\n} from '@tanstack/query-core'\nimport type { QueryErrorResetBoundaryValue } from './QueryErrorResetBoundary'\n\nexport const ensurePreventErrorBoundaryRetry = <\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey extends QueryKey,\n>(\n options: DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n errorResetBoundary: QueryErrorResetBoundaryValue,\n) => {\n if (\n options.suspense ||\n options.throwOnError ||\n options.experimental_prefetchInRender\n ) {\n // Prevent retrying failed query if the error boundary has not been reset yet\n if (!errorResetBoundary.isReset()) {\n options.retryOnMount = false\n }\n }\n}\n\nexport const useClearResetErrorBoundary = (\n errorResetBoundary: QueryErrorResetBoundaryValue,\n) => {\n React.useEffect(() => {\n errorResetBoundary.clearReset()\n }, [errorResetBoundary])\n}\n\nexport const getHasError = <\n TData,\n TError,\n TQueryFnData,\n TQueryData,\n TQueryKey extends QueryKey,\n>({\n result,\n errorResetBoundary,\n throwOnError,\n query,\n suspense,\n}: {\n result: QueryObserverResult<TData, TError>\n errorResetBoundary: QueryErrorResetBoundaryValue\n throwOnError: ThrowOnError<TQueryFnData, TError, TQueryData, TQueryKey>\n query: Query<TQueryFnData, TError, TQueryData, TQueryKey> | undefined\n suspense: boolean | undefined\n}) => {\n return (\n result.isError &&\n !errorResetBoundary.isReset() &&\n !result.isFetching &&\n query &&\n ((suspense && result.data === undefined) ||\n shouldThrowError(throwOnError, [result.error, query]))\n )\n}\n", "export function shouldThrowError<T extends (...args: Array<any>) => boolean>(\n throwError: boolean | T | undefined,\n params: Parameters<T>,\n): boolean {\n // Allow throwError function to override throwing behavior on a per-error basis\n if (typeof throwError === 'function') {\n return throwError(...params)\n }\n\n return !!throwError\n}\n\nexport function noop(): void {}\n", "import type {\n DefaultError,\n DefaultedQueryObserverOptions,\n Query,\n QueryKey,\n QueryObserver,\n QueryObserverResult,\n} from '@tanstack/query-core'\nimport type { QueryErrorResetBoundaryValue } from './QueryErrorResetBoundary'\n\nexport const defaultThrowOnError = <\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n _error: TError,\n query: Query<TQueryFnData, TError, TData, TQueryKey>,\n) => query.state.data === undefined\n\nexport const ensureSuspenseTimers = (\n defaultedOptions: DefaultedQueryObserverOptions<any, any, any, any, any>,\n) => {\n const originalStaleTime = defaultedOptions.staleTime\n\n if (defaultedOptions.suspense) {\n // Handle staleTime to ensure minimum 1000ms in Suspense mode\n // This prevents unnecessary refetching when components remount after suspending\n defaultedOptions.staleTime =\n typeof originalStaleTime === 'function'\n ? (...args) => Math.max(originalStaleTime(...args), 1000)\n : Math.max(originalStaleTime ?? 1000, 1000)\n\n if (typeof defaultedOptions.gcTime === 'number') {\n defaultedOptions.gcTime = Math.max(defaultedOptions.gcTime, 1000)\n }\n }\n}\n\nexport const willFetch = (\n result: QueryObserverResult<any, any>,\n isRestoring: boolean,\n) => result.isLoading && result.isFetching && !isRestoring\n\nexport const shouldSuspend = (\n defaultedOptions:\n | DefaultedQueryObserverOptions<any, any, any, any, any>\n | undefined,\n result: QueryObserverResult<any, any>,\n) => defaultedOptions?.suspense && result.isPending\n\nexport const fetchOptimistic = <\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey extends QueryKey,\n>(\n defaultedOptions: DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n observer: QueryObserver<TQueryFnData, TError, TData, TQueryData, TQueryKey>,\n errorResetBoundary: QueryErrorResetBoundaryValue,\n) =>\n observer.fetchOptimistic(defaultedOptions).catch(() => {\n errorResetBoundary.clearReset()\n })\n", "'use client'\nimport * as React from 'react'\n\nimport { isServer, notifyManager } from '@tanstack/query-core'\nimport { useQueryClient } from './QueryClientProvider'\nimport { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary,\n} from './errorBoundaryUtils'\nimport { useIsRestoring } from './isRestoring'\nimport {\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch,\n} from './suspense'\nimport { noop } from './utils'\nimport type {\n QueryClient,\n QueryKey,\n QueryObserver,\n QueryObserverResult,\n} from '@tanstack/query-core'\nimport type { UseBaseQueryOptions } from './types'\n\nexport function useBaseQuery<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey extends QueryKey,\n>(\n options: UseBaseQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n Observer: typeof QueryObserver,\n queryClient?: QueryClient,\n): QueryObserverResult<TData, TError> {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof options !== 'object' || Array.isArray(options)) {\n throw new Error(\n 'Bad argument type. Starting with v5, only the \"Object\" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object',\n )\n }\n }\n\n const client = useQueryClient(queryClient)\n const isRestoring = useIsRestoring()\n const errorResetBoundary = useQueryErrorResetBoundary()\n const defaultedOptions = client.defaultQueryOptions(options)\n\n ;(client.getDefaultOptions().queries as any)?._experimental_beforeQuery?.(\n defaultedOptions,\n )\n\n if (process.env.NODE_ENV !== 'production') {\n if (!defaultedOptions.queryFn) {\n console.error(\n `[${defaultedOptions.queryHash}]: No queryFn was passed as an option, and no default queryFn was found. The queryFn parameter is only optional when using a default queryFn. More info here: https://tanstack.com/query/latest/docs/framework/react/guides/default-query-function`,\n )\n }\n }\n\n // Make sure results are optimistically set in fetching state before subscribing or updating options\n defaultedOptions._optimisticResults = isRestoring\n ? 'isRestoring'\n : 'optimistic'\n\n ensureSuspenseTimers(defaultedOptions)\n ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary)\n\n useClearResetErrorBoundary(errorResetBoundary)\n\n // this needs to be invoked before creating the Observer because that can create a cache entry\n const isNewCacheEntry = !client\n .getQueryCache()\n .get(defaultedOptions.queryHash)\n\n const [observer] = React.useState(\n () =>\n new Observer<TQueryFnData, TError, TData, TQueryData, TQueryKey>(\n client,\n defaultedOptions,\n ),\n )\n\n // note: this must be called before useSyncExternalStore\n const result = observer.getOptimisticResult(defaultedOptions)\n\n const shouldSubscribe = !isRestoring && options.subscribed !== false\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => {\n const unsubscribe = shouldSubscribe\n ? observer.subscribe(notifyManager.batchCalls(onStoreChange))\n : noop\n\n // Update result to make sure we did not miss any query updates\n // between creating the observer and subscribing to it.\n observer.updateResult()\n\n return unsubscribe\n },\n [observer, shouldSubscribe],\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult(),\n )\n\n React.useEffect(() => {\n // Do not notify on updates because of changes in the options because\n // these changes should already be reflected in the optimistic result.\n observer.setOptions(defaultedOptions, { listeners: false })\n }, [defaultedOptions, observer])\n\n // Handle suspense\n if (shouldSuspend(defaultedOptions, result)) {\n throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\n }\n\n // Handle error boundary\n if (\n getHasError({\n result,\n errorResetBoundary,\n throwOnError: defaultedOptions.throwOnError,\n query: client\n .getQueryCache()\n .get<\n TQueryFnData,\n TError,\n TQueryData,\n TQueryKey\n >(defaultedOptions.queryHash),\n suspense: defaultedOptions.suspense,\n })\n ) {\n throw result.error\n }\n\n ;(client.getDefaultOptions().queries as any)?._experimental_afterQuery?.(\n defaultedOptions,\n result,\n )\n\n if (\n defaultedOptions.experimental_prefetchInRender &&\n !isServer &&\n willFetch(result, isRestoring)\n ) {\n const promise = isNewCacheEntry\n ? // Fetch immediately on render in order to ensure `.promise` is resolved even if the component is unmounted\n fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\n : // subscribe to the \"cache promise\" so that we can finalize the currentThenable once data comes in\n client.getQueryCache().get(defaultedOptions.queryHash)?.promise\n\n promise?.catch(noop).finally(() => {\n // `.updateResult()` will trigger `.#currentThenable` to finalize\n observer.updateResult()\n })\n }\n\n // Handle result property usage tracking\n return !defaultedOptions.notifyOnChangeProps\n ? observer.trackResult(result)\n : result\n}\n", "'use client'\nimport { QueryObserver } from '@tanstack/query-core'\nimport { useBaseQuery } from './useBaseQuery'\nimport type { DefaultError, QueryClient, QueryKey } from '@tanstack/query-core'\nimport type {\n DefinedUseQueryResult,\n UseQueryOptions,\n UseQueryResult,\n} from './types'\nimport type {\n DefinedInitialDataOptions,\n UndefinedInitialDataOptions,\n} from './queryOptions'\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n): DefinedUseQueryResult<TData, TError>\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n): UseQueryResult<TData, TError>\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n): UseQueryResult<TData, TError>\n\nexport function useQuery(options: UseQueryOptions, queryClient?: QueryClient) {\n return useBaseQuery(options, QueryObserver, queryClient)\n}\n", "/* eslint-disable react-compiler/react-compiler */\n\n'use client'\nimport * as React from 'react'\n\nimport { hydrate } from '@tanstack/query-core'\nimport { useQueryClient } from './QueryClientProvider'\nimport type {\n DehydratedState,\n HydrateOptions,\n OmitKeyof,\n QueryClient,\n} from '@tanstack/query-core'\n\nexport interface HydrationBoundaryProps {\n state?: unknown\n options?: OmitKeyof<HydrateOptions, 'defaultOptions'> & {\n defaultOptions?: OmitKeyof<\n Exclude<HydrateOptions['defaultOptions'], undefined>,\n 'mutations'\n >\n }\n children?: React.ReactNode\n queryClient?: QueryClient\n}\n\nconst hasProperty = <TKey extends string>(\n obj: unknown,\n key: TKey,\n): obj is { [k in TKey]: unknown } => {\n return typeof obj === 'object' && obj !== null && key in obj\n}\n\nexport const HydrationBoundary = ({\n children,\n options = {},\n state,\n queryClient,\n}: HydrationBoundaryProps) => {\n const client = useQueryClient(queryClient)\n const [hydrationQueue, setHydrationQueue] = React.useState<\n DehydratedState['queries'] | undefined\n >()\n\n const optionsRef = React.useRef(options)\n optionsRef.current = options\n\n // This useMemo is for performance reasons only, everything inside it _must_\n // be safe to run in every render and code here should be read as \"in render\".\n //\n // This code needs to happen during the render phase, because after initial\n // SSR, hydration needs to happen _before_ children render. Also, if hydrating\n // during a transition, we want to hydrate as much as is safe in render so\n // we can prerender as much as possible.\n //\n // For any queries that already exist in the cache, we want to hold back on\n // hydrating until _after_ the render phase. The reason for this is that during\n // transitions, we don't want the existing queries and observers to update to\n // the new data on the current page, only _after_ the transition is committed.\n // If the transition is aborted, we will have hydrated any _new_ queries, but\n // we throw away the fresh data for any existing ones to avoid unexpectedly\n // updating the UI.\n React.useMemo(() => {\n if (state) {\n if (typeof state !== 'object') {\n return\n }\n\n const queryCache = client.getQueryCache()\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = (state as DehydratedState).queries || []\n\n const newQueries: DehydratedState['queries'] = []\n const existingQueries: DehydratedState['queries'] = []\n for (const dehydratedQuery of queries) {\n const existingQuery = queryCache.get(dehydratedQuery.queryHash)\n\n if (!existingQuery) {\n newQueries.push(dehydratedQuery)\n } else {\n const hydrationIsNewer =\n dehydratedQuery.state.dataUpdatedAt >\n existingQuery.state.dataUpdatedAt || // RSC special serialized then-able chunks\n (hasProperty(dehydratedQuery.promise, 'status') &&\n hasProperty(existingQuery.promise, 'status') &&\n dehydratedQuery.promise.status !== existingQuery.promise.status)\n\n const queryAlreadyQueued = hydrationQueue?.find(\n (query) => query.queryHash === dehydratedQuery.queryHash,\n )\n\n if (\n hydrationIsNewer &&\n (!queryAlreadyQueued ||\n dehydratedQuery.state.dataUpdatedAt >\n queryAlreadyQueued.state.dataUpdatedAt)\n ) {\n existingQueries.push(dehydratedQuery)\n }\n }\n }\n\n if (newQueries.length > 0) {\n // It's actually fine to call this with queries/state that already exists\n // in the cache, or is older. hydrate() is idempotent for queries.\n hydrate(client, { queries: newQueries }, optionsRef.current)\n }\n if (existingQueries.length > 0) {\n setHydrationQueue((prev) =>\n prev ? [...prev, ...existingQueries] : existingQueries,\n )\n }\n }\n }, [client, hydrationQueue, state])\n\n React.useEffect(() => {\n if (hydrationQueue) {\n hydrate(client, { queries: hydrationQueue }, optionsRef.current)\n setHydrationQueue(undefined)\n }\n }, [client, hydrationQueue])\n\n return children as React.ReactElement\n}\n", "'use client'\nimport * as React from 'react'\nimport { notifyManager } from '@tanstack/query-core'\n\nimport { useQueryClient } from './QueryClientProvider'\nimport type { QueryClient, QueryFilters } from '@tanstack/query-core'\n\nexport function useIsFetching(\n filters?: QueryFilters,\n queryClient?: QueryClient,\n): number {\n const client = useQueryClient(queryClient)\n const queryCache = client.getQueryCache()\n\n return React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) =>\n queryCache.subscribe(notifyManager.batchCalls(onStoreChange)),\n [queryCache],\n ),\n () => client.isFetching(filters),\n () => client.isFetching(filters),\n )\n}\n", "/* eslint-disable react-compiler/react-compiler */\n\n'use client'\nimport * as React from 'react'\n\nimport { notifyManager, replaceEqualDeep } from '@tanstack/query-core'\nimport { useQueryClient } from './QueryClientProvider'\nimport type {\n Mutation,\n MutationCache,\n MutationFilters,\n MutationState,\n QueryClient,\n} from '@tanstack/query-core'\n\nexport function useIsMutating(\n filters?: MutationFilters,\n queryClient?: QueryClient,\n): number {\n const client = useQueryClient(queryClient)\n return useMutationState(\n { filters: { ...filters, status: 'pending' } },\n client,\n ).length\n}\n\ntype MutationStateOptions<TResult = MutationState> = {\n filters?: MutationFilters\n select?: (mutation: Mutation) => TResult\n}\n\nfunction getResult<TResult = MutationState>(\n mutationCache: MutationCache,\n options: MutationStateOptions<TResult>,\n): Array<TResult> {\n return mutationCache\n .findAll(options.filters)\n .map(\n (mutation): TResult =>\n (options.select ? options.select(mutation) : mutation.state) as TResult,\n )\n}\n\nexport function useMutationState<TResult = MutationState>(\n options: MutationStateOptions<TResult> = {},\n queryClient?: QueryClient,\n): Array<TResult> {\n const mutationCache = useQueryClient(queryClient).getMutationCache()\n const optionsRef = React.useRef(options)\n const result = React.useRef<Array<TResult>>(null)\n if (!result.current) {\n result.current = getResult(mutationCache, options)\n }\n\n React.useEffect(() => {\n optionsRef.current = options\n })\n\n return React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) =>\n mutationCache.subscribe(() => {\n const nextResult = replaceEqualDeep(\n result.current,\n getResult(mutationCache, optionsRef.current),\n )\n if (result.current !== nextResult) {\n result.current = nextResult\n notifyManager.schedule(onStoreChange)\n }\n }),\n [mutationCache],\n ),\n () => result.current,\n () => result.current,\n )!\n}\n", "'use client'\nimport * as React from 'react'\nimport { MutationObserver, notifyManager } from '@tanstack/query-core'\nimport { useQueryClient } from './QueryClientProvider'\nimport { noop, shouldThrowError } from './utils'\nimport type {\n UseMutateFunction,\n UseMutationOptions,\n UseMutationResult,\n} from './types'\nimport type { DefaultError, QueryClient } from '@tanstack/query-core'\n\n// HOOK\n\nexport function useMutation<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n>(\n options: UseMutationOptions<TData, TError, TVariables, TContext>,\n queryClient?: QueryClient,\n): UseMutationResult<TData, TError, TVariables, TContext> {\n const client = useQueryClient(queryClient)\n\n const [observer] = React.useState(\n () =>\n new MutationObserver<TData, TError, TVariables, TContext>(\n client,\n options,\n ),\n )\n\n React.useEffect(() => {\n observer.setOptions(options)\n }, [observer, options])\n\n const result = React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) =>\n observer.subscribe(notifyManager.batchCalls(onStoreChange)),\n [observer],\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult(),\n )\n\n const mutate = React.useCallback<\n UseMutateFunction<TData, TError, TVariables, TContext>\n >(\n (variables, mutateOptions) => {\n observer.mutate(variables, mutateOptions).catch(noop)\n },\n [observer],\n )\n\n if (\n result.error &&\n shouldThrowError(observer.options.throwOnError, [result.error])\n ) {\n throw result.error\n }\n\n return { ...result, mutate, mutateAsync: result.mutate }\n}\n", "'use client'\nimport { InfiniteQueryObserver } from '@tanstack/query-core'\nimport { useBaseQuery } from './useBaseQuery'\nimport type {\n DefaultError,\n InfiniteData,\n QueryClient,\n QueryKey,\n QueryObserver,\n} from '@tanstack/query-core'\nimport type {\n DefinedUseInfiniteQueryResult,\n UseInfiniteQueryOptions,\n UseInfiniteQueryResult,\n} from './types'\nimport type {\n DefinedInitialDataInfiniteOptions,\n UndefinedInitialDataInfiniteOptions,\n} from './infiniteQueryOptions'\n\nexport function useInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n queryClient?: QueryClient,\n): DefinedUseInfiniteQueryResult<TData, TError>\n\nexport function useInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n queryClient?: QueryClient,\n): UseInfiniteQueryResult<TData, TError>\n\nexport function useInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: UseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n >,\n queryClient?: QueryClient,\n): UseInfiniteQueryResult<TData, TError>\n\nexport function useInfiniteQuery(\n options: UseInfiniteQueryOptions,\n queryClient?: QueryClient,\n) {\n return useBaseQuery(\n options,\n InfiniteQueryObserver as typeof QueryObserver,\n queryClient,\n )\n}\n", "import { useCallback, useEffect, useRef } from 'react';\nimport { useLocation, useNavigate, Path } from 'react-router-dom';\nimport { useQueryClient } from '@tanstack/react-query';\n\nimport useAuthProvider, { defaultAuthParams } from './useAuthProvider';\nimport { useResetStore } from '../store';\nimport { useBasename } from '../routing';\nimport { removeDoubleSlashes } from '../routing/useCreatePath';\n\n/**\n * Get a callback for calling the authProvider.logout() method,\n * redirect to the login page, and clear the store.\n *\n * @see useAuthProvider\n *\n * @returns {Function} logout callback\n *\n * @example\n *\n * import { useLogout } from 'react-admin';\n *\n * const LogoutButton = () => {\n * const logout = useLogout();\n * const handleClick = () => logout();\n * return <button onClick={handleClick}>Logout</button>;\n * }\n */\nconst useLogout = (): Logout => {\n const authProvider = useAuthProvider();\n const queryClient = useQueryClient();\n const resetStore = useResetStore();\n const navigate = useNavigate();\n // useNavigate forces rerenders on every navigation, even if we don't use the result\n // see https://github.com/remix-run/react-router/issues/7634\n // so we use a ref to bail out of rerenders when we don't need to\n const navigateRef = useRef(navigate);\n const location = useLocation();\n const locationRef = useRef(location);\n const basename = useBasename();\n const loginUrl = removeDoubleSlashes(\n `${basename}/${defaultAuthParams.loginUrl}`\n );\n\n /*\n * We need the current location to pass in the router state\n * so that the login hook knows where to redirect to as next route after login.\n *\n * But if we used the location from useLocation as a dependency of the logout\n * function, it would be rebuilt each time the user changes location.\n * Consequently, that would force a rerender of all components using this hook\n * upon navigation (CoreAdminRouter for example).\n *\n * To avoid that, we store the location in a ref.\n */\n useEffect(() => {\n locationRef.current = location;\n navigateRef.current = navigate;\n }, [location, navigate]);\n\n const logout: Logout = useCallback(\n (\n params = {},\n redirectTo = loginUrl,\n redirectToCurrentLocationAfterLogin = true\n ) => {\n if (authProvider) {\n return authProvider\n .logout(params)\n .then(redirectToFromProvider => {\n if (\n redirectToFromProvider === false ||\n redirectTo === false\n ) {\n resetStore();\n queryClient.clear();\n // do not redirect\n return;\n }\n\n const finalRedirectTo =\n redirectToFromProvider || redirectTo;\n\n if (finalRedirectTo?.startsWith('http')) {\n // absolute link (e.g. https://my.oidc.server/login)\n resetStore();\n queryClient.clear();\n window.location.href = finalRedirectTo;\n return finalRedirectTo;\n }\n\n // redirectTo is an internal location that may contain a query string, e.g. '/login?foo=bar'\n // we must split it to pass a structured location to navigate()\n const redirectToParts = finalRedirectTo.split('?');\n const newLocation: Partial<Path> = {\n pathname: redirectToParts[0],\n };\n let newLocationOptions = {};\n\n if (\n redirectToCurrentLocationAfterLogin &&\n locationRef.current &&\n locationRef.current.pathname\n ) {\n newLocationOptions = {\n state: {\n nextPathname: locationRef.current.pathname,\n nextSearch: locationRef.current.search,\n },\n };\n }\n if (redirectToParts[1]) {\n newLocation.search = redirectToParts[1];\n }\n navigateRef.current(newLocation, newLocationOptions);\n resetStore();\n queryClient.clear();\n\n return redirectToFromProvider;\n });\n } else {\n navigateRef.current(\n {\n pathname: loginUrl,\n },\n {\n state: {\n nextPathname:\n locationRef.current &&\n locationRef.current.pathname,\n },\n }\n );\n resetStore();\n queryClient.clear();\n return Promise.resolve();\n }\n },\n [authProvider, resetStore, loginUrl, queryClient]\n );\n\n return logout;\n};\n\n/**\n * Log the current user out by calling the authProvider.logout() method,\n * and redirect them to the login screen.\n *\n * @param {Object} params The parameters to pass to the authProvider\n * @param {string} redirectTo The path name to redirect the user to (optional, defaults to login)\n * @param {boolean} redirectToCurrentLocationAfterLogin Whether the button shall record the current location to redirect to it after login. true by default.\n *\n * @return {Promise} The authProvider response\n */\ntype Logout = (\n params?: any,\n redirectTo?: string | false,\n redirectToCurrentLocationAfterLogin?: boolean\n) => Promise<any>;\n\nexport default useLogout;\n", "/**\n * react-router v7.4.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nvar __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n\n// lib/router/history.ts\nvar Action = /* @__PURE__ */ ((Action2) => {\n Action2[\"Pop\"] = \"POP\";\n Action2[\"Push\"] = \"PUSH\";\n Action2[\"Replace\"] = \"REPLACE\";\n return Action2;\n})(Action || {});\nvar PopStateEventType = \"popstate\";\nfunction createMemoryHistory(options = {}) {\n let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n let entries;\n entries = initialEntries.map(\n (entry, index2) => createMemoryLocation(\n entry,\n typeof entry === \"string\" ? null : entry.state,\n index2 === 0 ? \"default\" : void 0\n )\n );\n let index = clampIndex(\n initialIndex == null ? entries.length - 1 : initialIndex\n );\n let action = \"POP\" /* Pop */;\n let listener = null;\n function clampIndex(n) {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation() {\n return entries[index];\n }\n function createMemoryLocation(to, state = null, key) {\n let location = createLocation(\n entries ? getCurrentLocation().pathname : \"/\",\n to,\n state,\n key\n );\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in memory history: ${JSON.stringify(\n to\n )}`\n );\n return location;\n }\n function createHref2(to) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n let history = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref: createHref2,\n createURL(to) {\n return new URL(createHref2(to), \"http://localhost\");\n },\n encodeLocation(to) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\"\n };\n },\n push(to, state) {\n action = \"PUSH\" /* Push */;\n let nextLocation = createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 1 });\n }\n },\n replace(to, state) {\n action = \"REPLACE\" /* Replace */;\n let nextLocation = createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 0 });\n }\n },\n go(delta) {\n action = \"POP\" /* Pop */;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({ action, location: nextLocation, delta });\n }\n },\n listen(fn) {\n listener = fn;\n return () => {\n listener = null;\n };\n }\n };\n return history;\n}\nfunction createBrowserHistory(options = {}) {\n function createBrowserLocation(window2, globalHistory) {\n let { pathname, search, hash } = window2.location;\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n globalHistory.state && globalHistory.state.usr || null,\n globalHistory.state && globalHistory.state.key || \"default\"\n );\n }\n function createBrowserHref(window2, to) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n return getUrlBasedHistory(\n createBrowserLocation,\n createBrowserHref,\n null,\n options\n );\n}\nfunction createHashHistory(options = {}) {\n function createHashLocation(window2, globalHistory) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\"\n } = parsePath(window2.location.hash.substring(1));\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n globalHistory.state && globalHistory.state.usr || null,\n globalHistory.state && globalHistory.state.key || \"default\"\n );\n }\n function createHashHref(window2, to) {\n let base = window2.document.querySelector(\"base\");\n let href2 = \"\";\n if (base && base.getAttribute(\"href\")) {\n let url = window2.location.href;\n let hashIndex = url.indexOf(\"#\");\n href2 = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n return href2 + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n function validateHashLocation(location, to) {\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in hash history.push(${JSON.stringify(\n to\n )})`\n );\n }\n return getUrlBasedHistory(\n createHashLocation,\n createHashHref,\n validateHashLocation,\n options\n );\n}\nfunction invariant(value, message) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\nfunction warning(cond, message) {\n if (!cond) {\n if (typeof console !== \"undefined\") console.warn(message);\n try {\n throw new Error(message);\n } catch (e) {\n }\n }\n}\nfunction createKey() {\n return Math.random().toString(36).substring(2, 10);\n}\nfunction getHistoryState(location, index) {\n return {\n usr: location.state,\n key: location.key,\n idx: index\n };\n}\nfunction createLocation(current, to, state = null, key) {\n let location = {\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\",\n ...typeof to === \"string\" ? parsePath(to) : to,\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: to && to.key || key || createKey()\n };\n return location;\n}\nfunction createPath({\n pathname = \"/\",\n search = \"\",\n hash = \"\"\n}) {\n if (search && search !== \"?\")\n pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\")\n pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\nfunction parsePath(path) {\n let parsedPath = {};\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substring(hashIndex);\n path = path.substring(0, hashIndex);\n }\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substring(searchIndex);\n path = path.substring(0, searchIndex);\n }\n if (path) {\n parsedPath.pathname = path;\n }\n }\n return parsedPath;\n}\nfunction getUrlBasedHistory(getLocation, createHref2, validateLocation, options = {}) {\n let { window: window2 = document.defaultView, v5Compat = false } = options;\n let globalHistory = window2.history;\n let action = \"POP\" /* Pop */;\n let listener = null;\n let index = getIndex();\n if (index == null) {\n index = 0;\n globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n }\n function getIndex() {\n let state = globalHistory.state || { idx: null };\n return state.idx;\n }\n function handlePop() {\n action = \"POP\" /* Pop */;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({ action, location: history.location, delta });\n }\n }\n function push(to, state) {\n action = \"PUSH\" /* Push */;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\n window2.location.assign(url);\n }\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 1 });\n }\n }\n function replace2(to, state) {\n action = \"REPLACE\" /* Replace */;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 0 });\n }\n }\n function createURL(to) {\n let base = window2.location.origin !== \"null\" ? window2.location.origin : window2.location.href;\n let href2 = typeof to === \"string\" ? to : createPath(to);\n href2 = href2.replace(/ $/, \"%20\");\n invariant(\n base,\n `No window.location.(origin|href) available to create URL for href: ${href2}`\n );\n return new URL(href2, base);\n }\n let history = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window2, globalHistory);\n },\n listen(fn) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window2.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n return () => {\n window2.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref2(window2, to);\n },\n createURL,\n encodeLocation(to) {\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash\n };\n },\n push,\n replace: replace2,\n go(n) {\n return globalHistory.go(n);\n }\n };\n return history;\n}\n\n// lib/router/utils.ts\nfunction unstable_createContext(defaultValue) {\n return { defaultValue };\n}\nvar _map;\nvar unstable_RouterContextProvider = class {\n constructor(init) {\n __privateAdd(this, _map, /* @__PURE__ */ new Map());\n if (init) {\n for (let [context, value] of init) {\n this.set(context, value);\n }\n }\n }\n get(context) {\n if (__privateGet(this, _map).has(context)) {\n return __privateGet(this, _map).get(context);\n }\n if (context.defaultValue !== void 0) {\n return context.defaultValue;\n }\n throw new Error(\"No value found for context\");\n }\n set(context, value) {\n __privateGet(this, _map).set(context, value);\n }\n};\n_map = new WeakMap();\nvar immutableRouteKeys = /* @__PURE__ */ new Set([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"children\"\n]);\nfunction isIndexRoute(route) {\n return route.index === true;\n}\nfunction convertRoutesToDataRoutes(routes, mapRouteProperties2, parentPath = [], manifest = {}) {\n return routes.map((route, index) => {\n let treePath = [...parentPath, String(index)];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(\n route.index !== true || !route.children,\n `Cannot specify children on an index route`\n );\n invariant(\n !manifest[id],\n `Found a route id collision on id \"${id}\". Route id's must be globally unique within Data Router usages`\n );\n if (isIndexRoute(route)) {\n let indexRoute = {\n ...route,\n ...mapRouteProperties2(route),\n id\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute = {\n ...route,\n ...mapRouteProperties2(route),\n id,\n children: void 0\n };\n manifest[id] = pathOrLayoutRoute;\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties2,\n treePath,\n manifest\n );\n }\n return pathOrLayoutRoute;\n }\n });\n}\nfunction matchRoutes(routes, locationArg, basename = \"/\") {\n return matchRoutesImpl(routes, locationArg, basename, false);\n}\nfunction matchRoutesImpl(routes, locationArg, basename, allowPartial) {\n let location = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n let pathname = stripBasename(location.pathname || \"/\", basename);\n if (pathname == null) {\n return null;\n }\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n let matches = null;\n for (let i = 0; matches == null && i < branches.length; ++i) {\n let decoded = decodePath(pathname);\n matches = matchRouteBranch(\n branches[i],\n decoded,\n allowPartial\n );\n }\n return matches;\n}\nfunction convertRouteMatchToUiMatch(match, loaderData) {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle\n };\n}\nfunction flattenRoutes(routes, branches = [], parentsMeta = [], parentPath = \"\") {\n let flattenRoute = (route, index, relativePath) => {\n let meta = {\n relativePath: relativePath === void 0 ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route\n };\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(\n meta.relativePath.startsWith(parentPath),\n `Absolute route path \"${meta.relativePath}\" nested under path \"${parentPath}\" is not valid. An absolute child route path must start with the combined path of all its parent routes.`\n );\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n if (route.children && route.children.length > 0) {\n invariant(\n // Our types know better, but runtime JS may not!\n // @ts-expect-error\n route.index !== true,\n `Index routes must not have child routes. Please remove all child routes from route path \"${path}\".`\n );\n flattenRoutes(route.children, branches, routesMeta, path);\n }\n if (route.path == null && !route.index) {\n return;\n }\n branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta\n });\n };\n routes.forEach((route, index) => {\n if (route.path === \"\" || !route.path?.includes(\"?\")) {\n flattenRoute(route, index);\n } else {\n for (let exploded of explodeOptionalSegments(route.path)) {\n flattenRoute(route, index, exploded);\n }\n }\n });\n return branches;\n}\nfunction explodeOptionalSegments(path) {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n let [first, ...rest] = segments;\n let isOptional = first.endsWith(\"?\");\n let required = first.replace(/\\?$/, \"\");\n if (rest.length === 0) {\n return isOptional ? [required, \"\"] : [required];\n }\n let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n let result = [];\n result.push(\n ...restExploded.map(\n (subpath) => subpath === \"\" ? required : [required, subpath].join(\"/\")\n )\n );\n if (isOptional) {\n result.push(...restExploded);\n }\n return result.map(\n (exploded) => path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded\n );\n}\nfunction rankRouteBranches(branches) {\n branches.sort(\n (a, b) => a.score !== b.score ? b.score - a.score : compareIndexes(\n a.routesMeta.map((meta) => meta.childrenIndex),\n b.routesMeta.map((meta) => meta.childrenIndex)\n )\n );\n}\nvar paramRe = /^:[\\w-]+$/;\nvar dynamicSegmentValue = 3;\nvar indexRouteValue = 2;\nvar emptySegmentValue = 1;\nvar staticSegmentValue = 10;\nvar splatPenalty = -2;\nvar isSplat = (s) => s === \"*\";\nfunction computeScore(path, index) {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n if (index) {\n initialScore += indexRouteValue;\n }\n return segments.filter((s) => !isSplat(s)).reduce(\n (score, segment) => score + (paramRe.test(segment) ? dynamicSegmentValue : segment === \"\" ? emptySegmentValue : staticSegmentValue),\n initialScore\n );\n}\nfunction compareIndexes(a, b) {\n let siblings = a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n return siblings ? (\n // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1]\n ) : (\n // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0\n );\n}\nfunction matchRouteBranch(branch, pathname, allowPartial = false) {\n let { routesMeta } = branch;\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname = matchedPathname === \"/\" ? pathname : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath(\n { path: meta.relativePath, caseSensitive: meta.caseSensitive, end },\n remainingPathname\n );\n let route = meta.route;\n if (!match && end && allowPartial && !routesMeta[routesMeta.length - 1].route.index) {\n match = matchPath(\n {\n path: meta.relativePath,\n caseSensitive: meta.caseSensitive,\n end: false\n },\n remainingPathname\n );\n }\n if (!match) {\n return null;\n }\n Object.assign(matchedParams, match.params);\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(\n joinPaths([matchedPathname, match.pathnameBase])\n ),\n route\n });\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n return matches;\n}\nfunction generatePath(originalPath, params = {}) {\n let path = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(\n false,\n `Route path \"${path}\" will be treated as if it were \"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must always follow a \\`/\\` in the pattern. To get rid of this warning, please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n path = path.replace(/\\*$/, \"/*\");\n }\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n const stringify = (p) => p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n const segments = path.split(/\\/+/).map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n if (isLastSegment && segment === \"*\") {\n const star = \"*\";\n return stringify(params[star]);\n }\n const keyMatch = segment.match(/^:([\\w-]+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n return segment.replace(/\\?$/g, \"\");\n }).filter((segment) => !!segment);\n return prefix + segments.join(\"/\");\n}\nfunction matchPath(pattern, pathname) {\n if (typeof pattern === \"string\") {\n pattern = { path: pattern, caseSensitive: false, end: true };\n }\n let [matcher, compiledParams] = compilePath(\n pattern.path,\n pattern.caseSensitive,\n pattern.end\n );\n let match = pathname.match(matcher);\n if (!match) return null;\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params = compiledParams.reduce(\n (memo2, { paramName, isOptional }, index) => {\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname.slice(0, matchedPathname.length - splatValue.length).replace(/(.)\\/+$/, \"$1\");\n }\n const value = captureGroups[index];\n if (isOptional && !value) {\n memo2[paramName] = void 0;\n } else {\n memo2[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n }\n return memo2;\n },\n {}\n );\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern\n };\n}\nfunction compilePath(path, caseSensitive = false, end = true) {\n warning(\n path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n `Route path \"${path}\" will be treated as if it were \"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must always follow a \\`/\\` in the pattern. To get rid of this warning, please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n let params = [];\n let regexpSource = \"^\" + path.replace(/\\/*\\*?$/, \"\").replace(/^\\/*/, \"/\").replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\").replace(\n /\\/:([\\w-]+)(\\?)?/g,\n (_, paramName, isOptional) => {\n params.push({ paramName, isOptional: isOptional != null });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n }\n );\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\n regexpSource += path === \"*\" || path === \"/*\" ? \"(.*)$\" : \"(?:\\\\/(.+)|\\\\/*)$\";\n } else if (end) {\n regexpSource += \"\\\\/*$\";\n } else if (path !== \"\" && path !== \"/\") {\n regexpSource += \"(?:(?=\\\\/|$))\";\n } else {\n }\n let matcher = new RegExp(regexpSource, caseSensitive ? void 0 : \"i\");\n return [matcher, params];\n}\nfunction decodePath(value) {\n try {\n return value.split(\"/\").map((v) => decodeURIComponent(v).replace(/\\//g, \"%2F\")).join(\"/\");\n } catch (error) {\n warning(\n false,\n `The URL path \"${value}\" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${error}).`\n );\n return value;\n }\n}\nfunction stripBasename(pathname, basename) {\n if (basename === \"/\") return pathname;\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n let startIndex = basename.endsWith(\"/\") ? basename.length - 1 : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n return null;\n }\n return pathname.slice(startIndex) || \"/\";\n}\nfunction resolvePath(to, fromPathname = \"/\") {\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\"\n } = typeof to === \"string\" ? parsePath(to) : to;\n let pathname = toPathname ? toPathname.startsWith(\"/\") ? toPathname : resolvePathname(toPathname, fromPathname) : fromPathname;\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash)\n };\n}\nfunction resolvePathname(relativePath, fromPathname) {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n relativeSegments.forEach((segment) => {\n if (segment === \"..\") {\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\nfunction getInvalidPathError(char, field, dest, path) {\n return `Cannot include a '${char}' character in a manually specified \\`to.${field}\\` field [${JSON.stringify(\n path\n )}]. Please separate it out to the \\`to.${dest}\\` field. Alternatively you may provide the full path as a string in <Link to=\"...\"> and the router will parse it for you.`;\n}\nfunction getPathContributingMatches(matches) {\n return matches.filter(\n (match, index) => index === 0 || match.route.path && match.route.path.length > 0\n );\n}\nfunction getResolveToMatches(matches) {\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches.map(\n (match, idx) => idx === pathMatches.length - 1 ? match.pathname : match.pathnameBase\n );\n}\nfunction resolveTo(toArg, routePathnames, locationPathname, isPathRelative = false) {\n let to;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = { ...toArg };\n invariant(\n !to.pathname || !to.pathname.includes(\"?\"),\n getInvalidPathError(\"?\", \"pathname\", \"search\", to)\n );\n invariant(\n !to.pathname || !to.pathname.includes(\"#\"),\n getInvalidPathError(\"#\", \"pathname\", \"hash\", to)\n );\n invariant(\n !to.search || !to.search.includes(\"#\"),\n getInvalidPathError(\"#\", \"search\", \"hash\", to)\n );\n }\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n let from;\n if (toPathname == null) {\n from = locationPathname;\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n if (!isPathRelative && toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n to.pathname = toSegments.join(\"/\");\n }\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n let path = resolvePath(to, from);\n let hasExplicitTrailingSlash = toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n let hasCurrentTrailingSlash = (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (!path.pathname.endsWith(\"/\") && (hasExplicitTrailingSlash || hasCurrentTrailingSlash)) {\n path.pathname += \"/\";\n }\n return path;\n}\nvar joinPaths = (paths) => paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\nvar normalizePathname = (pathname) => pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\nvar normalizeSearch = (search) => !search || search === \"?\" ? \"\" : search.startsWith(\"?\") ? search : \"?\" + search;\nvar normalizeHash = (hash) => !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\nvar DataWithResponseInit = class {\n constructor(data2, init) {\n this.type = \"DataWithResponseInit\";\n this.data = data2;\n this.init = init || null;\n }\n};\nfunction data(data2, init) {\n return new DataWithResponseInit(\n data2,\n typeof init === \"number\" ? { status: init } : init\n );\n}\nvar redirect = (url, init = 302) => {\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = { status: responseInit };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n return new Response(null, { ...responseInit, headers });\n};\nvar redirectDocument = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\nvar replace = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Replace\", \"true\");\n return response;\n};\nvar ErrorResponseImpl = class {\n constructor(status, statusText, data2, internal = false) {\n this.status = status;\n this.statusText = statusText || \"\";\n this.internal = internal;\n if (data2 instanceof Error) {\n this.data = data2.toString();\n this.error = data2;\n } else {\n this.data = data2;\n }\n }\n};\nfunction isRouteErrorResponse(error) {\n return error != null && typeof error.status === \"number\" && typeof error.statusText === \"string\" && typeof error.internal === \"boolean\" && \"data\" in error;\n}\n\n// lib/router/router.ts\nvar validMutationMethodsArr = [\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\"\n];\nvar validMutationMethods = new Set(\n validMutationMethodsArr\n);\nvar validRequestMethodsArr = [\n \"GET\",\n ...validMutationMethodsArr\n];\nvar validRequestMethods = new Set(validRequestMethodsArr);\nvar redirectStatusCodes = /* @__PURE__ */ new Set([301, 302, 303, 307, 308]);\nvar redirectPreserveMethodStatusCodes = /* @__PURE__ */ new Set([307, 308]);\nvar IDLE_NAVIGATION = {\n state: \"idle\",\n location: void 0,\n formMethod: void 0,\n formAction: void 0,\n formEncType: void 0,\n formData: void 0,\n json: void 0,\n text: void 0\n};\nvar IDLE_FETCHER = {\n state: \"idle\",\n data: void 0,\n formMethod: void 0,\n formAction: void 0,\n formEncType: void 0,\n formData: void 0,\n json: void 0,\n text: void 0\n};\nvar IDLE_BLOCKER = {\n state: \"unblocked\",\n proceed: void 0,\n reset: void 0,\n location: void 0\n};\nvar ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nvar defaultMapRouteProperties = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary)\n});\nvar TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\nvar ResetLoaderDataSymbol = Symbol(\"ResetLoaderData\");\nfunction createRouter(init) {\n const routerWindow = init.window ? init.window : typeof window !== \"undefined\" ? window : void 0;\n const isBrowser2 = typeof routerWindow !== \"undefined\" && typeof routerWindow.document !== \"undefined\" && typeof routerWindow.document.createElement !== \"undefined\";\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n let mapRouteProperties2 = init.mapRouteProperties || defaultMapRouteProperties;\n let manifest = {};\n let dataRoutes = convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties2,\n void 0,\n manifest\n );\n let inFlightDataRoutes;\n let basename = init.basename || \"/\";\n let dataStrategyImpl = init.dataStrategy || defaultDataStrategyWithMiddleware;\n let future = {\n unstable_middleware: false,\n ...init.future\n };\n let unlistenHistory = null;\n let subscribers = /* @__PURE__ */ new Set();\n let savedScrollPositions2 = null;\n let getScrollRestorationKey2 = null;\n let getScrollPosition = null;\n let initialScrollRestored = init.hydrationData != null;\n let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n let initialMatchesIsFOW = false;\n let initialErrors = null;\n if (initialMatches == null && !init.patchRoutesOnNavigation) {\n let error = getInternalRouterError(404, {\n pathname: init.history.location.pathname\n });\n let { matches, route } = getShortCircuitMatches(dataRoutes);\n initialMatches = matches;\n initialErrors = { [route.id]: error };\n }\n if (initialMatches && !init.hydrationData) {\n let fogOfWar = checkFogOfWar(\n initialMatches,\n dataRoutes,\n init.history.location.pathname\n );\n if (fogOfWar.active) {\n initialMatches = null;\n }\n }\n let initialized;\n if (!initialMatches) {\n initialized = false;\n initialMatches = [];\n let fogOfWar = checkFogOfWar(\n null,\n dataRoutes,\n init.history.location.pathname\n );\n if (fogOfWar.active && fogOfWar.matches) {\n initialMatchesIsFOW = true;\n initialMatches = fogOfWar.matches;\n }\n } else if (initialMatches.some((m) => m.route.lazy)) {\n initialized = false;\n } else if (!initialMatches.some((m) => m.route.loader)) {\n initialized = true;\n } else {\n let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n let errors = init.hydrationData ? init.hydrationData.errors : null;\n if (errors) {\n let idx = initialMatches.findIndex(\n (m) => errors[m.route.id] !== void 0\n );\n initialized = initialMatches.slice(0, idx + 1).every((m) => !shouldLoadRouteOnHydration(m.route, loaderData, errors));\n } else {\n initialized = initialMatches.every(\n (m) => !shouldLoadRouteOnHydration(m.route, loaderData, errors)\n );\n }\n }\n let router;\n let state = {\n historyAction: init.history.action,\n location: init.history.location,\n matches: initialMatches,\n initialized,\n navigation: IDLE_NAVIGATION,\n // Don't restore on initial updateState() if we were SSR'd\n restoreScrollPosition: init.hydrationData != null ? false : null,\n preventScrollReset: false,\n revalidation: \"idle\",\n loaderData: init.hydrationData && init.hydrationData.loaderData || {},\n actionData: init.hydrationData && init.hydrationData.actionData || null,\n errors: init.hydrationData && init.hydrationData.errors || initialErrors,\n fetchers: /* @__PURE__ */ new Map(),\n blockers: /* @__PURE__ */ new Map()\n };\n let pendingAction = \"POP\" /* Pop */;\n let pendingPreventScrollReset = false;\n let pendingNavigationController;\n let pendingViewTransitionEnabled = false;\n let appliedViewTransitions = /* @__PURE__ */ new Map();\n let removePageHideEventListener = null;\n let isUninterruptedRevalidation = false;\n let isRevalidationRequired = false;\n let cancelledFetcherLoads = /* @__PURE__ */ new Set();\n let fetchControllers = /* @__PURE__ */ new Map();\n let incrementingLoadId = 0;\n let pendingNavigationLoadId = -1;\n let fetchReloadIds = /* @__PURE__ */ new Map();\n let fetchRedirectIds = /* @__PURE__ */ new Set();\n let fetchLoadMatches = /* @__PURE__ */ new Map();\n let activeFetchers = /* @__PURE__ */ new Map();\n let fetchersQueuedForDeletion = /* @__PURE__ */ new Set();\n let blockerFunctions = /* @__PURE__ */ new Map();\n let unblockBlockerHistoryUpdate = void 0;\n let pendingRevalidationDfd = null;\n function initialize() {\n unlistenHistory = init.history.listen(\n ({ action: historyAction, location, delta }) => {\n if (unblockBlockerHistoryUpdate) {\n unblockBlockerHistoryUpdate();\n unblockBlockerHistoryUpdate = void 0;\n return;\n }\n warning(\n blockerFunctions.size === 0 || delta != null,\n \"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.\"\n );\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction\n });\n if (blockerKey && delta != null) {\n let nextHistoryUpdatePromise = new Promise((resolve) => {\n unblockBlockerHistoryUpdate = resolve;\n });\n init.history.go(delta * -1);\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location,\n proceed() {\n updateBlocker(blockerKey, {\n state: \"proceeding\",\n proceed: void 0,\n reset: void 0,\n location\n });\n nextHistoryUpdatePromise.then(() => init.history.go(delta));\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey, IDLE_BLOCKER);\n updateState({ blockers });\n }\n });\n return;\n }\n return startNavigation(historyAction, location);\n }\n );\n if (isBrowser2) {\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () => persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () => routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n if (!state.initialized) {\n startNavigation(\"POP\" /* Pop */, state.location, {\n initialHydration: true\n });\n }\n return router;\n }\n function dispose() {\n if (unlistenHistory) {\n unlistenHistory();\n }\n if (removePageHideEventListener) {\n removePageHideEventListener();\n }\n subscribers.clear();\n pendingNavigationController && pendingNavigationController.abort();\n state.fetchers.forEach((_, key) => deleteFetcher(key));\n state.blockers.forEach((_, key) => deleteBlocker(key));\n }\n function subscribe(fn) {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n }\n function updateState(newState, opts = {}) {\n state = {\n ...state,\n ...newState\n };\n let unmountedFetchers = [];\n let mountedFetchers = [];\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (fetchersQueuedForDeletion.has(key)) {\n unmountedFetchers.push(key);\n } else {\n mountedFetchers.push(key);\n }\n }\n });\n fetchersQueuedForDeletion.forEach((key) => {\n if (!state.fetchers.has(key) && !fetchControllers.has(key)) {\n unmountedFetchers.push(key);\n }\n });\n [...subscribers].forEach(\n (subscriber) => subscriber(state, {\n deletedFetchers: unmountedFetchers,\n viewTransitionOpts: opts.viewTransitionOpts,\n flushSync: opts.flushSync === true\n })\n );\n unmountedFetchers.forEach((key) => deleteFetcher(key));\n mountedFetchers.forEach((key) => state.fetchers.delete(key));\n }\n function completeNavigation(location, newState, { flushSync } = {}) {\n let isActionReload = state.actionData != null && state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && state.navigation.state === \"loading\" && location.state?._isRedirect !== true;\n let actionData;\n if (newState.actionData) {\n if (Object.keys(newState.actionData).length > 0) {\n actionData = newState.actionData;\n } else {\n actionData = null;\n }\n } else if (isActionReload) {\n actionData = state.actionData;\n } else {\n actionData = null;\n }\n let loaderData = newState.loaderData ? mergeLoaderData(\n state.loaderData,\n newState.loaderData,\n newState.matches || [],\n newState.errors\n ) : state.loaderData;\n let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n }\n let preventScrollReset = pendingPreventScrollReset === true || state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && location.state?._isRedirect !== true;\n if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = void 0;\n }\n if (isUninterruptedRevalidation) {\n } else if (pendingAction === \"POP\" /* Pop */) {\n } else if (pendingAction === \"PUSH\" /* Push */) {\n init.history.push(location, location.state);\n } else if (pendingAction === \"REPLACE\" /* Replace */) {\n init.history.replace(location, location.state);\n }\n let viewTransitionOpts;\n if (pendingAction === \"POP\" /* Pop */) {\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location\n };\n }\n } else if (pendingViewTransitionEnabled) {\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = /* @__PURE__ */ new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location\n };\n }\n updateState(\n {\n ...newState,\n // matches, errors, fetchers go through as-is\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition: getSavedScrollPosition(\n location,\n newState.matches || state.matches\n ),\n preventScrollReset,\n blockers\n },\n {\n viewTransitionOpts,\n flushSync: flushSync === true\n }\n );\n pendingAction = \"POP\" /* Pop */;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n pendingRevalidationDfd?.resolve();\n pendingRevalidationDfd = null;\n }\n async function navigate(to, opts) {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n to,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n false,\n normalizedPath,\n opts\n );\n let currentLocation = state.location;\n let nextLocation = createLocation(state.location, path, opts && opts.state);\n nextLocation = {\n ...nextLocation,\n ...init.history.encodeLocation(nextLocation)\n };\n let userReplace = opts && opts.replace != null ? opts.replace : void 0;\n let historyAction = \"PUSH\" /* Push */;\n if (userReplace === true) {\n historyAction = \"REPLACE\" /* Replace */;\n } else if (userReplace === false) {\n } else if (submission != null && isMutationMethod(submission.formMethod) && submission.formAction === state.location.pathname + state.location.search) {\n historyAction = \"REPLACE\" /* Replace */;\n }\n let preventScrollReset = opts && \"preventScrollReset\" in opts ? opts.preventScrollReset === true : void 0;\n let flushSync = (opts && opts.flushSync) === true;\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction\n });\n if (blockerKey) {\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey, {\n state: \"proceeding\",\n proceed: void 0,\n reset: void 0,\n location: nextLocation\n });\n navigate(to, opts);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey, IDLE_BLOCKER);\n updateState({ blockers });\n }\n });\n return;\n }\n await startNavigation(historyAction, nextLocation, {\n submission,\n // Send through the formData serialization error if we have one so we can\n // render at the right error boundary after we match routes\n pendingError: error,\n preventScrollReset,\n replace: opts && opts.replace,\n enableViewTransition: opts && opts.viewTransition,\n flushSync\n });\n }\n function revalidate() {\n if (!pendingRevalidationDfd) {\n pendingRevalidationDfd = createDeferred();\n }\n interruptActiveLoads();\n updateState({ revalidation: \"loading\" });\n let promise = pendingRevalidationDfd.promise;\n if (state.navigation.state === \"submitting\") {\n return promise;\n }\n if (state.navigation.state === \"idle\") {\n startNavigation(state.historyAction, state.location, {\n startUninterruptedRevalidation: true\n });\n return promise;\n }\n startNavigation(\n pendingAction || state.historyAction,\n state.navigation.location,\n {\n overrideNavigation: state.navigation,\n // Proxy through any rending view transition\n enableViewTransition: pendingViewTransitionEnabled === true\n }\n );\n return promise;\n }\n async function startNavigation(historyAction, location, opts) {\n pendingNavigationController && pendingNavigationController.abort();\n pendingNavigationController = null;\n pendingAction = historyAction;\n isUninterruptedRevalidation = (opts && opts.startUninterruptedRevalidation) === true;\n saveScrollPosition(state.location, state.matches);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = opts?.initialHydration && state.matches && state.matches.length > 0 && !initialMatchesIsFOW ? (\n // `matchRoutes()` has already been called if we're in here via `router.initialize()`\n state.matches\n ) : matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\n if (matches && state.initialized && !isRevalidationRequired && isHashChangeOnly(state.location, location) && !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))) {\n completeNavigation(location, { matches }, { flushSync });\n return;\n }\n let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n if (!matches) {\n let { error, notFoundMatches, route } = handleNavigational404(\n location.pathname\n );\n completeNavigation(\n location,\n {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error\n }\n },\n { flushSync }\n );\n return;\n }\n pendingNavigationController = new AbortController();\n let request = createClientSideRequest(\n init.history,\n location,\n pendingNavigationController.signal,\n opts && opts.submission\n );\n let scopedContext = new unstable_RouterContextProvider(\n init.unstable_getContext ? await init.unstable_getContext() : void 0\n );\n let pendingActionResult;\n if (opts && opts.pendingError) {\n pendingActionResult = [\n findNearestBoundary(matches).route.id,\n { type: \"error\" /* error */, error: opts.pendingError }\n ];\n } else if (opts && opts.submission && isMutationMethod(opts.submission.formMethod)) {\n let actionResult = await handleAction(\n request,\n location,\n opts.submission,\n matches,\n scopedContext,\n fogOfWar.active,\n { replace: opts.replace, flushSync }\n );\n if (actionResult.shortCircuited) {\n return;\n }\n if (actionResult.pendingActionResult) {\n let [routeId, result] = actionResult.pendingActionResult;\n if (isErrorResult(result) && isRouteErrorResponse(result.error) && result.error.status === 404) {\n pendingNavigationController = null;\n completeNavigation(location, {\n matches: actionResult.matches,\n loaderData: {},\n errors: {\n [routeId]: result.error\n }\n });\n return;\n }\n }\n matches = actionResult.matches || matches;\n pendingActionResult = actionResult.pendingActionResult;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\n fogOfWar.active = false;\n request = createClientSideRequest(\n init.history,\n request.url,\n request.signal\n );\n }\n let {\n shortCircuited,\n matches: updatedMatches,\n loaderData,\n errors\n } = await handleLoaders(\n request,\n location,\n matches,\n scopedContext,\n fogOfWar.active,\n loadingNavigation,\n opts && opts.submission,\n opts && opts.fetcherSubmission,\n opts && opts.replace,\n opts && opts.initialHydration === true,\n flushSync,\n pendingActionResult\n );\n if (shortCircuited) {\n return;\n }\n pendingNavigationController = null;\n completeNavigation(location, {\n matches: updatedMatches || matches,\n ...getActionDataForCommit(pendingActionResult),\n loaderData,\n errors\n });\n }\n async function handleAction(request, location, submission, matches, scopedContext, isFogOfWar, opts = {}) {\n interruptActiveLoads();\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation }, { flushSync: opts.flushSync === true });\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n matches,\n location.pathname,\n request.signal\n );\n if (discoverResult.type === \"aborted\") {\n return { shortCircuited: true };\n } else if (discoverResult.type === \"error\") {\n let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id;\n return {\n matches: discoverResult.partialMatches,\n pendingActionResult: [\n boundaryId,\n {\n type: \"error\" /* error */,\n error: discoverResult.error\n }\n ]\n };\n } else if (!discoverResult.matches) {\n let { notFoundMatches, error, route } = handleNavigational404(\n location.pathname\n );\n return {\n matches: notFoundMatches,\n pendingActionResult: [\n route.id,\n {\n type: \"error\" /* error */,\n error\n }\n ]\n };\n } else {\n matches = discoverResult.matches;\n }\n }\n let result;\n let actionMatch = getTargetMatch(matches, location);\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n result = {\n type: \"error\" /* error */,\n error: getInternalRouterError(405, {\n method: request.method,\n pathname: location.pathname,\n routeId: actionMatch.route.id\n })\n };\n } else {\n let results = await callDataStrategy(\n \"action\",\n request,\n [actionMatch],\n matches,\n scopedContext,\n null\n );\n result = results[actionMatch.route.id];\n if (!result) {\n for (let match of matches) {\n if (results[match.route.id]) {\n result = results[match.route.id];\n break;\n }\n }\n }\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n }\n if (isRedirectResult(result)) {\n let replace2;\n if (opts && opts.replace != null) {\n replace2 = opts.replace;\n } else {\n let location2 = normalizeRedirectLocation(\n result.response.headers.get(\"Location\"),\n new URL(request.url),\n basename\n );\n replace2 = location2 === state.location.pathname + state.location.search;\n }\n await startRedirectNavigation(request, result, true, {\n submission,\n replace: replace2\n });\n return { shortCircuited: true };\n }\n if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n if ((opts && opts.replace) !== true) {\n pendingAction = \"PUSH\" /* Push */;\n }\n return {\n matches,\n pendingActionResult: [boundaryMatch.route.id, result]\n };\n }\n return {\n matches,\n pendingActionResult: [actionMatch.route.id, result]\n };\n }\n async function handleLoaders(request, location, matches, scopedContext, isFogOfWar, overrideNavigation, submission, fetcherSubmission, replace2, initialHydration, flushSync, pendingActionResult) {\n let loadingNavigation = overrideNavigation || getLoadingNavigation(location, submission);\n let activeSubmission = submission || fetcherSubmission || getSubmissionFromNavigation(loadingNavigation);\n let shouldUpdateNavigationState = !isUninterruptedRevalidation && !initialHydration;\n if (isFogOfWar) {\n if (shouldUpdateNavigationState) {\n let actionData = getUpdatedActionData(pendingActionResult);\n updateState(\n {\n navigation: loadingNavigation,\n ...actionData !== void 0 ? { actionData } : {}\n },\n {\n flushSync\n }\n );\n }\n let discoverResult = await discoverRoutes(\n matches,\n location.pathname,\n request.signal\n );\n if (discoverResult.type === \"aborted\") {\n return { shortCircuited: true };\n } else if (discoverResult.type === \"error\") {\n let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id;\n return {\n matches: discoverResult.partialMatches,\n loaderData: {},\n errors: {\n [boundaryId]: discoverResult.error\n }\n };\n } else if (!discoverResult.matches) {\n let { error, notFoundMatches, route } = handleNavigational404(\n location.pathname\n );\n return {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error\n }\n };\n } else {\n matches = discoverResult.matches;\n }\n }\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n initialHydration === true,\n isRevalidationRequired,\n cancelledFetcherLoads,\n fetchersQueuedForDeletion,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionResult\n );\n pendingNavigationLoadId = ++incrementingLoadId;\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers2 = markFetchRedirectsDone();\n completeNavigation(\n location,\n {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? { [pendingActionResult[0]]: pendingActionResult[1].error } : null,\n ...getActionDataForCommit(pendingActionResult),\n ...updatedFetchers2 ? { fetchers: new Map(state.fetchers) } : {}\n },\n { flushSync }\n );\n return { shortCircuited: true };\n }\n if (shouldUpdateNavigationState) {\n let updates = {};\n if (!isFogOfWar) {\n updates.navigation = loadingNavigation;\n let actionData = getUpdatedActionData(pendingActionResult);\n if (actionData !== void 0) {\n updates.actionData = actionData;\n }\n }\n if (revalidatingFetchers.length > 0) {\n updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers);\n }\n updateState(updates, { flushSync });\n }\n revalidatingFetchers.forEach((rf) => {\n abortFetcher(rf.key);\n if (rf.controller) {\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n let { loaderResults, fetcherResults } = await callLoadersAndMaybeResolveData(\n matches,\n matchesToLoad,\n revalidatingFetchers,\n request,\n scopedContext\n );\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));\n let redirect2 = findRedirect(loaderResults);\n if (redirect2) {\n await startRedirectNavigation(request, redirect2.result, true, {\n replace: replace2\n });\n return { shortCircuited: true };\n }\n redirect2 = findRedirect(fetcherResults);\n if (redirect2) {\n fetchRedirectIds.add(redirect2.key);\n await startRedirectNavigation(request, redirect2.result, true, {\n replace: replace2\n });\n return { shortCircuited: true };\n }\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n loaderResults,\n pendingActionResult,\n revalidatingFetchers,\n fetcherResults\n );\n if (initialHydration && state.errors) {\n errors = { ...state.errors, ...errors };\n }\n let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers = updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n return {\n matches,\n loaderData,\n errors,\n ...shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}\n };\n }\n function getUpdatedActionData(pendingActionResult) {\n if (pendingActionResult && !isErrorResult(pendingActionResult[1])) {\n return {\n [pendingActionResult[0]]: pendingActionResult[1].data\n };\n } else if (state.actionData) {\n if (Object.keys(state.actionData).length === 0) {\n return null;\n } else {\n return state.actionData;\n }\n }\n }\n function getUpdatedRevalidatingFetchers(revalidatingFetchers) {\n revalidatingFetchers.forEach((rf) => {\n let fetcher = state.fetchers.get(rf.key);\n let revalidatingFetcher = getLoadingFetcher(\n void 0,\n fetcher ? fetcher.data : void 0\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n return new Map(state.fetchers);\n }\n async function fetch2(key, routeId, href2, opts) {\n abortFetcher(key);\n let flushSync = (opts && opts.flushSync) === true;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n href2,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath }),\n { flushSync }\n );\n return;\n }\n let { path, submission, error } = normalizeNavigateOptions(\n true,\n normalizedPath,\n opts\n );\n if (error) {\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n let match = getTargetMatch(matches, path);\n let scopedContext = new unstable_RouterContextProvider(\n init.unstable_getContext ? await init.unstable_getContext() : void 0\n );\n let preventScrollReset = (opts && opts.preventScrollReset) === true;\n if (submission && isMutationMethod(submission.formMethod)) {\n await handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n scopedContext,\n fogOfWar.active,\n flushSync,\n preventScrollReset,\n submission\n );\n return;\n }\n fetchLoadMatches.set(key, { routeId, path });\n await handleFetcherLoader(\n key,\n routeId,\n path,\n match,\n matches,\n scopedContext,\n fogOfWar.active,\n flushSync,\n preventScrollReset,\n submission\n );\n }\n async function handleFetcherAction(key, routeId, path, match, requestMatches, scopedContext, isFogOfWar, flushSync, preventScrollReset, submission) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n function detectAndHandle405Error(m) {\n if (!m.route.action && !m.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId\n });\n setFetcherError(key, routeId, error, { flushSync });\n return true;\n }\n return false;\n }\n if (!isFogOfWar && detectAndHandle405Error(match)) {\n return;\n }\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync\n });\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal,\n submission\n );\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n requestMatches,\n path,\n fetchRequest.signal,\n key\n );\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n setFetcherError(key, routeId, discoverResult.error, { flushSync });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: path }),\n { flushSync }\n );\n return;\n } else {\n requestMatches = discoverResult.matches;\n match = getTargetMatch(requestMatches, path);\n if (detectAndHandle405Error(match)) {\n return;\n }\n }\n }\n fetchControllers.set(key, abortController);\n let originatingLoadId = incrementingLoadId;\n let actionResults = await callDataStrategy(\n \"action\",\n fetchRequest,\n [match],\n requestMatches,\n scopedContext,\n key\n );\n let actionResult = actionResults[match.route.id];\n if (fetchRequest.signal.aborted) {\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n return;\n }\n if (fetchersQueuedForDeletion.has(key)) {\n if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n updateFetcherState(key, getDoneFetcher(void 0));\n return;\n }\n } else {\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n updateFetcherState(key, getDoneFetcher(void 0));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(fetchRequest, actionResult, false, {\n fetcherSubmission: submission,\n preventScrollReset\n });\n }\n }\n if (isErrorResult(actionResult)) {\n setFetcherError(key, routeId, actionResult.error);\n return;\n }\n }\n let nextLocation = state.navigation.location || state.location;\n let revalidationRequest = createClientSideRequest(\n init.history,\n nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches = state.navigation.state !== \"idle\" ? matchRoutes(routesToUse, state.navigation.location, basename) : state.matches;\n invariant(matches, \"Didn't find any matches after fetcher action\");\n let loadId = ++incrementingLoadId;\n fetchReloadIds.set(key, loadId);\n let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n state.fetchers.set(key, loadFetcher);\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n submission,\n nextLocation,\n false,\n isRevalidationRequired,\n cancelledFetcherLoads,\n fetchersQueuedForDeletion,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n [match.route.id, actionResult]\n );\n revalidatingFetchers.filter((rf) => rf.key !== key).forEach((rf) => {\n let staleKey = rf.key;\n let existingFetcher2 = state.fetchers.get(staleKey);\n let revalidatingFetcher = getLoadingFetcher(\n void 0,\n existingFetcher2 ? existingFetcher2.data : void 0\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n abortFetcher(staleKey);\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n updateState({ fetchers: new Map(state.fetchers) });\n let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n let { loaderResults, fetcherResults } = await callLoadersAndMaybeResolveData(\n matches,\n matchesToLoad,\n revalidatingFetchers,\n revalidationRequest,\n scopedContext\n );\n if (abortController.signal.aborted) {\n return;\n }\n abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n fetchReloadIds.delete(key);\n fetchControllers.delete(key);\n revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key));\n let redirect2 = findRedirect(loaderResults);\n if (redirect2) {\n return startRedirectNavigation(\n revalidationRequest,\n redirect2.result,\n false,\n { preventScrollReset }\n );\n }\n redirect2 = findRedirect(fetcherResults);\n if (redirect2) {\n fetchRedirectIds.add(redirect2.key);\n return startRedirectNavigation(\n revalidationRequest,\n redirect2.result,\n false,\n { preventScrollReset }\n );\n }\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n loaderResults,\n void 0,\n revalidatingFetchers,\n fetcherResults\n );\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n abortStaleFetchLoads(loadId);\n if (state.navigation.state === \"loading\" && loadId > pendingNavigationLoadId) {\n invariant(pendingAction, \"Expected pending action\");\n pendingNavigationController && pendingNavigationController.abort();\n completeNavigation(state.navigation.location, {\n matches,\n loaderData,\n errors,\n fetchers: new Map(state.fetchers)\n });\n } else {\n updateState({\n errors,\n loaderData: mergeLoaderData(\n state.loaderData,\n loaderData,\n matches,\n errors\n ),\n fetchers: new Map(state.fetchers)\n });\n isRevalidationRequired = false;\n }\n }\n async function handleFetcherLoader(key, routeId, path, match, matches, scopedContext, isFogOfWar, flushSync, preventScrollReset, submission) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(\n key,\n getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : void 0\n ),\n { flushSync }\n );\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal\n );\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n matches,\n path,\n fetchRequest.signal,\n key\n );\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n setFetcherError(key, routeId, discoverResult.error, { flushSync });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: path }),\n { flushSync }\n );\n return;\n } else {\n matches = discoverResult.matches;\n match = getTargetMatch(matches, path);\n }\n }\n fetchControllers.set(key, abortController);\n let originatingLoadId = incrementingLoadId;\n let results = await callDataStrategy(\n \"loader\",\n fetchRequest,\n [match],\n matches,\n scopedContext,\n key\n );\n let result = results[match.route.id];\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n if (fetchRequest.signal.aborted) {\n return;\n }\n if (fetchersQueuedForDeletion.has(key)) {\n updateFetcherState(key, getDoneFetcher(void 0));\n return;\n }\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n updateFetcherState(key, getDoneFetcher(void 0));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(fetchRequest, result, false, {\n preventScrollReset\n });\n return;\n }\n }\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n updateFetcherState(key, getDoneFetcher(result.data));\n }\n async function startRedirectNavigation(request, redirect2, isNavigation, {\n submission,\n fetcherSubmission,\n preventScrollReset,\n replace: replace2\n } = {}) {\n if (redirect2.response.headers.has(\"X-Remix-Revalidate\")) {\n isRevalidationRequired = true;\n }\n let location = redirect2.response.headers.get(\"Location\");\n invariant(location, \"Expected a Location header on the redirect Response\");\n location = normalizeRedirectLocation(\n location,\n new URL(request.url),\n basename\n );\n let redirectLocation = createLocation(state.location, location, {\n _isRedirect: true\n });\n if (isBrowser2) {\n let isDocumentReload = false;\n if (redirect2.response.headers.has(\"X-Remix-Reload-Document\")) {\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(location)) {\n const url = init.history.createURL(location);\n isDocumentReload = // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin || // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n if (isDocumentReload) {\n if (replace2) {\n routerWindow.location.replace(location);\n } else {\n routerWindow.location.assign(location);\n }\n return;\n }\n }\n pendingNavigationController = null;\n let redirectNavigationType = replace2 === true || redirect2.response.headers.has(\"X-Remix-Replace\") ? \"REPLACE\" /* Replace */ : \"PUSH\" /* Push */;\n let { formMethod, formAction, formEncType } = state.navigation;\n if (!submission && !fetcherSubmission && formMethod && formAction && formEncType) {\n submission = getSubmissionFromNavigation(state.navigation);\n }\n let activeSubmission = submission || fetcherSubmission;\n if (redirectPreserveMethodStatusCodes.has(redirect2.response.status) && activeSubmission && isMutationMethod(activeSubmission.formMethod)) {\n await startNavigation(redirectNavigationType, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: location\n },\n // Preserve these flags across redirects\n preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n enableViewTransition: isNavigation ? pendingViewTransitionEnabled : void 0\n });\n } else {\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n submission\n );\n await startNavigation(redirectNavigationType, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\n // Preserve these flags across redirects\n preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n enableViewTransition: isNavigation ? pendingViewTransitionEnabled : void 0\n });\n }\n }\n async function callDataStrategy(type, request, matchesToLoad, matches, scopedContext, fetcherKey) {\n let results;\n let dataResults = {};\n try {\n results = await callDataStrategyImpl(\n dataStrategyImpl,\n type,\n request,\n matchesToLoad,\n matches,\n fetcherKey,\n manifest,\n mapRouteProperties2,\n scopedContext,\n future.unstable_middleware\n );\n } catch (e) {\n matchesToLoad.forEach((m) => {\n dataResults[m.route.id] = {\n type: \"error\" /* error */,\n error: e\n };\n });\n return dataResults;\n }\n for (let [routeId, result] of Object.entries(results)) {\n if (isRedirectDataStrategyResult(result)) {\n let response = result.result;\n dataResults[routeId] = {\n type: \"redirect\" /* redirect */,\n response: normalizeRelativeRoutingRedirectResponse(\n response,\n request,\n routeId,\n matches,\n basename\n )\n };\n } else {\n dataResults[routeId] = await convertDataStrategyResultToDataResult(\n result\n );\n }\n }\n return dataResults;\n }\n async function callLoadersAndMaybeResolveData(matches, matchesToLoad, fetchersToLoad, request, scopedContext) {\n let loaderResultsPromise = callDataStrategy(\n \"loader\",\n request,\n matchesToLoad,\n matches,\n scopedContext,\n null\n );\n let fetcherResultsPromise = Promise.all(\n fetchersToLoad.map(async (f) => {\n if (f.matches && f.match && f.controller) {\n let results = await callDataStrategy(\n \"loader\",\n createClientSideRequest(init.history, f.path, f.controller.signal),\n [f.match],\n f.matches,\n scopedContext,\n f.key\n );\n let result = results[f.match.route.id];\n return { [f.key]: result };\n } else {\n return Promise.resolve({\n [f.key]: {\n type: \"error\" /* error */,\n error: getInternalRouterError(404, {\n pathname: f.path\n })\n }\n });\n }\n })\n );\n let loaderResults = await loaderResultsPromise;\n let fetcherResults = (await fetcherResultsPromise).reduce(\n (acc, r) => Object.assign(acc, r),\n {}\n );\n return {\n loaderResults,\n fetcherResults\n };\n }\n function interruptActiveLoads() {\n isRevalidationRequired = true;\n fetchLoadMatches.forEach((_, key) => {\n if (fetchControllers.has(key)) {\n cancelledFetcherLoads.add(key);\n }\n abortFetcher(key);\n });\n }\n function updateFetcherState(key, fetcher, opts = {}) {\n state.fetchers.set(key, fetcher);\n updateState(\n { fetchers: new Map(state.fetchers) },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n function setFetcherError(key, routeId, error, opts = {}) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState(\n {\n errors: {\n [boundaryMatch.route.id]: error\n },\n fetchers: new Map(state.fetchers)\n },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n function getFetcher(key) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n if (fetchersQueuedForDeletion.has(key)) {\n fetchersQueuedForDeletion.delete(key);\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n function deleteFetcher(key) {\n let fetcher = state.fetchers.get(key);\n if (fetchControllers.has(key) && !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n fetchersQueuedForDeletion.delete(key);\n cancelledFetcherLoads.delete(key);\n state.fetchers.delete(key);\n }\n function queueFetcherForDeletion(key) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n fetchersQueuedForDeletion.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n updateState({ fetchers: new Map(state.fetchers) });\n }\n function abortFetcher(key) {\n let controller = fetchControllers.get(key);\n if (controller) {\n controller.abort();\n fetchControllers.delete(key);\n }\n }\n function markFetchersDone(keys) {\n for (let key of keys) {\n let fetcher = getFetcher(key);\n let doneFetcher = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n function markFetchRedirectsDone() {\n let doneKeys = [];\n let updatedFetchers = false;\n for (let key of fetchRedirectIds) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n fetchRedirectIds.delete(key);\n doneKeys.push(key);\n updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\n }\n function abortStaleFetchLoads(landedId) {\n let yeetedKeys = [];\n for (let [key, id] of fetchReloadIds) {\n if (id < landedId) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n abortFetcher(key);\n fetchReloadIds.delete(key);\n yeetedKeys.push(key);\n }\n }\n }\n markFetchersDone(yeetedKeys);\n return yeetedKeys.length > 0;\n }\n function getBlocker(key, fn) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n if (blockerFunctions.get(key) !== fn) {\n blockerFunctions.set(key, fn);\n }\n return blocker;\n }\n function deleteBlocker(key) {\n state.blockers.delete(key);\n blockerFunctions.delete(key);\n }\n function updateBlocker(key, newBlocker) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n invariant(\n blocker.state === \"unblocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"proceeding\" || blocker.state === \"blocked\" && newBlocker.state === \"unblocked\" || blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\",\n `Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`\n );\n let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ blockers });\n }\n function shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction\n }) {\n if (blockerFunctions.size === 0) {\n return;\n }\n if (blockerFunctions.size > 1) {\n warning(false, \"A router only supports one blocker at a time\");\n }\n let entries = Array.from(blockerFunctions.entries());\n let [blockerKey, blockerFunction] = entries[entries.length - 1];\n let blocker = state.blockers.get(blockerKey);\n if (blocker && blocker.state === \"proceeding\") {\n return;\n }\n if (blockerFunction({ currentLocation, nextLocation, historyAction })) {\n return blockerKey;\n }\n }\n function handleNavigational404(pathname) {\n let error = getInternalRouterError(404, { pathname });\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let { matches, route } = getShortCircuitMatches(routesToUse);\n return { notFoundMatches: matches, route, error };\n }\n function enableScrollRestoration(positions, getPosition, getKey) {\n savedScrollPositions2 = positions;\n getScrollPosition = getPosition;\n getScrollRestorationKey2 = getKey || null;\n if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n initialScrollRestored = true;\n let y = getSavedScrollPosition(state.location, state.matches);\n if (y != null) {\n updateState({ restoreScrollPosition: y });\n }\n }\n return () => {\n savedScrollPositions2 = null;\n getScrollPosition = null;\n getScrollRestorationKey2 = null;\n };\n }\n function getScrollKey(location, matches) {\n if (getScrollRestorationKey2) {\n let key = getScrollRestorationKey2(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n function saveScrollPosition(location, matches) {\n if (savedScrollPositions2 && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions2[key] = getScrollPosition();\n }\n }\n function getSavedScrollPosition(location, matches) {\n if (savedScrollPositions2) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions2[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n function checkFogOfWar(matches, routesToUse, pathname) {\n if (init.patchRoutesOnNavigation) {\n if (!matches) {\n let fogMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n return { active: true, matches: fogMatches || [] };\n } else {\n if (Object.keys(matches[0].params).length > 0) {\n let partialMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n return { active: true, matches: partialMatches };\n }\n }\n }\n return { active: false, matches: null };\n }\n async function discoverRoutes(matches, pathname, signal, fetcherKey) {\n if (!init.patchRoutesOnNavigation) {\n return { type: \"success\", matches };\n }\n let partialMatches = matches;\n while (true) {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let localManifest = manifest;\n try {\n await init.patchRoutesOnNavigation({\n signal,\n path: pathname,\n matches: partialMatches,\n fetcherKey,\n patch: (routeId, children) => {\n if (signal.aborted) return;\n patchRoutesImpl(\n routeId,\n children,\n routesToUse,\n localManifest,\n mapRouteProperties2\n );\n }\n });\n } catch (e) {\n return { type: \"error\", error: e, partialMatches };\n } finally {\n if (isNonHMR && !signal.aborted) {\n dataRoutes = [...dataRoutes];\n }\n }\n if (signal.aborted) {\n return { type: \"aborted\" };\n }\n let newMatches = matchRoutes(routesToUse, pathname, basename);\n if (newMatches) {\n return { type: \"success\", matches: newMatches };\n }\n let newPartialMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n if (!newPartialMatches || partialMatches.length === newPartialMatches.length && partialMatches.every(\n (m, i) => m.route.id === newPartialMatches[i].route.id\n )) {\n return { type: \"success\", matches: null };\n }\n partialMatches = newPartialMatches;\n }\n }\n function _internalSetRoutes(newRoutes) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties2,\n void 0,\n manifest\n );\n }\n function patchRoutes(routeId, children) {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n patchRoutesImpl(\n routeId,\n children,\n routesToUse,\n manifest,\n mapRouteProperties2\n );\n if (isNonHMR) {\n dataRoutes = [...dataRoutes];\n updateState({});\n }\n }\n router = {\n get basename() {\n return basename;\n },\n get future() {\n return future;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\n },\n initialize,\n subscribe,\n enableScrollRestoration,\n navigate,\n fetch: fetch2,\n revalidate,\n // Passthrough to history-aware createHref used by useHref so we get proper\n // hash-aware URLs in DOM paths\n createHref: (to) => init.history.createHref(to),\n encodeLocation: (to) => init.history.encodeLocation(to),\n getFetcher,\n deleteFetcher: queueFetcherForDeletion,\n dispose,\n getBlocker,\n deleteBlocker,\n patchRoutes,\n _internalFetchControllers: fetchControllers,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes\n };\n return router;\n}\nfunction createStaticHandler(routes, opts) {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n let manifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties2 = opts?.mapRouteProperties || defaultMapRouteProperties;\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties2,\n void 0,\n manifest\n );\n async function query(request, {\n requestContext,\n filterMatchesToLoad,\n skipLoaderErrorBubbling,\n skipRevalidation,\n dataStrategy,\n unstable_respond: respond\n } = {}) {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n requestContext = requestContext != null ? requestContext : new unstable_RouterContextProvider();\n if (!isValidMethod(method) && method !== \"HEAD\") {\n let error = getInternalRouterError(405, { method });\n let { matches: methodNotAllowedMatches, route } = getShortCircuitMatches(dataRoutes);\n let staticContext = {\n basename,\n location,\n matches: methodNotAllowedMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {}\n };\n return respond ? respond(staticContext) : staticContext;\n } else if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } = getShortCircuitMatches(dataRoutes);\n let staticContext = {\n basename,\n location,\n matches: notFoundMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {}\n };\n return respond ? respond(staticContext) : staticContext;\n }\n if (respond && matches.some((m) => m.route.unstable_middleware)) {\n invariant(\n requestContext instanceof unstable_RouterContextProvider,\n \"When using middleware in `staticHandler.query()`, any provided `requestContext` must be an instance of `unstable_RouterContextProvider`\"\n );\n try {\n let renderedStaticContext;\n let response = await runMiddlewarePipeline(\n {\n request,\n matches,\n params: matches[0].params,\n // If we're calling middleware then it must be enabled so we can cast\n // this to the proper type knowing it's not an `AppLoadContext`\n context: requestContext\n },\n true,\n async () => {\n let result2 = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n dataStrategy || null,\n skipLoaderErrorBubbling === true,\n null,\n filterMatchesToLoad || null,\n skipRevalidation === true\n );\n if (isResponse(result2)) {\n return result2;\n }\n renderedStaticContext = { location, basename, ...result2 };\n let res = await respond(renderedStaticContext);\n return res;\n },\n async (error, routeId) => {\n if (isResponse(error)) {\n return error;\n }\n if (renderedStaticContext) {\n if (routeId in renderedStaticContext.loaderData) {\n renderedStaticContext.loaderData[routeId] = void 0;\n }\n return respond(\n getStaticContextFromError(\n dataRoutes,\n renderedStaticContext,\n error,\n findNearestBoundary(matches, routeId).route.id\n )\n );\n } else {\n let loaderIdx = matches.findIndex((m) => m.route.loader);\n let boundary = loaderIdx >= 0 ? findNearestBoundary(matches, matches[loaderIdx].route.id) : findNearestBoundary(matches);\n return respond({\n matches,\n location,\n basename,\n loaderData: {},\n actionData: null,\n errors: {\n [boundary.route.id]: error\n },\n statusCode: isRouteErrorResponse(error) ? error.status : 500,\n actionHeaders: {},\n loaderHeaders: {}\n });\n }\n }\n );\n invariant(isResponse(response), \"Expected a response in query()\");\n return response;\n } catch (e) {\n if (isResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n dataStrategy || null,\n skipLoaderErrorBubbling === true,\n null,\n filterMatchesToLoad || null,\n skipRevalidation === true\n );\n if (isResponse(result)) {\n return result;\n }\n return { location, basename, ...result };\n }\n async function queryRoute(request, {\n routeId,\n requestContext,\n dataStrategy,\n unstable_respond: respond\n } = {}) {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n requestContext = requestContext != null ? requestContext : new unstable_RouterContextProvider();\n if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n throw getInternalRouterError(405, { method });\n } else if (!matches) {\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n let match = routeId ? matches.find((m) => m.route.id === routeId) : getTargetMatch(matches, location);\n if (routeId && !match) {\n throw getInternalRouterError(403, {\n pathname: location.pathname,\n routeId\n });\n } else if (!match) {\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n if (respond && matches.some((m) => m.route.unstable_middleware)) {\n invariant(\n requestContext instanceof unstable_RouterContextProvider,\n \"When using middleware in `staticHandler.queryRoute()`, any provided `requestContext` must be an instance of `unstable_RouterContextProvider`\"\n );\n let response = await runMiddlewarePipeline(\n {\n request,\n matches,\n params: matches[0].params,\n // If we're calling middleware then it must be enabled so we can cast\n // this to the proper type knowing it's not an `AppLoadContext`\n context: requestContext\n },\n true,\n async () => {\n let result2 = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n dataStrategy || null,\n false,\n match,\n null,\n false\n );\n if (isResponse(result2)) {\n return respond(result2);\n }\n let error2 = result2.errors ? Object.values(result2.errors)[0] : void 0;\n if (error2 !== void 0) {\n throw error2;\n }\n let value = result2.actionData ? Object.values(result2.actionData)[0] : Object.values(result2.loaderData)[0];\n return typeof value === \"string\" ? new Response(value) : Response.json(value);\n },\n (error2) => {\n if (isResponse(error2)) {\n return respond(error2);\n }\n return new Response(String(error2), {\n status: 500,\n statusText: \"Unexpected Server Error\"\n });\n }\n );\n return response;\n }\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n dataStrategy || null,\n false,\n match,\n null,\n false\n );\n if (isResponse(result)) {\n return result;\n }\n let error = result.errors ? Object.values(result.errors)[0] : void 0;\n if (error !== void 0) {\n throw error;\n }\n if (result.actionData) {\n return Object.values(result.actionData)[0];\n }\n if (result.loaderData) {\n return Object.values(result.loaderData)[0];\n }\n return void 0;\n }\n async function queryImpl(request, location, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch, filterMatchesToLoad, skipRevalidation) {\n invariant(\n request.signal,\n \"query()/queryRoute() requests must contain an AbortController signal\"\n );\n try {\n if (isMutationMethod(request.method)) {\n let result2 = await submit(\n request,\n matches,\n routeMatch || getTargetMatch(matches, location),\n requestContext,\n dataStrategy,\n skipLoaderErrorBubbling,\n routeMatch != null,\n filterMatchesToLoad,\n skipRevalidation\n );\n return result2;\n }\n let result = await loadRouteData(\n request,\n matches,\n requestContext,\n dataStrategy,\n skipLoaderErrorBubbling,\n routeMatch,\n filterMatchesToLoad\n );\n return isResponse(result) ? result : {\n ...result,\n actionData: null,\n actionHeaders: {}\n };\n } catch (e) {\n if (isDataStrategyResult(e) && isResponse(e.result)) {\n if (e.type === \"error\" /* error */) {\n throw e.result;\n }\n return e.result;\n }\n if (isRedirectResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n async function submit(request, matches, actionMatch, requestContext, dataStrategy, skipLoaderErrorBubbling, isRouteRequest, filterMatchesToLoad, skipRevalidation) {\n let result;\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n let error = getInternalRouterError(405, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: actionMatch.route.id\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: \"error\" /* error */,\n error\n };\n } else {\n let results = await callDataStrategy(\n \"action\",\n request,\n [actionMatch],\n matches,\n isRouteRequest,\n requestContext,\n dataStrategy\n );\n result = results[actionMatch.route.id];\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest);\n }\n }\n if (isRedirectResult(result)) {\n throw new Response(null, {\n status: result.response.status,\n headers: {\n Location: result.response.headers.get(\"Location\")\n }\n });\n }\n if (isRouteRequest) {\n if (isErrorResult(result)) {\n throw result.error;\n }\n return {\n matches: [actionMatch],\n loaderData: {},\n actionData: { [actionMatch.route.id]: result.data },\n errors: null,\n // Note: statusCode + headers are unused here since queryRoute will\n // return the raw Response or value\n statusCode: 200,\n loaderHeaders: {},\n actionHeaders: {}\n };\n }\n if (skipRevalidation) {\n if (isErrorResult(result)) {\n let boundaryMatch = skipLoaderErrorBubbling ? actionMatch : findNearestBoundary(matches, actionMatch.route.id);\n return {\n statusCode: isRouteErrorResponse(result.error) ? result.error.status : result.statusCode != null ? result.statusCode : 500,\n actionData: null,\n actionHeaders: {\n ...result.headers ? { [actionMatch.route.id]: result.headers } : {}\n },\n matches,\n loaderData: {},\n errors: {\n [boundaryMatch.route.id]: result.error\n },\n loaderHeaders: {}\n };\n } else {\n return {\n actionData: {\n [actionMatch.route.id]: result.data\n },\n actionHeaders: result.headers ? { [actionMatch.route.id]: result.headers } : {},\n matches,\n loaderData: {},\n errors: null,\n statusCode: result.statusCode || 200,\n loaderHeaders: {}\n };\n }\n }\n let loaderRequest = new Request(request.url, {\n headers: request.headers,\n redirect: request.redirect,\n signal: request.signal\n });\n if (isErrorResult(result)) {\n let boundaryMatch = skipLoaderErrorBubbling ? actionMatch : findNearestBoundary(matches, actionMatch.route.id);\n let handlerContext2 = await loadRouteData(\n loaderRequest,\n matches,\n requestContext,\n dataStrategy,\n skipLoaderErrorBubbling,\n null,\n filterMatchesToLoad,\n [boundaryMatch.route.id, result]\n );\n return {\n ...handlerContext2,\n statusCode: isRouteErrorResponse(result.error) ? result.error.status : result.statusCode != null ? result.statusCode : 500,\n actionData: null,\n actionHeaders: {\n ...result.headers ? { [actionMatch.route.id]: result.headers } : {}\n }\n };\n }\n let handlerContext = await loadRouteData(\n loaderRequest,\n matches,\n requestContext,\n dataStrategy,\n skipLoaderErrorBubbling,\n null,\n filterMatchesToLoad\n );\n return {\n ...handlerContext,\n actionData: {\n [actionMatch.route.id]: result.data\n },\n // action status codes take precedence over loader status codes\n ...result.statusCode ? { statusCode: result.statusCode } : {},\n actionHeaders: result.headers ? { [actionMatch.route.id]: result.headers } : {}\n };\n }\n async function loadRouteData(request, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch, filterMatchesToLoad, pendingActionResult) {\n let isRouteRequest = routeMatch != null;\n if (isRouteRequest && !routeMatch?.route.loader && !routeMatch?.route.lazy) {\n throw getInternalRouterError(400, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: routeMatch?.route.id\n });\n }\n let requestMatches = routeMatch ? [routeMatch] : pendingActionResult && isErrorResult(pendingActionResult[1]) ? getLoaderMatchesUntilBoundary(matches, pendingActionResult[0]) : matches;\n let matchesToLoad = requestMatches.filter(\n (m) => (m.route.loader || m.route.lazy) && (!filterMatchesToLoad || filterMatchesToLoad(m))\n );\n if (matchesToLoad.length === 0) {\n return {\n matches,\n // Add a null for all matched routes for proper revalidation on the client\n loaderData: matches.reduce(\n (acc, m) => Object.assign(acc, { [m.route.id]: null }),\n {}\n ),\n errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? {\n [pendingActionResult[0]]: pendingActionResult[1].error\n } : null,\n statusCode: 200,\n loaderHeaders: {}\n };\n }\n let results = await callDataStrategy(\n \"loader\",\n request,\n matchesToLoad,\n matches,\n isRouteRequest,\n requestContext,\n dataStrategy\n );\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest);\n }\n let handlerContext = processRouteLoaderData(\n matches,\n results,\n pendingActionResult,\n true,\n skipLoaderErrorBubbling\n );\n let executedLoaders = new Set(\n matchesToLoad.map((match) => match.route.id)\n );\n matches.forEach((match) => {\n if (!executedLoaders.has(match.route.id)) {\n handlerContext.loaderData[match.route.id] = null;\n }\n });\n return {\n ...handlerContext,\n matches\n };\n }\n async function callDataStrategy(type, request, matchesToLoad, matches, isRouteRequest, requestContext, dataStrategy) {\n let results = await callDataStrategyImpl(\n dataStrategy || defaultDataStrategy,\n type,\n request,\n matchesToLoad,\n matches,\n null,\n manifest,\n mapRouteProperties2,\n requestContext,\n false\n // middleware not done via dataStrategy in the static handler\n );\n let dataResults = {};\n await Promise.all(\n matches.map(async (match) => {\n if (!(match.route.id in results)) {\n return;\n }\n let result = results[match.route.id];\n if (isRedirectDataStrategyResult(result)) {\n let response = result.result;\n throw normalizeRelativeRoutingRedirectResponse(\n response,\n request,\n match.route.id,\n matches,\n basename\n );\n }\n if (isResponse(result.result) && isRouteRequest) {\n throw result;\n }\n dataResults[match.route.id] = await convertDataStrategyResultToDataResult(result);\n })\n );\n return dataResults;\n }\n return {\n dataRoutes,\n query,\n queryRoute\n };\n}\nfunction getStaticContextFromError(routes, handlerContext, error, boundaryId) {\n let errorBoundaryId = boundaryId || handlerContext._deepestRenderedBoundaryId || routes[0].id;\n return {\n ...handlerContext,\n statusCode: isRouteErrorResponse(error) ? error.status : 500,\n errors: {\n [errorBoundaryId]: error\n }\n };\n}\nfunction throwStaticHandlerAbortedError(request, isRouteRequest) {\n if (request.signal.reason !== void 0) {\n throw request.signal.reason;\n }\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted without an \\`AbortSignal.reason\\`: ${request.method} ${request.url}`\n );\n}\nfunction isSubmissionNavigation(opts) {\n return opts != null && (\"formData\" in opts && opts.formData != null || \"body\" in opts && opts.body !== void 0);\n}\nfunction normalizeTo(location, matches, basename, to, fromRouteId, relative) {\n let contextualMatches;\n let activeRouteMatch;\n if (fromRouteId) {\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n let path = resolveTo(\n to ? to : \".\",\n getResolveToMatches(contextualMatches),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n if ((to == null || to === \"\" || to === \".\") && activeRouteMatch) {\n let nakedIndex = hasNakedIndexQuery(path.search);\n if (activeRouteMatch.route.index && !nakedIndex) {\n path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\n } else if (!activeRouteMatch.route.index && nakedIndex) {\n let params = new URLSearchParams(path.search);\n let indexValues = params.getAll(\"index\");\n params.delete(\"index\");\n indexValues.filter((v) => v).forEach((v) => params.append(\"index\", v));\n let qs = params.toString();\n path.search = qs ? `?${qs}` : \"\";\n }\n }\n if (basename !== \"/\") {\n path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n return createPath(path);\n}\nfunction normalizeNavigateOptions(isFetcher, path, opts) {\n if (!opts || !isSubmissionNavigation(opts)) {\n return { path };\n }\n if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n return {\n path,\n error: getInternalRouterError(405, { method: opts.formMethod })\n };\n }\n let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" })\n });\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = rawFormMethod.toUpperCase();\n let formAction = stripHashFromPath(path);\n if (opts.body !== void 0) {\n if (opts.formEncType === \"text/plain\") {\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n let text = typeof opts.body === \"string\" ? opts.body : opts.body instanceof FormData || opts.body instanceof URLSearchParams ? (\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\n`,\n \"\"\n )\n ) : String(opts.body);\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: void 0,\n json: void 0,\n text\n }\n };\n } else if (opts.formEncType === \"application/json\") {\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n try {\n let json = typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: void 0,\n json,\n text: void 0\n }\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n let searchParams;\n let formData;\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n let submission = {\n formMethod,\n formAction,\n formEncType: opts && opts.formEncType || \"application/x-www-form-urlencoded\",\n formData,\n json: void 0,\n text: void 0\n };\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n let parsedPath = parsePath(path);\n if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n searchParams.append(\"index\", \"\");\n }\n parsedPath.search = `?${searchParams}`;\n return { path: createPath(parsedPath), submission };\n}\nfunction getLoaderMatchesUntilBoundary(matches, boundaryId, includeBoundary = false) {\n let index = matches.findIndex((m) => m.route.id === boundaryId);\n if (index >= 0) {\n return matches.slice(0, includeBoundary ? index + 1 : index);\n }\n return matches;\n}\nfunction getMatchesToLoad(history, state, matches, submission, location, initialHydration, isRevalidationRequired, cancelledFetcherLoads, fetchersQueuedForDeletion, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult) {\n let actionResult = pendingActionResult ? isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : pendingActionResult[1].data : void 0;\n let currentUrl = history.createURL(state.location);\n let nextUrl = history.createURL(location);\n let boundaryMatches = matches;\n if (initialHydration && state.errors) {\n boundaryMatches = getLoaderMatchesUntilBoundary(\n matches,\n Object.keys(state.errors)[0],\n true\n );\n } else if (pendingActionResult && isErrorResult(pendingActionResult[1])) {\n boundaryMatches = getLoaderMatchesUntilBoundary(\n matches,\n pendingActionResult[0]\n );\n }\n let actionStatus = pendingActionResult ? pendingActionResult[1].statusCode : void 0;\n let shouldSkipRevalidation = actionStatus && actionStatus >= 400;\n let navigationMatches = boundaryMatches.filter((match, index) => {\n let { route } = match;\n if (route.lazy) {\n return true;\n }\n if (route.loader == null) {\n return false;\n }\n if (initialHydration) {\n return shouldLoadRouteOnHydration(route, state.loaderData, state.errors);\n }\n if (isNewLoader(state.loaderData, state.matches[index], match)) {\n return true;\n }\n let currentRouteMatch = state.matches[index];\n let nextRouteMatch = match;\n return shouldRevalidateLoader(match, {\n currentUrl,\n currentParams: currentRouteMatch.params,\n nextUrl,\n nextParams: nextRouteMatch.params,\n ...submission,\n actionResult,\n actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation ? false : (\n // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired || currentUrl.pathname + currentUrl.search === nextUrl.pathname + nextUrl.search || // Search params affect all loaders\n currentUrl.search !== nextUrl.search || isNewRouteInstance(currentRouteMatch, nextRouteMatch)\n )\n });\n });\n let revalidatingFetchers = [];\n fetchLoadMatches.forEach((f, key) => {\n if (initialHydration || !matches.some((m) => m.route.id === f.routeId) || fetchersQueuedForDeletion.has(key)) {\n return;\n }\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null\n });\n return;\n }\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.has(key)) {\n cancelledFetcherLoads.delete(key);\n shouldRevalidate = true;\n } else if (fetcher && fetcher.state !== \"idle\" && fetcher.data === void 0) {\n shouldRevalidate = isRevalidationRequired;\n } else {\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\n currentUrl,\n currentParams: state.matches[state.matches.length - 1].params,\n nextUrl,\n nextParams: matches[matches.length - 1].params,\n ...submission,\n actionResult,\n actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation ? false : isRevalidationRequired\n });\n }\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController()\n });\n }\n });\n return [navigationMatches, revalidatingFetchers];\n}\nfunction shouldLoadRouteOnHydration(route, loaderData, errors) {\n if (route.lazy) {\n return true;\n }\n if (!route.loader) {\n return false;\n }\n let hasData = loaderData != null && loaderData[route.id] !== void 0;\n let hasError = errors != null && errors[route.id] !== void 0;\n if (!hasData && hasError) {\n return false;\n }\n if (typeof route.loader === \"function\" && route.loader.hydrate === true) {\n return true;\n }\n return !hasData && !hasError;\n}\nfunction isNewLoader(currentLoaderData, currentMatch, match) {\n let isNew = (\n // [a] -> [a, b]\n !currentMatch || // [a, b] -> [a, c]\n match.route.id !== currentMatch.route.id\n );\n let isMissingData = !currentLoaderData.hasOwnProperty(match.route.id);\n return isNew || isMissingData;\n}\nfunction isNewRouteInstance(currentMatch, match) {\n let currentPath = currentMatch.route.path;\n return (\n // param change for this match, /users/123 -> /users/456\n currentMatch.pathname !== match.pathname || // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n currentPath != null && currentPath.endsWith(\"*\") && currentMatch.params[\"*\"] !== match.params[\"*\"]\n );\n}\nfunction shouldRevalidateLoader(loaderMatch, arg) {\n if (loaderMatch.route.shouldRevalidate) {\n let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n return arg.defaultShouldRevalidate;\n}\nfunction patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties2) {\n let childrenToPatch;\n if (routeId) {\n let route = manifest[routeId];\n invariant(\n route,\n `No route found to patch children into: routeId = ${routeId}`\n );\n if (!route.children) {\n route.children = [];\n }\n childrenToPatch = route.children;\n } else {\n childrenToPatch = routesToUse;\n }\n let uniqueChildren = children.filter(\n (newRoute) => !childrenToPatch.some(\n (existingRoute) => isSameRoute(newRoute, existingRoute)\n )\n );\n let newRoutes = convertRoutesToDataRoutes(\n uniqueChildren,\n mapRouteProperties2,\n [routeId || \"_\", \"patch\", String(childrenToPatch?.length || \"0\")],\n manifest\n );\n childrenToPatch.push(...newRoutes);\n}\nfunction isSameRoute(newRoute, existingRoute) {\n if (\"id\" in newRoute && \"id\" in existingRoute && newRoute.id === existingRoute.id) {\n return true;\n }\n if (!(newRoute.index === existingRoute.index && newRoute.path === existingRoute.path && newRoute.caseSensitive === existingRoute.caseSensitive)) {\n return false;\n }\n if ((!newRoute.children || newRoute.children.length === 0) && (!existingRoute.children || existingRoute.children.length === 0)) {\n return true;\n }\n return newRoute.children.every(\n (aChild, i) => existingRoute.children?.some((bChild) => isSameRoute(aChild, bChild))\n );\n}\nasync function loadLazyRouteModule(route, mapRouteProperties2, manifest) {\n if (!route.lazy) {\n return;\n }\n let lazyRoute = await route.lazy();\n if (!route.lazy) {\n return;\n }\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n let routeUpdates = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue = routeToUpdate[lazyRouteProperty];\n let isPropertyStaticallyDefined = staticRouteValue !== void 0 && // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" defined but its lazy function is also returning a value for this property. The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n if (!isPropertyStaticallyDefined && !immutableRouteKeys.has(lazyRouteProperty)) {\n routeUpdates[lazyRouteProperty] = lazyRoute[lazyRouteProperty];\n }\n }\n Object.assign(routeToUpdate, routeUpdates);\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided `mapRouteProperties`\n // function to set the framework-aware properties (`element`/`hasErrorBoundary`)\n // since the logic will differ between frameworks.\n ...mapRouteProperties2(routeToUpdate),\n lazy: void 0\n });\n}\nasync function defaultDataStrategy(args) {\n let matchesToLoad = args.matches.filter((m) => m.shouldLoad);\n let keyedResults = {};\n let results = await Promise.all(matchesToLoad.map((m) => m.resolve()));\n results.forEach((result, i) => {\n keyedResults[matchesToLoad[i].route.id] = result;\n });\n return keyedResults;\n}\nasync function defaultDataStrategyWithMiddleware(args) {\n if (!args.matches.some((m) => m.route.unstable_middleware)) {\n return defaultDataStrategy(args);\n }\n return runMiddlewarePipeline(\n args,\n false,\n () => defaultDataStrategy(args),\n (error, routeId) => ({ [routeId]: { type: \"error\", result: error } })\n );\n}\nasync function runMiddlewarePipeline(args, propagateResult, handler, errorHandler) {\n let { matches, request, params, context } = args;\n let middlewareState = {\n handlerResult: void 0\n };\n try {\n let tuples = matches.flatMap(\n (m) => m.route.unstable_middleware ? m.route.unstable_middleware.map((fn) => [m.route.id, fn]) : []\n );\n let result = await callRouteMiddleware(\n { request, params, context },\n tuples,\n propagateResult,\n middlewareState,\n handler\n );\n return propagateResult ? result : middlewareState.handlerResult;\n } catch (e) {\n if (!middlewareState.middlewareError) {\n throw e;\n }\n let result = await errorHandler(\n middlewareState.middlewareError.error,\n middlewareState.middlewareError.routeId\n );\n if (propagateResult || !middlewareState.handlerResult) {\n return result;\n }\n return Object.assign(middlewareState.handlerResult, result);\n }\n}\nasync function callRouteMiddleware(args, middlewares, propagateResult, middlewareState, handler, idx = 0) {\n let { request } = args;\n if (request.signal.aborted) {\n if (request.signal.reason) {\n throw request.signal.reason;\n }\n throw new Error(\n `Request aborted without an \\`AbortSignal.reason\\`: ${request.method} ${request.url}`\n );\n }\n let tuple = middlewares[idx];\n if (!tuple) {\n middlewareState.handlerResult = await handler();\n return middlewareState.handlerResult;\n }\n let [routeId, middleware] = tuple;\n let nextCalled = false;\n let nextResult = void 0;\n let next = async () => {\n if (nextCalled) {\n throw new Error(\"You may only call `next()` once per middleware\");\n }\n nextCalled = true;\n let result = await callRouteMiddleware(\n args,\n middlewares,\n propagateResult,\n middlewareState,\n handler,\n idx + 1\n );\n if (propagateResult) {\n nextResult = result;\n return nextResult;\n }\n };\n try {\n let result = await middleware(\n {\n request: args.request,\n params: args.params,\n context: args.context\n },\n next\n );\n if (nextCalled) {\n if (result === void 0) {\n return nextResult;\n } else {\n return result;\n }\n } else {\n return next();\n }\n } catch (error) {\n if (!middlewareState.middlewareError) {\n middlewareState.middlewareError = { routeId, error };\n } else if (middlewareState.middlewareError.error !== error) {\n middlewareState.middlewareError = { routeId, error };\n }\n throw error;\n }\n}\nasync function callDataStrategyImpl(dataStrategyImpl, type, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties2, scopedContext, enableMiddleware) {\n let loadRouteDefinitionsPromises = matches.map(\n (m) => m.route.lazy ? loadLazyRouteModule(m.route, mapRouteProperties2, manifest) : void 0\n );\n if (enableMiddleware) {\n await Promise.all(loadRouteDefinitionsPromises);\n }\n let dsMatches = matches.map((match, i) => {\n let loadRoutePromise = loadRouteDefinitionsPromises[i];\n let shouldLoad = matchesToLoad.some((m) => m.route.id === match.route.id);\n let resolve = async (handlerOverride) => {\n if (handlerOverride && request.method === \"GET\" && (match.route.lazy || match.route.loader)) {\n shouldLoad = true;\n }\n return shouldLoad ? callLoaderOrAction(\n type,\n request,\n match,\n loadRoutePromise,\n handlerOverride,\n scopedContext\n ) : Promise.resolve({ type: \"data\" /* data */, result: void 0 });\n };\n return {\n ...match,\n shouldLoad,\n resolve\n };\n });\n let results = await dataStrategyImpl({\n matches: dsMatches,\n request,\n params: matches[0].params,\n fetcherKey,\n context: scopedContext\n });\n try {\n await Promise.all(loadRouteDefinitionsPromises);\n } catch (e) {\n }\n return results;\n}\nasync function callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, scopedContext) {\n let result;\n let onReject;\n let runHandler = (handler) => {\n let reject;\n let abortPromise = new Promise((_, r) => reject = r);\n onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n let actualHandler = (ctx) => {\n if (typeof handler !== \"function\") {\n return Promise.reject(\n new Error(\n `You cannot call the handler for a route which defines a boolean \"${type}\" [routeId: ${match.route.id}]`\n )\n );\n }\n return handler(\n {\n request,\n params: match.params,\n context: scopedContext\n },\n ...ctx !== void 0 ? [ctx] : []\n );\n };\n let handlerPromise = (async () => {\n try {\n let val = await (handlerOverride ? handlerOverride((ctx) => actualHandler(ctx)) : actualHandler());\n return { type: \"data\", result: val };\n } catch (e) {\n return { type: \"error\", result: e };\n }\n })();\n return Promise.race([handlerPromise, abortPromise]);\n };\n try {\n let handler = match.route[type];\n if (loadRoutePromise) {\n if (handler) {\n let handlerError;\n let [value] = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n loadRoutePromise\n ]);\n if (handlerError !== void 0) {\n throw handlerError;\n }\n result = value;\n } else {\n await loadRoutePromise;\n handler = match.route[type];\n if (handler) {\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id\n });\n } else {\n return { type: \"data\" /* data */, result: void 0 };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname\n });\n } else {\n result = await runHandler(handler);\n }\n } catch (e) {\n return { type: \"error\" /* error */, result: e };\n } finally {\n if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\n }\n return result;\n}\nasync function convertDataStrategyResultToDataResult(dataStrategyResult) {\n let { result, type } = dataStrategyResult;\n if (isResponse(result)) {\n let data2;\n try {\n let contentType = result.headers.get(\"Content-Type\");\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n if (result.body == null) {\n data2 = null;\n } else {\n data2 = await result.json();\n }\n } else {\n data2 = await result.text();\n }\n } catch (e) {\n return { type: \"error\" /* error */, error: e };\n }\n if (type === \"error\" /* error */) {\n return {\n type: \"error\" /* error */,\n error: new ErrorResponseImpl(result.status, result.statusText, data2),\n statusCode: result.status,\n headers: result.headers\n };\n }\n return {\n type: \"data\" /* data */,\n data: data2,\n statusCode: result.status,\n headers: result.headers\n };\n }\n if (type === \"error\" /* error */) {\n if (isDataWithResponseInit(result)) {\n if (result.data instanceof Error) {\n return {\n type: \"error\" /* error */,\n error: result.data,\n statusCode: result.init?.status,\n headers: result.init?.headers ? new Headers(result.init.headers) : void 0\n };\n }\n return {\n type: \"error\" /* error */,\n error: new ErrorResponseImpl(\n result.init?.status || 500,\n void 0,\n result.data\n ),\n statusCode: isRouteErrorResponse(result) ? result.status : void 0,\n headers: result.init?.headers ? new Headers(result.init.headers) : void 0\n };\n }\n return {\n type: \"error\" /* error */,\n error: result,\n statusCode: isRouteErrorResponse(result) ? result.status : void 0\n };\n }\n if (isDataWithResponseInit(result)) {\n return {\n type: \"data\" /* data */,\n data: result.data,\n statusCode: result.init?.status,\n headers: result.init?.headers ? new Headers(result.init.headers) : void 0\n };\n }\n return { type: \"data\" /* data */, data: result };\n}\nfunction normalizeRelativeRoutingRedirectResponse(response, request, routeId, matches, basename) {\n let location = response.headers.get(\"Location\");\n invariant(\n location,\n \"Redirects returned/thrown from loaders/actions must have a Location header\"\n );\n if (!ABSOLUTE_URL_REGEX.test(location)) {\n let trimmedMatches = matches.slice(\n 0,\n matches.findIndex((m) => m.route.id === routeId) + 1\n );\n location = normalizeTo(\n new URL(request.url),\n trimmedMatches,\n basename,\n location\n );\n response.headers.set(\"Location\", location);\n }\n return response;\n}\nfunction normalizeRedirectLocation(location, currentUrl, basename) {\n if (ABSOLUTE_URL_REGEX.test(location)) {\n let normalizedLocation = location;\n let url = normalizedLocation.startsWith(\"//\") ? new URL(currentUrl.protocol + normalizedLocation) : new URL(normalizedLocation);\n let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\n return url.pathname + url.search + url.hash;\n }\n }\n return location;\n}\nfunction createClientSideRequest(history, location, signal, submission) {\n let url = history.createURL(stripHashFromPath(location)).toString();\n let init = { signal };\n if (submission && isMutationMethod(submission.formMethod)) {\n let { formMethod, formEncType } = submission;\n init.method = formMethod.toUpperCase();\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n init.body = submission.text;\n } else if (formEncType === \"application/x-www-form-urlencoded\" && submission.formData) {\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n init.body = submission.formData;\n }\n }\n return new Request(url, init);\n}\nfunction convertFormDataToSearchParams(formData) {\n let searchParams = new URLSearchParams();\n for (let [key, value] of formData.entries()) {\n searchParams.append(key, typeof value === \"string\" ? value : value.name);\n }\n return searchParams;\n}\nfunction convertSearchParamsToFormData(searchParams) {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\n}\nfunction processRouteLoaderData(matches, results, pendingActionResult, isStaticHandler = false, skipLoaderErrorBubbling = false) {\n let loaderData = {};\n let errors = null;\n let statusCode;\n let foundError = false;\n let loaderHeaders = {};\n let pendingError = pendingActionResult && isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : void 0;\n matches.forEach((match) => {\n if (!(match.route.id in results)) {\n return;\n }\n let id = match.route.id;\n let result = results[id];\n invariant(\n !isRedirectResult(result),\n \"Cannot handle redirect results in processLoaderData\"\n );\n if (isErrorResult(result)) {\n let error = result.error;\n if (pendingError !== void 0) {\n error = pendingError;\n pendingError = void 0;\n }\n errors = errors || {};\n if (skipLoaderErrorBubbling) {\n errors[id] = error;\n } else {\n let boundaryMatch = findNearestBoundary(matches, id);\n if (errors[boundaryMatch.route.id] == null) {\n errors[boundaryMatch.route.id] = error;\n }\n }\n if (!isStaticHandler) {\n loaderData[id] = ResetLoaderDataSymbol;\n }\n if (!foundError) {\n foundError = true;\n statusCode = isRouteErrorResponse(result.error) ? result.error.status : 500;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n loaderData[id] = result.data;\n if (result.statusCode && result.statusCode !== 200 && !foundError) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n }\n });\n if (pendingError !== void 0 && pendingActionResult) {\n errors = { [pendingActionResult[0]]: pendingError };\n loaderData[pendingActionResult[0]] = void 0;\n }\n return {\n loaderData,\n errors,\n statusCode: statusCode || 200,\n loaderHeaders\n };\n}\nfunction processLoaderData(state, matches, results, pendingActionResult, revalidatingFetchers, fetcherResults) {\n let { loaderData, errors } = processRouteLoaderData(\n matches,\n results,\n pendingActionResult\n );\n revalidatingFetchers.forEach((rf) => {\n let { key, match, controller } = rf;\n let result = fetcherResults[key];\n invariant(result, \"Did not find corresponding fetcher result\");\n if (controller && controller.signal.aborted) {\n return;\n } else if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, match?.route.id);\n if (!(errors && errors[boundaryMatch.route.id])) {\n errors = {\n ...errors,\n [boundaryMatch.route.id]: result.error\n };\n }\n state.fetchers.delete(key);\n } else if (isRedirectResult(result)) {\n invariant(false, \"Unhandled fetcher revalidation redirect\");\n } else {\n let doneFetcher = getDoneFetcher(result.data);\n state.fetchers.set(key, doneFetcher);\n }\n });\n return { loaderData, errors };\n}\nfunction mergeLoaderData(loaderData, newLoaderData, matches, errors) {\n let mergedLoaderData = Object.entries(newLoaderData).filter(([, v]) => v !== ResetLoaderDataSymbol).reduce((merged, [k, v]) => {\n merged[k] = v;\n return merged;\n }, {});\n for (let match of matches) {\n let id = match.route.id;\n if (!newLoaderData.hasOwnProperty(id) && loaderData.hasOwnProperty(id) && match.route.loader) {\n mergedLoaderData[id] = loaderData[id];\n }\n if (errors && errors.hasOwnProperty(id)) {\n break;\n }\n }\n return mergedLoaderData;\n}\nfunction getActionDataForCommit(pendingActionResult) {\n if (!pendingActionResult) {\n return {};\n }\n return isErrorResult(pendingActionResult[1]) ? {\n // Clear out prior actionData on errors\n actionData: {}\n } : {\n actionData: {\n [pendingActionResult[0]]: pendingActionResult[1].data\n }\n };\n}\nfunction findNearestBoundary(matches, routeId) {\n let eligibleMatches = routeId ? matches.slice(0, matches.findIndex((m) => m.route.id === routeId) + 1) : [...matches];\n return eligibleMatches.reverse().find((m) => m.route.hasErrorBoundary === true) || matches[0];\n}\nfunction getShortCircuitMatches(routes) {\n let route = routes.length === 1 ? routes[0] : routes.find((r) => r.index || !r.path || r.path === \"/\") || {\n id: `__shim-error-route__`\n };\n return {\n matches: [\n {\n params: {},\n pathname: \"\",\n pathnameBase: \"\",\n route\n }\n ],\n route\n };\n}\nfunction getInternalRouterError(status, {\n pathname,\n routeId,\n method,\n type,\n message\n} = {}) {\n let statusText = \"Unknown Server Error\";\n let errorMessage = \"Unknown @remix-run/router error\";\n if (status === 400) {\n statusText = \"Bad Request\";\n if (method && pathname && routeId) {\n errorMessage = `You made a ${method} request to \"${pathname}\" but did not provide a \\`loader\\` for route \"${routeId}\", so there is no way to handle the request.`;\n } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\n }\n } else if (status === 403) {\n statusText = \"Forbidden\";\n errorMessage = `Route \"${routeId}\" does not match URL \"${pathname}\"`;\n } else if (status === 404) {\n statusText = \"Not Found\";\n errorMessage = `No route matches URL \"${pathname}\"`;\n } else if (status === 405) {\n statusText = \"Method Not Allowed\";\n if (method && pathname && routeId) {\n errorMessage = `You made a ${method.toUpperCase()} request to \"${pathname}\" but did not provide an \\`action\\` for route \"${routeId}\", so there is no way to handle the request.`;\n } else if (method) {\n errorMessage = `Invalid request method \"${method.toUpperCase()}\"`;\n }\n }\n return new ErrorResponseImpl(\n status || 500,\n statusText,\n new Error(errorMessage),\n true\n );\n}\nfunction findRedirect(results) {\n let entries = Object.entries(results);\n for (let i = entries.length - 1; i >= 0; i--) {\n let [key, result] = entries[i];\n if (isRedirectResult(result)) {\n return { key, result };\n }\n }\n}\nfunction stripHashFromPath(path) {\n let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n return createPath({ ...parsedPath, hash: \"\" });\n}\nfunction isHashChangeOnly(a, b) {\n if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n if (a.hash === \"\") {\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n return true;\n } else if (b.hash !== \"\") {\n return true;\n }\n return false;\n}\nfunction isDataStrategyResult(result) {\n return result != null && typeof result === \"object\" && \"type\" in result && \"result\" in result && (result.type === \"data\" /* data */ || result.type === \"error\" /* error */);\n}\nfunction isRedirectDataStrategyResult(result) {\n return isResponse(result.result) && redirectStatusCodes.has(result.result.status);\n}\nfunction isErrorResult(result) {\n return result.type === \"error\" /* error */;\n}\nfunction isRedirectResult(result) {\n return (result && result.type) === \"redirect\" /* redirect */;\n}\nfunction isDataWithResponseInit(value) {\n return typeof value === \"object\" && value != null && \"type\" in value && \"data\" in value && \"init\" in value && value.type === \"DataWithResponseInit\";\n}\nfunction isResponse(value) {\n return value != null && typeof value.status === \"number\" && typeof value.statusText === \"string\" && typeof value.headers === \"object\" && typeof value.body !== \"undefined\";\n}\nfunction isRedirectStatusCode(statusCode) {\n return redirectStatusCodes.has(statusCode);\n}\nfunction isRedirectResponse(result) {\n return isResponse(result) && isRedirectStatusCode(result.status) && result.headers.has(\"Location\");\n}\nfunction isValidMethod(method) {\n return validRequestMethods.has(method.toUpperCase());\n}\nfunction isMutationMethod(method) {\n return validMutationMethods.has(method.toUpperCase());\n}\nfunction hasNakedIndexQuery(search) {\n return new URLSearchParams(search).getAll(\"index\").some((v) => v === \"\");\n}\nfunction getTargetMatch(matches, location) {\n let search = typeof location === \"string\" ? parsePath(location).search : location.search;\n if (matches[matches.length - 1].route.index && hasNakedIndexQuery(search || \"\")) {\n return matches[matches.length - 1];\n }\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches[pathMatches.length - 1];\n}\nfunction getSubmissionFromNavigation(navigation) {\n let { formMethod, formAction, formEncType, text, formData, json } = navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: void 0,\n json: void 0,\n text\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: void 0,\n text: void 0\n };\n } else if (json !== void 0) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: void 0,\n json,\n text: void 0\n };\n }\n}\nfunction getLoadingNavigation(location, submission) {\n if (submission) {\n let navigation = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text\n };\n return navigation;\n } else {\n let navigation = {\n state: \"loading\",\n location,\n formMethod: void 0,\n formAction: void 0,\n formEncType: void 0,\n formData: void 0,\n json: void 0,\n text: void 0\n };\n return navigation;\n }\n}\nfunction getSubmittingNavigation(location, submission) {\n let navigation = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text\n };\n return navigation;\n}\nfunction getLoadingFetcher(submission, data2) {\n if (submission) {\n let fetcher = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: data2\n };\n return fetcher;\n } else {\n let fetcher = {\n state: \"loading\",\n formMethod: void 0,\n formAction: void 0,\n formEncType: void 0,\n formData: void 0,\n json: void 0,\n text: void 0,\n data: data2\n };\n return fetcher;\n }\n}\nfunction getSubmittingFetcher(submission, existingFetcher) {\n let fetcher = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : void 0\n };\n return fetcher;\n}\nfunction getDoneFetcher(data2) {\n let fetcher = {\n state: \"idle\",\n formMethod: void 0,\n formAction: void 0,\n formEncType: void 0,\n formData: void 0,\n json: void 0,\n text: void 0,\n data: data2\n };\n return fetcher;\n}\nfunction restoreAppliedTransitions(_window, transitions) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n }\n}\nfunction persistAppliedTransitions(_window, transitions) {\n if (transitions.size > 0) {\n let json = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\nfunction createDeferred() {\n let resolve;\n let reject;\n let promise = new Promise((res, rej) => {\n resolve = async (val) => {\n res(val);\n try {\n await promise;\n } catch (e) {\n }\n };\n reject = async (error) => {\n rej(error);\n try {\n await promise;\n } catch (e) {\n }\n };\n });\n return {\n promise,\n //@ts-ignore\n resolve,\n //@ts-ignore\n reject\n };\n}\n\n// lib/components.tsx\nimport * as React3 from \"react\";\n\n// lib/context.ts\nimport * as React from \"react\";\nvar DataRouterContext = React.createContext(null);\nDataRouterContext.displayName = \"DataRouter\";\nvar DataRouterStateContext = React.createContext(null);\nDataRouterStateContext.displayName = \"DataRouterState\";\nvar ViewTransitionContext = React.createContext({\n isTransitioning: false\n});\nViewTransitionContext.displayName = \"ViewTransition\";\nvar FetchersContext = React.createContext(\n /* @__PURE__ */ new Map()\n);\nFetchersContext.displayName = \"Fetchers\";\nvar AwaitContext = React.createContext(null);\nAwaitContext.displayName = \"Await\";\nvar NavigationContext = React.createContext(\n null\n);\nNavigationContext.displayName = \"Navigation\";\nvar LocationContext = React.createContext(\n null\n);\nLocationContext.displayName = \"Location\";\nvar RouteContext = React.createContext({\n outlet: null,\n matches: [],\n isDataRoute: false\n});\nRouteContext.displayName = \"Route\";\nvar RouteErrorContext = React.createContext(null);\nRouteErrorContext.displayName = \"RouteError\";\n\n// lib/hooks.tsx\nimport * as React2 from \"react\";\nvar ENABLE_DEV_WARNINGS = true;\nfunction useHref(to, { relative } = {}) {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useHref() may be used only in the context of a <Router> component.`\n );\n let { basename, navigator: navigator2 } = React2.useContext(NavigationContext);\n let { hash, pathname, search } = useResolvedPath(to, { relative });\n let joinedPathname = pathname;\n if (basename !== \"/\") {\n joinedPathname = pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n }\n return navigator2.createHref({ pathname: joinedPathname, search, hash });\n}\nfunction useInRouterContext() {\n return React2.useContext(LocationContext) != null;\n}\nfunction useLocation() {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useLocation() may be used only in the context of a <Router> component.`\n );\n return React2.useContext(LocationContext).location;\n}\nfunction useNavigationType() {\n return React2.useContext(LocationContext).navigationType;\n}\nfunction useMatch(pattern) {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useMatch() may be used only in the context of a <Router> component.`\n );\n let { pathname } = useLocation();\n return React2.useMemo(\n () => matchPath(pattern, decodePath(pathname)),\n [pathname, pattern]\n );\n}\nvar navigateEffectWarning = `You should call navigate() in a React.useEffect(), not when your component is first rendered.`;\nfunction useIsomorphicLayoutEffect(cb) {\n let isStatic = React2.useContext(NavigationContext).static;\n if (!isStatic) {\n React2.useLayoutEffect(cb);\n }\n}\nfunction useNavigate() {\n let { isDataRoute } = React2.useContext(RouteContext);\n return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\nfunction useNavigateUnstable() {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useNavigate() may be used only in the context of a <Router> component.`\n );\n let dataRouterContext = React2.useContext(DataRouterContext);\n let { basename, navigator: navigator2 } = React2.useContext(NavigationContext);\n let { matches } = React2.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n let routePathnamesJson = JSON.stringify(getResolveToMatches(matches));\n let activeRef = React2.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n let navigate = React2.useCallback(\n (to, options = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n if (!activeRef.current) return;\n if (typeof to === \"number\") {\n navigator2.go(to);\n return;\n }\n let path = resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n options.relative === \"path\"\n );\n if (dataRouterContext == null && basename !== \"/\") {\n path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n (!!options.replace ? navigator2.replace : navigator2.push)(\n path,\n options.state,\n options\n );\n },\n [\n basename,\n navigator2,\n routePathnamesJson,\n locationPathname,\n dataRouterContext\n ]\n );\n return navigate;\n}\nvar OutletContext = React2.createContext(null);\nfunction useOutletContext() {\n return React2.useContext(OutletContext);\n}\nfunction useOutlet(context) {\n let outlet = React2.useContext(RouteContext).outlet;\n if (outlet) {\n return /* @__PURE__ */ React2.createElement(OutletContext.Provider, { value: context }, outlet);\n }\n return outlet;\n}\nfunction useParams() {\n let { matches } = React2.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? routeMatch.params : {};\n}\nfunction useResolvedPath(to, { relative } = {}) {\n let { matches } = React2.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n let routePathnamesJson = JSON.stringify(getResolveToMatches(matches));\n return React2.useMemo(\n () => resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n relative === \"path\"\n ),\n [to, routePathnamesJson, locationPathname, relative]\n );\n}\nfunction useRoutes(routes, locationArg) {\n return useRoutesImpl(routes, locationArg);\n}\nfunction useRoutesImpl(routes, locationArg, dataRouterState, future) {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useRoutes() may be used only in the context of a <Router> component.`\n );\n let { navigator: navigator2, static: isStatic } = React2.useContext(NavigationContext);\n let { matches: parentMatches } = React2.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n if (ENABLE_DEV_WARNINGS) {\n let parentPath = parentRoute && parentRoute.path || \"\";\n warningOnce(\n parentPathname,\n !parentRoute || parentPath.endsWith(\"*\") || parentPath.endsWith(\"*?\"),\n `You rendered descendant <Routes> (or called \\`useRoutes()\\`) at \"${parentPathname}\" (under <Route path=\"${parentPath}\">) but the parent route path has no trailing \"*\". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render.\n\nPlease change the parent <Route path=\"${parentPath}\"> to <Route path=\"${parentPath === \"/\" ? \"*\" : `${parentPath}/*`}\">.`\n );\n }\n let locationFromContext = useLocation();\n let location;\n if (locationArg) {\n let parsedLocationArg = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n invariant(\n parentPathnameBase === \"/\" || parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n `When overriding the location using \\`<Routes location>\\` or \\`useRoutes(routes, location)\\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n );\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n let pathname = location.pathname || \"/\";\n let remainingPathname = pathname;\n if (parentPathnameBase !== \"/\") {\n let parentSegments = parentPathnameBase.replace(/^\\//, \"\").split(\"/\");\n let segments = pathname.replace(/^\\//, \"\").split(\"/\");\n remainingPathname = \"/\" + segments.slice(parentSegments.length).join(\"/\");\n }\n let matches = !isStatic && dataRouterState && dataRouterState.matches && dataRouterState.matches.length > 0 ? dataRouterState.matches : matchRoutes(routes, { pathname: remainingPathname });\n if (ENABLE_DEV_WARNINGS) {\n warning(\n parentRoute || matches != null,\n `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n );\n warning(\n matches == null || matches[matches.length - 1].route.element !== void 0 || matches[matches.length - 1].route.Component !== void 0 || matches[matches.length - 1].route.lazy !== void 0,\n `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" does not have an element or Component. This means it will render an <Outlet /> with a null value by default resulting in an \"empty\" page.`\n );\n }\n let renderedMatches = _renderMatches(\n matches && matches.map(\n (match) => Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator2.encodeLocation ? navigator2.encodeLocation(match.pathname).pathname : match.pathname\n ]),\n pathnameBase: match.pathnameBase === \"/\" ? parentPathnameBase : joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator2.encodeLocation ? navigator2.encodeLocation(match.pathnameBase).pathname : match.pathnameBase\n ])\n })\n ),\n parentMatches,\n dataRouterState,\n future\n );\n if (locationArg && renderedMatches) {\n return /* @__PURE__ */ React2.createElement(\n LocationContext.Provider,\n {\n value: {\n location: {\n pathname: \"/\",\n search: \"\",\n hash: \"\",\n state: null,\n key: \"default\",\n ...location\n },\n navigationType: \"POP\" /* Pop */\n }\n },\n renderedMatches\n );\n }\n return renderedMatches;\n}\nfunction DefaultErrorComponent() {\n let error = useRouteError();\n let message = isRouteErrorResponse(error) ? `${error.status} ${error.statusText}` : error instanceof Error ? error.message : JSON.stringify(error);\n let stack = error instanceof Error ? error.stack : null;\n let lightgrey = \"rgba(200,200,200, 0.5)\";\n let preStyles = { padding: \"0.5rem\", backgroundColor: lightgrey };\n let codeStyles = { padding: \"2px 4px\", backgroundColor: lightgrey };\n let devInfo = null;\n if (ENABLE_DEV_WARNINGS) {\n console.error(\n \"Error handled by React Router default ErrorBoundary:\",\n error\n );\n devInfo = /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(\"p\", null, \"\\u{1F4BF} Hey developer \\u{1F44B}\"), /* @__PURE__ */ React2.createElement(\"p\", null, \"You can provide a way better UX than this when your app throws errors by providing your own \", /* @__PURE__ */ React2.createElement(\"code\", { style: codeStyles }, \"ErrorBoundary\"), \" or\", \" \", /* @__PURE__ */ React2.createElement(\"code\", { style: codeStyles }, \"errorElement\"), \" prop on your route.\"));\n }\n return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(\"h2\", null, \"Unexpected Application Error!\"), /* @__PURE__ */ React2.createElement(\"h3\", { style: { fontStyle: \"italic\" } }, message), stack ? /* @__PURE__ */ React2.createElement(\"pre\", { style: preStyles }, stack) : null, devInfo);\n}\nvar defaultErrorElement = /* @__PURE__ */ React2.createElement(DefaultErrorComponent, null);\nvar RenderErrorBoundary = class extends React2.Component {\n constructor(props) {\n super(props);\n this.state = {\n location: props.location,\n revalidation: props.revalidation,\n error: props.error\n };\n }\n static getDerivedStateFromError(error) {\n return { error };\n }\n static getDerivedStateFromProps(props, state) {\n if (state.location !== props.location || state.revalidation !== \"idle\" && props.revalidation === \"idle\") {\n return {\n error: props.error,\n location: props.location,\n revalidation: props.revalidation\n };\n }\n return {\n error: props.error !== void 0 ? props.error : state.error,\n location: state.location,\n revalidation: props.revalidation || state.revalidation\n };\n }\n componentDidCatch(error, errorInfo) {\n console.error(\n \"React Router caught the following error during render\",\n error,\n errorInfo\n );\n }\n render() {\n return this.state.error !== void 0 ? /* @__PURE__ */ React2.createElement(RouteContext.Provider, { value: this.props.routeContext }, /* @__PURE__ */ React2.createElement(\n RouteErrorContext.Provider,\n {\n value: this.state.error,\n children: this.props.component\n }\n )) : this.props.children;\n }\n};\nfunction RenderedRoute({ routeContext, match, children }) {\n let dataRouterContext = React2.useContext(DataRouterContext);\n if (dataRouterContext && dataRouterContext.static && dataRouterContext.staticContext && (match.route.errorElement || match.route.ErrorBoundary)) {\n dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n }\n return /* @__PURE__ */ React2.createElement(RouteContext.Provider, { value: routeContext }, children);\n}\nfunction _renderMatches(matches, parentMatches = [], dataRouterState = null, future = null) {\n if (matches == null) {\n if (!dataRouterState) {\n return null;\n }\n if (dataRouterState.errors) {\n matches = dataRouterState.matches;\n } else if (parentMatches.length === 0 && !dataRouterState.initialized && dataRouterState.matches.length > 0) {\n matches = dataRouterState.matches;\n } else {\n return null;\n }\n }\n let renderedMatches = matches;\n let errors = dataRouterState?.errors;\n if (errors != null) {\n let errorIndex = renderedMatches.findIndex(\n (m) => m.route.id && errors?.[m.route.id] !== void 0\n );\n invariant(\n errorIndex >= 0,\n `Could not find a matching route for errors on route IDs: ${Object.keys(\n errors\n ).join(\",\")}`\n );\n renderedMatches = renderedMatches.slice(\n 0,\n Math.min(renderedMatches.length, errorIndex + 1)\n );\n }\n let renderFallback = false;\n let fallbackIndex = -1;\n if (dataRouterState) {\n for (let i = 0; i < renderedMatches.length; i++) {\n let match = renderedMatches[i];\n if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n fallbackIndex = i;\n }\n if (match.route.id) {\n let { loaderData, errors: errors2 } = dataRouterState;\n let needsToRunLoader = match.route.loader && !loaderData.hasOwnProperty(match.route.id) && (!errors2 || errors2[match.route.id] === void 0);\n if (match.route.lazy || needsToRunLoader) {\n renderFallback = true;\n if (fallbackIndex >= 0) {\n renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);\n } else {\n renderedMatches = [renderedMatches[0]];\n }\n break;\n }\n }\n }\n }\n return renderedMatches.reduceRight((outlet, match, index) => {\n let error;\n let shouldRenderHydrateFallback = false;\n let errorElement = null;\n let hydrateFallbackElement = null;\n if (dataRouterState) {\n error = errors && match.route.id ? errors[match.route.id] : void 0;\n errorElement = match.route.errorElement || defaultErrorElement;\n if (renderFallback) {\n if (fallbackIndex < 0 && index === 0) {\n warningOnce(\n \"route-fallback\",\n false,\n \"No `HydrateFallback` element provided to render during initial hydration\"\n );\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = null;\n } else if (fallbackIndex === index) {\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = match.route.hydrateFallbackElement || null;\n }\n }\n }\n let matches2 = parentMatches.concat(renderedMatches.slice(0, index + 1));\n let getChildren = () => {\n let children;\n if (error) {\n children = errorElement;\n } else if (shouldRenderHydrateFallback) {\n children = hydrateFallbackElement;\n } else if (match.route.Component) {\n children = /* @__PURE__ */ React2.createElement(match.route.Component, null);\n } else if (match.route.element) {\n children = match.route.element;\n } else {\n children = outlet;\n }\n return /* @__PURE__ */ React2.createElement(\n RenderedRoute,\n {\n match,\n routeContext: {\n outlet,\n matches: matches2,\n isDataRoute: dataRouterState != null\n },\n children\n }\n );\n };\n return dataRouterState && (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? /* @__PURE__ */ React2.createElement(\n RenderErrorBoundary,\n {\n location: dataRouterState.location,\n revalidation: dataRouterState.revalidation,\n component: errorElement,\n error,\n children: getChildren(),\n routeContext: { outlet: null, matches: matches2, isDataRoute: true }\n }\n ) : getChildren();\n }, null);\n}\nfunction getDataRouterConsoleError(hookName) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`;\n}\nfunction useDataRouterContext(hookName) {\n let ctx = React2.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError(hookName));\n return ctx;\n}\nfunction useDataRouterState(hookName) {\n let state = React2.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError(hookName));\n return state;\n}\nfunction useRouteContext(hookName) {\n let route = React2.useContext(RouteContext);\n invariant(route, getDataRouterConsoleError(hookName));\n return route;\n}\nfunction useCurrentRouteId(hookName) {\n let route = useRouteContext(hookName);\n let thisRoute = route.matches[route.matches.length - 1];\n invariant(\n thisRoute.route.id,\n `${hookName} can only be used on routes that contain a unique \"id\"`\n );\n return thisRoute.route.id;\n}\nfunction useRouteId() {\n return useCurrentRouteId(\"useRouteId\" /* UseRouteId */);\n}\nfunction useNavigation() {\n let state = useDataRouterState(\"useNavigation\" /* UseNavigation */);\n return state.navigation;\n}\nfunction useRevalidator() {\n let dataRouterContext = useDataRouterContext(\"useRevalidator\" /* UseRevalidator */);\n let state = useDataRouterState(\"useRevalidator\" /* UseRevalidator */);\n return React2.useMemo(\n () => ({\n async revalidate() {\n await dataRouterContext.router.revalidate();\n },\n state: state.revalidation\n }),\n [dataRouterContext.router, state.revalidation]\n );\n}\nfunction useMatches() {\n let { matches, loaderData } = useDataRouterState(\n \"useMatches\" /* UseMatches */\n );\n return React2.useMemo(\n () => matches.map((m) => convertRouteMatchToUiMatch(m, loaderData)),\n [matches, loaderData]\n );\n}\nfunction useLoaderData() {\n let state = useDataRouterState(\"useLoaderData\" /* UseLoaderData */);\n let routeId = useCurrentRouteId(\"useLoaderData\" /* UseLoaderData */);\n return state.loaderData[routeId];\n}\nfunction useRouteLoaderData(routeId) {\n let state = useDataRouterState(\"useRouteLoaderData\" /* UseRouteLoaderData */);\n return state.loaderData[routeId];\n}\nfunction useActionData() {\n let state = useDataRouterState(\"useActionData\" /* UseActionData */);\n let routeId = useCurrentRouteId(\"useLoaderData\" /* UseLoaderData */);\n return state.actionData ? state.actionData[routeId] : void 0;\n}\nfunction useRouteError() {\n let error = React2.useContext(RouteErrorContext);\n let state = useDataRouterState(\"useRouteError\" /* UseRouteError */);\n let routeId = useCurrentRouteId(\"useRouteError\" /* UseRouteError */);\n if (error !== void 0) {\n return error;\n }\n return state.errors?.[routeId];\n}\nfunction useAsyncValue() {\n let value = React2.useContext(AwaitContext);\n return value?._data;\n}\nfunction useAsyncError() {\n let value = React2.useContext(AwaitContext);\n return value?._error;\n}\nvar blockerId = 0;\nfunction useBlocker(shouldBlock) {\n let { router, basename } = useDataRouterContext(\"useBlocker\" /* UseBlocker */);\n let state = useDataRouterState(\"useBlocker\" /* UseBlocker */);\n let [blockerKey, setBlockerKey] = React2.useState(\"\");\n let blockerFunction = React2.useCallback(\n (arg) => {\n if (typeof shouldBlock !== \"function\") {\n return !!shouldBlock;\n }\n if (basename === \"/\") {\n return shouldBlock(arg);\n }\n let { currentLocation, nextLocation, historyAction } = arg;\n return shouldBlock({\n currentLocation: {\n ...currentLocation,\n pathname: stripBasename(currentLocation.pathname, basename) || currentLocation.pathname\n },\n nextLocation: {\n ...nextLocation,\n pathname: stripBasename(nextLocation.pathname, basename) || nextLocation.pathname\n },\n historyAction\n });\n },\n [basename, shouldBlock]\n );\n React2.useEffect(() => {\n let key = String(++blockerId);\n setBlockerKey(key);\n return () => router.deleteBlocker(key);\n }, [router]);\n React2.useEffect(() => {\n if (blockerKey !== \"\") {\n router.getBlocker(blockerKey, blockerFunction);\n }\n }, [router, blockerKey, blockerFunction]);\n return blockerKey && state.blockers.has(blockerKey) ? state.blockers.get(blockerKey) : IDLE_BLOCKER;\n}\nfunction useNavigateStable() {\n let { router } = useDataRouterContext(\"useNavigate\" /* UseNavigateStable */);\n let id = useCurrentRouteId(\"useNavigate\" /* UseNavigateStable */);\n let activeRef = React2.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n let navigate = React2.useCallback(\n async (to, options = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n if (!activeRef.current) return;\n if (typeof to === \"number\") {\n router.navigate(to);\n } else {\n await router.navigate(to, { fromRouteId: id, ...options });\n }\n },\n [router, id]\n );\n return navigate;\n}\nvar alreadyWarned = {};\nfunction warningOnce(key, cond, message) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n warning(false, message);\n }\n}\n\n// lib/server-runtime/warnings.ts\nvar alreadyWarned2 = {};\nfunction warnOnce(condition, message) {\n if (!condition && !alreadyWarned2[message]) {\n alreadyWarned2[message] = true;\n console.warn(message);\n }\n}\n\n// lib/components.tsx\nvar ENABLE_DEV_WARNINGS2 = true;\nfunction mapRouteProperties(route) {\n let updates = {\n // Note: this check also occurs in createRoutesFromChildren so update\n // there if you change this -- please and thank you!\n hasErrorBoundary: route.hasErrorBoundary || route.ErrorBoundary != null || route.errorElement != null\n };\n if (route.Component) {\n if (ENABLE_DEV_WARNINGS2) {\n if (route.element) {\n warning(\n false,\n \"You should not include both `Component` and `element` on your route - `Component` will be used.\"\n );\n }\n }\n Object.assign(updates, {\n element: React3.createElement(route.Component),\n Component: void 0\n });\n }\n if (route.HydrateFallback) {\n if (ENABLE_DEV_WARNINGS2) {\n if (route.hydrateFallbackElement) {\n warning(\n false,\n \"You should not include both `HydrateFallback` and `hydrateFallbackElement` on your route - `HydrateFallback` will be used.\"\n );\n }\n }\n Object.assign(updates, {\n hydrateFallbackElement: React3.createElement(route.HydrateFallback),\n HydrateFallback: void 0\n });\n }\n if (route.ErrorBoundary) {\n if (ENABLE_DEV_WARNINGS2) {\n if (route.errorElement) {\n warning(\n false,\n \"You should not include both `ErrorBoundary` and `errorElement` on your route - `ErrorBoundary` will be used.\"\n );\n }\n }\n Object.assign(updates, {\n errorElement: React3.createElement(route.ErrorBoundary),\n ErrorBoundary: void 0\n });\n }\n return updates;\n}\nfunction createMemoryRouter(routes, opts) {\n return createRouter({\n basename: opts?.basename,\n unstable_getContext: opts?.unstable_getContext,\n future: opts?.future,\n history: createMemoryHistory({\n initialEntries: opts?.initialEntries,\n initialIndex: opts?.initialIndex\n }),\n hydrationData: opts?.hydrationData,\n routes,\n mapRouteProperties,\n dataStrategy: opts?.dataStrategy,\n patchRoutesOnNavigation: opts?.patchRoutesOnNavigation\n }).initialize();\n}\nvar Deferred = class {\n constructor() {\n this.status = \"pending\";\n this.promise = new Promise((resolve, reject) => {\n this.resolve = (value) => {\n if (this.status === \"pending\") {\n this.status = \"resolved\";\n resolve(value);\n }\n };\n this.reject = (reason) => {\n if (this.status === \"pending\") {\n this.status = \"rejected\";\n reject(reason);\n }\n };\n });\n }\n};\nfunction RouterProvider({\n router,\n flushSync: reactDomFlushSyncImpl\n}) {\n let [state, setStateImpl] = React3.useState(router.state);\n let [pendingState, setPendingState] = React3.useState();\n let [vtContext, setVtContext] = React3.useState({\n isTransitioning: false\n });\n let [renderDfd, setRenderDfd] = React3.useState();\n let [transition, setTransition] = React3.useState();\n let [interruption, setInterruption] = React3.useState();\n let fetcherData = React3.useRef(/* @__PURE__ */ new Map());\n let setState = React3.useCallback(\n (newState, { deletedFetchers, flushSync, viewTransitionOpts }) => {\n newState.fetchers.forEach((fetcher, key) => {\n if (fetcher.data !== void 0) {\n fetcherData.current.set(key, fetcher.data);\n }\n });\n deletedFetchers.forEach((key) => fetcherData.current.delete(key));\n warnOnce(\n flushSync === false || reactDomFlushSyncImpl != null,\n 'You provided the `flushSync` option to a router update, but you are not using the `<RouterProvider>` from `react-router/dom` so `ReactDOM.flushSync()` is unavailable. Please update your app to `import { RouterProvider } from \"react-router/dom\"` and ensure you have `react-dom` installed as a dependency to use the `flushSync` option.'\n );\n let isViewTransitionAvailable = router.window != null && router.window.document != null && typeof router.window.document.startViewTransition === \"function\";\n warnOnce(\n viewTransitionOpts == null || isViewTransitionAvailable,\n \"You provided the `viewTransition` option to a router update, but you do not appear to be running in a DOM environment as `window.startViewTransition` is not available.\"\n );\n if (!viewTransitionOpts || !isViewTransitionAvailable) {\n if (reactDomFlushSyncImpl && flushSync) {\n reactDomFlushSyncImpl(() => setStateImpl(newState));\n } else {\n React3.startTransition(() => setStateImpl(newState));\n }\n return;\n }\n if (reactDomFlushSyncImpl && flushSync) {\n reactDomFlushSyncImpl(() => {\n if (transition) {\n renderDfd && renderDfd.resolve();\n transition.skipTransition();\n }\n setVtContext({\n isTransitioning: true,\n flushSync: true,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation\n });\n });\n let t = router.window.document.startViewTransition(() => {\n reactDomFlushSyncImpl(() => setStateImpl(newState));\n });\n t.finished.finally(() => {\n reactDomFlushSyncImpl(() => {\n setRenderDfd(void 0);\n setTransition(void 0);\n setPendingState(void 0);\n setVtContext({ isTransitioning: false });\n });\n });\n reactDomFlushSyncImpl(() => setTransition(t));\n return;\n }\n if (transition) {\n renderDfd && renderDfd.resolve();\n transition.skipTransition();\n setInterruption({\n state: newState,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation\n });\n } else {\n setPendingState(newState);\n setVtContext({\n isTransitioning: true,\n flushSync: false,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation\n });\n }\n },\n [router.window, reactDomFlushSyncImpl, transition, renderDfd]\n );\n React3.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n React3.useEffect(() => {\n if (vtContext.isTransitioning && !vtContext.flushSync) {\n setRenderDfd(new Deferred());\n }\n }, [vtContext]);\n React3.useEffect(() => {\n if (renderDfd && pendingState && router.window) {\n let newState = pendingState;\n let renderPromise = renderDfd.promise;\n let transition2 = router.window.document.startViewTransition(async () => {\n React3.startTransition(() => setStateImpl(newState));\n await renderPromise;\n });\n transition2.finished.finally(() => {\n setRenderDfd(void 0);\n setTransition(void 0);\n setPendingState(void 0);\n setVtContext({ isTransitioning: false });\n });\n setTransition(transition2);\n }\n }, [pendingState, renderDfd, router.window]);\n React3.useEffect(() => {\n if (renderDfd && pendingState && state.location.key === pendingState.location.key) {\n renderDfd.resolve();\n }\n }, [renderDfd, transition, state.location, pendingState]);\n React3.useEffect(() => {\n if (!vtContext.isTransitioning && interruption) {\n setPendingState(interruption.state);\n setVtContext({\n isTransitioning: true,\n flushSync: false,\n currentLocation: interruption.currentLocation,\n nextLocation: interruption.nextLocation\n });\n setInterruption(void 0);\n }\n }, [vtContext.isTransitioning, interruption]);\n let navigator2 = React3.useMemo(() => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: (n) => router.navigate(n),\n push: (to, state2, opts) => router.navigate(to, {\n state: state2,\n preventScrollReset: opts?.preventScrollReset\n }),\n replace: (to, state2, opts) => router.navigate(to, {\n replace: true,\n state: state2,\n preventScrollReset: opts?.preventScrollReset\n })\n };\n }, [router]);\n let basename = router.basename || \"/\";\n let dataRouterContext = React3.useMemo(\n () => ({\n router,\n navigator: navigator2,\n static: false,\n basename\n }),\n [router, navigator2, basename]\n );\n return /* @__PURE__ */ React3.createElement(React3.Fragment, null, /* @__PURE__ */ React3.createElement(DataRouterContext.Provider, { value: dataRouterContext }, /* @__PURE__ */ React3.createElement(DataRouterStateContext.Provider, { value: state }, /* @__PURE__ */ React3.createElement(FetchersContext.Provider, { value: fetcherData.current }, /* @__PURE__ */ React3.createElement(ViewTransitionContext.Provider, { value: vtContext }, /* @__PURE__ */ React3.createElement(\n Router,\n {\n basename,\n location: state.location,\n navigationType: state.historyAction,\n navigator: navigator2\n },\n /* @__PURE__ */ React3.createElement(\n MemoizedDataRoutes,\n {\n routes: router.routes,\n future: router.future,\n state\n }\n )\n ))))), null);\n}\nvar MemoizedDataRoutes = React3.memo(DataRoutes);\nfunction DataRoutes({\n routes,\n future,\n state\n}) {\n return useRoutesImpl(routes, void 0, state, future);\n}\nfunction MemoryRouter({\n basename,\n children,\n initialEntries,\n initialIndex\n}) {\n let historyRef = React3.useRef();\n if (historyRef.current == null) {\n historyRef.current = createMemoryHistory({\n initialEntries,\n initialIndex,\n v5Compat: true\n });\n }\n let history = historyRef.current;\n let [state, setStateImpl] = React3.useState({\n action: history.action,\n location: history.location\n });\n let setState = React3.useCallback(\n (newState) => {\n React3.startTransition(() => setStateImpl(newState));\n },\n [setStateImpl]\n );\n React3.useLayoutEffect(() => history.listen(setState), [history, setState]);\n return /* @__PURE__ */ React3.createElement(\n Router,\n {\n basename,\n children,\n location: state.location,\n navigationType: state.action,\n navigator: history\n }\n );\n}\nfunction Navigate({\n to,\n replace: replace2,\n state,\n relative\n}) {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of\n // the router loaded. We can help them understand how to avoid that.\n `<Navigate> may be used only in the context of a <Router> component.`\n );\n let { static: isStatic } = React3.useContext(NavigationContext);\n warning(\n !isStatic,\n `<Navigate> must not be used on the initial render in a <StaticRouter>. This is a no-op, but you should modify your code so the <Navigate> is only ever rendered in response to some user interaction or state change.`\n );\n let { matches } = React3.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n let navigate = useNavigate();\n let path = resolveTo(\n to,\n getResolveToMatches(matches),\n locationPathname,\n relative === \"path\"\n );\n let jsonPath = JSON.stringify(path);\n React3.useEffect(() => {\n navigate(JSON.parse(jsonPath), { replace: replace2, state, relative });\n }, [navigate, jsonPath, relative, replace2, state]);\n return null;\n}\nfunction Outlet(props) {\n return useOutlet(props.context);\n}\nfunction Route(_props) {\n invariant(\n false,\n `A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Please wrap your <Route> in a <Routes>.`\n );\n}\nfunction Router({\n basename: basenameProp = \"/\",\n children = null,\n location: locationProp,\n navigationType = \"POP\" /* Pop */,\n navigator: navigator2,\n static: staticProp = false\n}) {\n invariant(\n !useInRouterContext(),\n `You cannot render a <Router> inside another <Router>. You should never have more than one in your app.`\n );\n let basename = basenameProp.replace(/^\\/*/, \"/\");\n let navigationContext = React3.useMemo(\n () => ({\n basename,\n navigator: navigator2,\n static: staticProp,\n future: {}\n }),\n [basename, navigator2, staticProp]\n );\n if (typeof locationProp === \"string\") {\n locationProp = parsePath(locationProp);\n }\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n state = null,\n key = \"default\"\n } = locationProp;\n let locationContext = React3.useMemo(() => {\n let trailingPathname = stripBasename(pathname, basename);\n if (trailingPathname == null) {\n return null;\n }\n return {\n location: {\n pathname: trailingPathname,\n search,\n hash,\n state,\n key\n },\n navigationType\n };\n }, [basename, pathname, search, hash, state, key, navigationType]);\n warning(\n locationContext != null,\n `<Router basename=\"${basename}\"> is not able to match the URL \"${pathname}${search}${hash}\" because it does not start with the basename, so the <Router> won't render anything.`\n );\n if (locationContext == null) {\n return null;\n }\n return /* @__PURE__ */ React3.createElement(NavigationContext.Provider, { value: navigationContext }, /* @__PURE__ */ React3.createElement(LocationContext.Provider, { children, value: locationContext }));\n}\nfunction Routes({\n children,\n location\n}) {\n return useRoutes(createRoutesFromChildren(children), location);\n}\nfunction Await({\n children,\n errorElement,\n resolve\n}) {\n return /* @__PURE__ */ React3.createElement(AwaitErrorBoundary, { resolve, errorElement }, /* @__PURE__ */ React3.createElement(ResolveAwait, null, children));\n}\nvar AwaitErrorBoundary = class extends React3.Component {\n constructor(props) {\n super(props);\n this.state = { error: null };\n }\n static getDerivedStateFromError(error) {\n return { error };\n }\n componentDidCatch(error, errorInfo) {\n console.error(\n \"<Await> caught the following error during render\",\n error,\n errorInfo\n );\n }\n render() {\n let { children, errorElement, resolve } = this.props;\n let promise = null;\n let status = 0 /* pending */;\n if (!(resolve instanceof Promise)) {\n status = 1 /* success */;\n promise = Promise.resolve();\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n Object.defineProperty(promise, \"_data\", { get: () => resolve });\n } else if (this.state.error) {\n status = 2 /* error */;\n let renderError = this.state.error;\n promise = Promise.reject().catch(() => {\n });\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n Object.defineProperty(promise, \"_error\", { get: () => renderError });\n } else if (resolve._tracked) {\n promise = resolve;\n status = \"_error\" in promise ? 2 /* error */ : \"_data\" in promise ? 1 /* success */ : 0 /* pending */;\n } else {\n status = 0 /* pending */;\n Object.defineProperty(resolve, \"_tracked\", { get: () => true });\n promise = resolve.then(\n (data2) => Object.defineProperty(resolve, \"_data\", { get: () => data2 }),\n (error) => Object.defineProperty(resolve, \"_error\", { get: () => error })\n );\n }\n if (status === 2 /* error */ && !errorElement) {\n throw promise._error;\n }\n if (status === 2 /* error */) {\n return /* @__PURE__ */ React3.createElement(AwaitContext.Provider, { value: promise, children: errorElement });\n }\n if (status === 1 /* success */) {\n return /* @__PURE__ */ React3.createElement(AwaitContext.Provider, { value: promise, children });\n }\n throw promise;\n }\n};\nfunction ResolveAwait({\n children\n}) {\n let data2 = useAsyncValue();\n let toRender = typeof children === \"function\" ? children(data2) : children;\n return /* @__PURE__ */ React3.createElement(React3.Fragment, null, toRender);\n}\nfunction createRoutesFromChildren(children, parentPath = []) {\n let routes = [];\n React3.Children.forEach(children, (element, index) => {\n if (!React3.isValidElement(element)) {\n return;\n }\n let treePath = [...parentPath, index];\n if (element.type === React3.Fragment) {\n routes.push.apply(\n routes,\n createRoutesFromChildren(element.props.children, treePath)\n );\n return;\n }\n invariant(\n element.type === Route,\n `[${typeof element.type === \"string\" ? element.type : element.type.name}] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`\n );\n invariant(\n !element.props.index || !element.props.children,\n \"An index route cannot have child routes.\"\n );\n let route = {\n id: element.props.id || treePath.join(\"-\"),\n caseSensitive: element.props.caseSensitive,\n element: element.props.element,\n Component: element.props.Component,\n index: element.props.index,\n path: element.props.path,\n loader: element.props.loader,\n action: element.props.action,\n hydrateFallbackElement: element.props.hydrateFallbackElement,\n HydrateFallback: element.props.HydrateFallback,\n errorElement: element.props.errorElement,\n ErrorBoundary: element.props.ErrorBoundary,\n hasErrorBoundary: element.props.hasErrorBoundary === true || element.props.ErrorBoundary != null || element.props.errorElement != null,\n shouldRevalidate: element.props.shouldRevalidate,\n handle: element.props.handle,\n lazy: element.props.lazy\n };\n if (element.props.children) {\n route.children = createRoutesFromChildren(\n element.props.children,\n treePath\n );\n }\n routes.push(route);\n });\n return routes;\n}\nvar createRoutesFromElements = createRoutesFromChildren;\nfunction renderMatches(matches) {\n return _renderMatches(matches);\n}\n\n// lib/dom/lib.tsx\nimport * as React10 from \"react\";\n\n// lib/dom/dom.ts\nvar defaultMethod = \"get\";\nvar defaultEncType = \"application/x-www-form-urlencoded\";\nfunction isHtmlElement(object) {\n return object != null && typeof object.tagName === \"string\";\n}\nfunction isButtonElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\nfunction isFormElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\nfunction isInputElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\nfunction shouldProcessLinkClick(event, target) {\n return event.button === 0 && // Ignore everything but left clicks\n (!target || target === \"_self\") && // Let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event);\n}\nfunction createSearchParams(init = \"\") {\n return new URLSearchParams(\n typeof init === \"string\" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo2, key) => {\n let value = init[key];\n return memo2.concat(\n Array.isArray(value) ? value.map((v) => [key, v]) : [[key, value]]\n );\n }, [])\n );\n}\nfunction getSearchParamsForLocation(locationSearch, defaultSearchParams) {\n let searchParams = createSearchParams(locationSearch);\n if (defaultSearchParams) {\n defaultSearchParams.forEach((_, key) => {\n if (!searchParams.has(key)) {\n defaultSearchParams.getAll(key).forEach((value) => {\n searchParams.append(key, value);\n });\n }\n });\n }\n return searchParams;\n}\nvar _formDataSupportsSubmitter = null;\nfunction isFormDataSubmitterSupported() {\n if (_formDataSupportsSubmitter === null) {\n try {\n new FormData(\n document.createElement(\"form\"),\n // @ts-expect-error if FormData supports the submitter parameter, this will throw\n 0\n );\n _formDataSupportsSubmitter = false;\n } catch (e) {\n _formDataSupportsSubmitter = true;\n }\n }\n return _formDataSupportsSubmitter;\n}\nvar supportedFormEncTypes = /* @__PURE__ */ new Set([\n \"application/x-www-form-urlencoded\",\n \"multipart/form-data\",\n \"text/plain\"\n]);\nfunction getFormEncType(encType) {\n if (encType != null && !supportedFormEncTypes.has(encType)) {\n warning(\n false,\n `\"${encType}\" is not a valid \\`encType\\` for \\`<Form>\\`/\\`<fetcher.Form>\\` and will default to \"${defaultEncType}\"`\n );\n return null;\n }\n return encType;\n}\nfunction getFormSubmissionInfo(target, basename) {\n let method;\n let action;\n let encType;\n let formData;\n let body;\n if (isFormElement(target)) {\n let attr = target.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n method = target.getAttribute(\"method\") || defaultMethod;\n encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n formData = new FormData(target);\n } else if (isButtonElement(target) || isInputElement(target) && (target.type === \"submit\" || target.type === \"image\")) {\n let form = target.form;\n if (form == null) {\n throw new Error(\n `Cannot submit a <button> or <input type=\"submit\"> without a <form>`\n );\n }\n let attr = target.getAttribute(\"formaction\") || form.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n method = target.getAttribute(\"formmethod\") || form.getAttribute(\"method\") || defaultMethod;\n encType = getFormEncType(target.getAttribute(\"formenctype\")) || getFormEncType(form.getAttribute(\"enctype\")) || defaultEncType;\n formData = new FormData(form, target);\n if (!isFormDataSubmitterSupported()) {\n let { name, type, value } = target;\n if (type === \"image\") {\n let prefix = name ? `${name}.` : \"\";\n formData.append(`${prefix}x`, \"0\");\n formData.append(`${prefix}y`, \"0\");\n } else if (name) {\n formData.append(name, value);\n }\n }\n } else if (isHtmlElement(target)) {\n throw new Error(\n `Cannot submit element that is not <form>, <button>, or <input type=\"submit|image\">`\n );\n } else {\n method = defaultMethod;\n action = null;\n encType = defaultEncType;\n body = target;\n }\n if (formData && encType === \"text/plain\") {\n body = formData;\n formData = void 0;\n }\n return { action, method: method.toLowerCase(), encType, formData, body };\n}\n\n// lib/dom/ssr/components.tsx\nimport * as React9 from \"react\";\n\n// lib/dom/ssr/invariant.ts\nfunction invariant2(value, message) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\n\n// lib/dom/ssr/routeModules.ts\nasync function loadRouteModule(route, routeModulesCache) {\n if (route.id in routeModulesCache) {\n return routeModulesCache[route.id];\n }\n try {\n let routeModule = await import(\n /* @vite-ignore */\n /* webpackIgnore: true */\n route.module\n );\n routeModulesCache[route.id] = routeModule;\n return routeModule;\n } catch (error) {\n console.error(\n `Error loading route module \\`${route.module}\\`, reloading page...`\n );\n console.error(error);\n if (window.__reactRouterContext && window.__reactRouterContext.isSpaMode && // @ts-expect-error\n import.meta.hot) {\n throw error;\n }\n window.location.reload();\n return new Promise(() => {\n });\n }\n}\n\n// lib/dom/ssr/links.ts\nfunction getKeyedLinksForMatches(matches, routeModules, manifest) {\n let descriptors = matches.map((match) => {\n let module = routeModules[match.route.id];\n let route = manifest.routes[match.route.id];\n return [\n route && route.css ? route.css.map((href2) => ({ rel: \"stylesheet\", href: href2 })) : [],\n module?.links?.() || []\n ];\n }).flat(2);\n let preloads = getModuleLinkHrefs(matches, manifest);\n return dedupeLinkDescriptors(descriptors, preloads);\n}\nfunction getRouteCssDescriptors(route) {\n if (!route.css) return [];\n return route.css.map((href2) => ({ rel: \"stylesheet\", href: href2 }));\n}\nasync function prefetchRouteCss(route) {\n if (!route.css) return;\n let descriptors = getRouteCssDescriptors(route);\n await Promise.all(descriptors.map(prefetchStyleLink));\n}\nasync function prefetchStyleLinks(route, routeModule) {\n if (!route.css && !routeModule.links || !isPreloadSupported()) return;\n let descriptors = [];\n if (route.css) {\n descriptors.push(...getRouteCssDescriptors(route));\n }\n if (routeModule.links) {\n descriptors.push(...routeModule.links());\n }\n if (descriptors.length === 0) return;\n let styleLinks = [];\n for (let descriptor of descriptors) {\n if (!isPageLinkDescriptor(descriptor) && descriptor.rel === \"stylesheet\") {\n styleLinks.push({\n ...descriptor,\n rel: \"preload\",\n as: \"style\"\n });\n }\n }\n await Promise.all(styleLinks.map(prefetchStyleLink));\n}\nasync function prefetchStyleLink(descriptor) {\n return new Promise((resolve) => {\n if (descriptor.media && !window.matchMedia(descriptor.media).matches || document.querySelector(\n `link[rel=\"stylesheet\"][href=\"${descriptor.href}\"]`\n )) {\n return resolve();\n }\n let link = document.createElement(\"link\");\n Object.assign(link, descriptor);\n function removeLink() {\n if (document.head.contains(link)) {\n document.head.removeChild(link);\n }\n }\n link.onload = () => {\n removeLink();\n resolve();\n };\n link.onerror = () => {\n removeLink();\n resolve();\n };\n document.head.appendChild(link);\n });\n}\nfunction isPageLinkDescriptor(object) {\n return object != null && typeof object.page === \"string\";\n}\nfunction isHtmlLinkDescriptor(object) {\n if (object == null) {\n return false;\n }\n if (object.href == null) {\n return object.rel === \"preload\" && typeof object.imageSrcSet === \"string\" && typeof object.imageSizes === \"string\";\n }\n return typeof object.rel === \"string\" && typeof object.href === \"string\";\n}\nasync function getKeyedPrefetchLinks(matches, manifest, routeModules) {\n let links = await Promise.all(\n matches.map(async (match) => {\n let route = manifest.routes[match.route.id];\n if (route) {\n let mod = await loadRouteModule(route, routeModules);\n return mod.links ? mod.links() : [];\n }\n return [];\n })\n );\n return dedupeLinkDescriptors(\n links.flat(1).filter(isHtmlLinkDescriptor).filter((link) => link.rel === \"stylesheet\" || link.rel === \"preload\").map(\n (link) => link.rel === \"stylesheet\" ? { ...link, rel: \"prefetch\", as: \"style\" } : { ...link, rel: \"prefetch\" }\n )\n );\n}\nfunction getNewMatchesForLinks(page, nextMatches, currentMatches, manifest, location, mode) {\n let isNew = (match, index) => {\n if (!currentMatches[index]) return true;\n return match.route.id !== currentMatches[index].route.id;\n };\n let matchPathChanged = (match, index) => {\n return (\n // param change, /users/123 -> /users/456\n currentMatches[index].pathname !== match.pathname || // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n currentMatches[index].route.path?.endsWith(\"*\") && currentMatches[index].params[\"*\"] !== match.params[\"*\"]\n );\n };\n if (mode === \"assets\") {\n return nextMatches.filter(\n (match, index) => isNew(match, index) || matchPathChanged(match, index)\n );\n }\n if (mode === \"data\") {\n return nextMatches.filter((match, index) => {\n let manifestRoute = manifest.routes[match.route.id];\n if (!manifestRoute || !manifestRoute.hasLoader) {\n return false;\n }\n if (isNew(match, index) || matchPathChanged(match, index)) {\n return true;\n }\n if (match.route.shouldRevalidate) {\n let routeChoice = match.route.shouldRevalidate({\n currentUrl: new URL(\n location.pathname + location.search + location.hash,\n window.origin\n ),\n currentParams: currentMatches[0]?.params || {},\n nextUrl: new URL(page, window.origin),\n nextParams: match.params,\n defaultShouldRevalidate: true\n });\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n return true;\n });\n }\n return [];\n}\nfunction getModuleLinkHrefs(matches, manifest, { includeHydrateFallback } = {}) {\n return dedupeHrefs(\n matches.map((match) => {\n let route = manifest.routes[match.route.id];\n if (!route) return [];\n let hrefs = [route.module];\n if (route.clientActionModule) {\n hrefs = hrefs.concat(route.clientActionModule);\n }\n if (route.clientLoaderModule) {\n hrefs = hrefs.concat(route.clientLoaderModule);\n }\n if (includeHydrateFallback && route.hydrateFallbackModule) {\n hrefs = hrefs.concat(route.hydrateFallbackModule);\n }\n if (route.imports) {\n hrefs = hrefs.concat(route.imports);\n }\n return hrefs;\n }).flat(1)\n );\n}\nfunction dedupeHrefs(hrefs) {\n return [...new Set(hrefs)];\n}\nfunction sortKeys(obj) {\n let sorted = {};\n let keys = Object.keys(obj).sort();\n for (let key of keys) {\n sorted[key] = obj[key];\n }\n return sorted;\n}\nfunction dedupeLinkDescriptors(descriptors, preloads) {\n let set = /* @__PURE__ */ new Set();\n let preloadsSet = new Set(preloads);\n return descriptors.reduce((deduped, descriptor) => {\n let alreadyModulePreload = preloads && !isPageLinkDescriptor(descriptor) && descriptor.as === \"script\" && descriptor.href && preloadsSet.has(descriptor.href);\n if (alreadyModulePreload) {\n return deduped;\n }\n let key = JSON.stringify(sortKeys(descriptor));\n if (!set.has(key)) {\n set.add(key);\n deduped.push({ key, link: descriptor });\n }\n return deduped;\n }, []);\n}\nvar _isPreloadSupported;\nfunction isPreloadSupported() {\n if (_isPreloadSupported !== void 0) {\n return _isPreloadSupported;\n }\n let el = document.createElement(\"link\");\n _isPreloadSupported = el.relList.supports(\"preload\");\n el = null;\n return _isPreloadSupported;\n}\n\n// lib/dom/ssr/markup.ts\nvar ESCAPE_LOOKUP = {\n \"&\": \"\\\\u0026\",\n \">\": \"\\\\u003e\",\n \"<\": \"\\\\u003c\",\n \"\\u2028\": \"\\\\u2028\",\n \"\\u2029\": \"\\\\u2029\"\n};\nvar ESCAPE_REGEX = /[&><\\u2028\\u2029]/g;\nfunction escapeHtml(html) {\n return html.replace(ESCAPE_REGEX, (match) => ESCAPE_LOOKUP[match]);\n}\nfunction createHtml(html) {\n return { __html: html };\n}\n\n// lib/dom/ssr/single-fetch.tsx\nimport * as React4 from \"react\";\nimport { decode } from \"turbo-stream\";\n\n// lib/dom/ssr/data.ts\nasync function createRequestInit(request) {\n let init = { signal: request.signal };\n if (request.method !== \"GET\") {\n init.method = request.method;\n let contentType = request.headers.get(\"Content-Type\");\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n init.headers = { \"Content-Type\": contentType };\n init.body = JSON.stringify(await request.json());\n } else if (contentType && /\\btext\\/plain\\b/.test(contentType)) {\n init.headers = { \"Content-Type\": contentType };\n init.body = await request.text();\n } else if (contentType && /\\bapplication\\/x-www-form-urlencoded\\b/.test(contentType)) {\n init.body = new URLSearchParams(await request.text());\n } else {\n init.body = await request.formData();\n }\n }\n return init;\n}\n\n// lib/dom/ssr/single-fetch.tsx\nvar SingleFetchRedirectSymbol = Symbol(\"SingleFetchRedirect\");\nfunction StreamTransfer({\n context,\n identifier,\n reader,\n textDecoder,\n nonce\n}) {\n if (!context.renderMeta || !context.renderMeta.didRenderScripts) {\n return null;\n }\n if (!context.renderMeta.streamCache) {\n context.renderMeta.streamCache = {};\n }\n let { streamCache } = context.renderMeta;\n let promise = streamCache[identifier];\n if (!promise) {\n promise = streamCache[identifier] = reader.read().then((result) => {\n streamCache[identifier].result = {\n done: result.done,\n value: textDecoder.decode(result.value, { stream: true })\n };\n }).catch((e) => {\n streamCache[identifier].error = e;\n });\n }\n if (promise.error) {\n throw promise.error;\n }\n if (promise.result === void 0) {\n throw promise;\n }\n let { done, value } = promise.result;\n let scriptTag = value ? /* @__PURE__ */ React4.createElement(\n \"script\",\n {\n nonce,\n dangerouslySetInnerHTML: {\n __html: `window.__reactRouterContext.streamController.enqueue(${escapeHtml(\n JSON.stringify(value)\n )});`\n }\n }\n ) : null;\n if (done) {\n return /* @__PURE__ */ React4.createElement(React4.Fragment, null, scriptTag, /* @__PURE__ */ React4.createElement(\n \"script\",\n {\n nonce,\n dangerouslySetInnerHTML: {\n __html: `window.__reactRouterContext.streamController.close();`\n }\n }\n ));\n } else {\n return /* @__PURE__ */ React4.createElement(React4.Fragment, null, scriptTag, /* @__PURE__ */ React4.createElement(React4.Suspense, null, /* @__PURE__ */ React4.createElement(\n StreamTransfer,\n {\n context,\n identifier: identifier + 1,\n reader,\n textDecoder,\n nonce\n }\n )));\n }\n}\nfunction handleMiddlewareError(error, routeId) {\n return { [routeId]: { type: \"error\", result: error } };\n}\nfunction getSingleFetchDataStrategy(manifest, routeModules, ssr, basename, getRouter) {\n return async (args) => {\n let { request, matches, fetcherKey } = args;\n if (request.method !== \"GET\") {\n return runMiddlewarePipeline(\n args,\n false,\n () => singleFetchActionStrategy(request, matches, basename),\n handleMiddlewareError\n );\n }\n if (!ssr) {\n let foundRevalidatingServerLoader = matches.some(\n (m) => m.shouldLoad && manifest.routes[m.route.id]?.hasLoader && !manifest.routes[m.route.id]?.hasClientLoader\n );\n if (!foundRevalidatingServerLoader) {\n return runMiddlewarePipeline(\n args,\n false,\n () => nonSsrStrategy(manifest, request, matches, basename),\n handleMiddlewareError\n );\n }\n }\n if (fetcherKey) {\n return runMiddlewarePipeline(\n args,\n false,\n () => singleFetchLoaderFetcherStrategy(request, matches, basename),\n handleMiddlewareError\n );\n }\n return runMiddlewarePipeline(\n args,\n false,\n () => singleFetchLoaderNavigationStrategy(\n manifest,\n routeModules,\n ssr,\n getRouter(),\n request,\n matches,\n basename\n ),\n handleMiddlewareError\n );\n };\n}\nasync function singleFetchActionStrategy(request, matches, basename) {\n let actionMatch = matches.find((m) => m.shouldLoad);\n invariant2(actionMatch, \"No action match found\");\n let actionStatus = void 0;\n let result = await actionMatch.resolve(async (handler) => {\n let result2 = await handler(async () => {\n let url = singleFetchUrl(request.url, basename);\n let init = await createRequestInit(request);\n let { data: data2, status } = await fetchAndDecode(url, init);\n actionStatus = status;\n return unwrapSingleFetchResult(\n data2,\n actionMatch.route.id\n );\n });\n return result2;\n });\n if (isResponse(result.result) || isRouteErrorResponse(result.result)) {\n return { [actionMatch.route.id]: result };\n }\n return {\n [actionMatch.route.id]: {\n type: result.type,\n result: data(result.result, actionStatus)\n }\n };\n}\nasync function nonSsrStrategy(manifest, request, matches, basename) {\n let matchesToLoad = matches.filter((m) => m.shouldLoad);\n let url = stripIndexParam(singleFetchUrl(request.url, basename));\n let init = await createRequestInit(request);\n let results = {};\n await Promise.all(\n matchesToLoad.map(\n (m) => m.resolve(async (handler) => {\n try {\n let result = manifest.routes[m.route.id]?.hasClientLoader ? await fetchSingleLoader(handler, url, init, m.route.id) : await handler();\n results[m.route.id] = { type: \"data\", result };\n } catch (e) {\n results[m.route.id] = { type: \"error\", result: e };\n }\n })\n )\n );\n return results;\n}\nasync function singleFetchLoaderNavigationStrategy(manifest, routeModules, ssr, router, request, matches, basename) {\n let routesParams = /* @__PURE__ */ new Set();\n let foundOptOutRoute = false;\n let routeDfds = matches.map(() => createDeferred2());\n let routesLoadedPromise = Promise.all(routeDfds.map((d) => d.promise));\n let singleFetchDfd = createDeferred2();\n let url = stripIndexParam(singleFetchUrl(request.url, basename));\n let init = await createRequestInit(request);\n let results = {};\n let resolvePromise = Promise.all(\n matches.map(\n async (m, i) => m.resolve(async (handler) => {\n routeDfds[i].resolve();\n let manifestRoute = manifest.routes[m.route.id];\n if (!m.shouldLoad) {\n if (!router.state.initialized) {\n return;\n }\n if (m.route.id in router.state.loaderData && manifestRoute && m.route.shouldRevalidate) {\n if (manifestRoute.hasLoader) {\n foundOptOutRoute = true;\n }\n return;\n }\n }\n if (manifestRoute && manifestRoute.hasClientLoader) {\n if (manifestRoute.hasLoader) {\n foundOptOutRoute = true;\n }\n try {\n let result = await fetchSingleLoader(\n handler,\n url,\n init,\n m.route.id\n );\n results[m.route.id] = { type: \"data\", result };\n } catch (e) {\n results[m.route.id] = { type: \"error\", result: e };\n }\n return;\n }\n if (manifestRoute && manifestRoute.hasLoader) {\n routesParams.add(m.route.id);\n }\n try {\n let result = await handler(async () => {\n let data2 = await singleFetchDfd.promise;\n return unwrapSingleFetchResults(data2, m.route.id);\n });\n results[m.route.id] = {\n type: \"data\",\n result\n };\n } catch (e) {\n results[m.route.id] = {\n type: \"error\",\n result: e\n };\n }\n })\n )\n );\n await routesLoadedPromise;\n if ((!router.state.initialized || routesParams.size === 0) && !window.__reactRouterHdrActive) {\n singleFetchDfd.resolve({});\n } else {\n try {\n if (ssr && foundOptOutRoute && routesParams.size > 0) {\n url.searchParams.set(\n \"_routes\",\n matches.filter((m) => routesParams.has(m.route.id)).map((m) => m.route.id).join(\",\")\n );\n }\n let data2 = await fetchAndDecode(url, init);\n singleFetchDfd.resolve(data2.data);\n } catch (e) {\n singleFetchDfd.reject(e);\n }\n }\n await resolvePromise;\n return results;\n}\nasync function singleFetchLoaderFetcherStrategy(request, matches, basename) {\n let fetcherMatch = matches.find((m) => m.shouldLoad);\n invariant2(fetcherMatch, \"No fetcher match found\");\n let result = await fetcherMatch.resolve(async (handler) => {\n let url = stripIndexParam(singleFetchUrl(request.url, basename));\n let init = await createRequestInit(request);\n return fetchSingleLoader(handler, url, init, fetcherMatch.route.id);\n });\n return { [fetcherMatch.route.id]: result };\n}\nfunction fetchSingleLoader(handler, url, init, routeId) {\n return handler(async () => {\n let singleLoaderUrl = new URL(url);\n singleLoaderUrl.searchParams.set(\"_routes\", routeId);\n let { data: data2 } = await fetchAndDecode(singleLoaderUrl, init);\n return unwrapSingleFetchResults(data2, routeId);\n });\n}\nfunction stripIndexParam(url) {\n let indexValues = url.searchParams.getAll(\"index\");\n url.searchParams.delete(\"index\");\n let indexValuesToKeep = [];\n for (let indexValue of indexValues) {\n if (indexValue) {\n indexValuesToKeep.push(indexValue);\n }\n }\n for (let toKeep of indexValuesToKeep) {\n url.searchParams.append(\"index\", toKeep);\n }\n return url;\n}\nfunction singleFetchUrl(reqUrl, basename) {\n let url = typeof reqUrl === \"string\" ? new URL(\n reqUrl,\n // This can be called during the SSR flow via PrefetchPageLinksImpl so\n // don't assume window is available\n typeof window === \"undefined\" ? \"server://singlefetch/\" : window.location.origin\n ) : reqUrl;\n if (url.pathname === \"/\") {\n url.pathname = \"_root.data\";\n } else if (basename && stripBasename(url.pathname, basename) === \"/\") {\n url.pathname = `${basename.replace(/\\/$/, \"\")}/_root.data`;\n } else {\n url.pathname = `${url.pathname.replace(/\\/$/, \"\")}.data`;\n }\n return url;\n}\nasync function fetchAndDecode(url, init) {\n let res = await fetch(url, init);\n if (res.status === 404 && !res.headers.has(\"X-Remix-Response\")) {\n throw new ErrorResponseImpl(404, \"Not Found\", true);\n }\n const NO_BODY_STATUS_CODES2 = /* @__PURE__ */ new Set([100, 101, 204, 205]);\n if (NO_BODY_STATUS_CODES2.has(res.status)) {\n if (!init.method || init.method === \"GET\") {\n return { status: res.status, data: {} };\n } else {\n return { status: res.status, data: { data: void 0 } };\n }\n }\n invariant2(res.body, \"No response body to decode\");\n try {\n let decoded = await decodeViaTurboStream(res.body, window);\n return { status: res.status, data: decoded.value };\n } catch (e) {\n throw new Error(\"Unable to decode turbo-stream response\");\n }\n}\nfunction decodeViaTurboStream(body, global2) {\n return decode(body, {\n plugins: [\n (type, ...rest) => {\n if (type === \"SanitizedError\") {\n let [name, message, stack] = rest;\n let Constructor = Error;\n if (name && name in global2 && typeof global2[name] === \"function\") {\n Constructor = global2[name];\n }\n let error = new Constructor(message);\n error.stack = stack;\n return { value: error };\n }\n if (type === \"ErrorResponse\") {\n let [data2, status, statusText] = rest;\n return {\n value: new ErrorResponseImpl(status, statusText, data2)\n };\n }\n if (type === \"SingleFetchRedirect\") {\n return { value: { [SingleFetchRedirectSymbol]: rest[0] } };\n }\n if (type === \"SingleFetchClassInstance\") {\n return { value: rest[0] };\n }\n if (type === \"SingleFetchFallback\") {\n return { value: void 0 };\n }\n }\n ]\n });\n}\nfunction unwrapSingleFetchResults(results, routeId) {\n let redirect2 = results[SingleFetchRedirectSymbol];\n if (redirect2) {\n return unwrapSingleFetchResult(redirect2, routeId);\n }\n return results[routeId] !== void 0 ? unwrapSingleFetchResult(results[routeId], routeId) : null;\n}\nfunction unwrapSingleFetchResult(result, routeId) {\n if (\"error\" in result) {\n throw result.error;\n } else if (\"redirect\" in result) {\n let headers = {};\n if (result.revalidate) {\n headers[\"X-Remix-Revalidate\"] = \"yes\";\n }\n if (result.reload) {\n headers[\"X-Remix-Reload-Document\"] = \"yes\";\n }\n if (result.replace) {\n headers[\"X-Remix-Replace\"] = \"yes\";\n }\n throw redirect(result.redirect, { status: result.status, headers });\n } else if (\"data\" in result) {\n return result.data;\n } else {\n throw new Error(`No response found for routeId \"${routeId}\"`);\n }\n}\nfunction createDeferred2() {\n let resolve;\n let reject;\n let promise = new Promise((res, rej) => {\n resolve = async (val) => {\n res(val);\n try {\n await promise;\n } catch (e) {\n }\n };\n reject = async (error) => {\n rej(error);\n try {\n await promise;\n } catch (e) {\n }\n };\n });\n return {\n promise,\n //@ts-ignore\n resolve,\n //@ts-ignore\n reject\n };\n}\n\n// lib/dom/ssr/fog-of-war.ts\nimport * as React8 from \"react\";\n\n// lib/dom/ssr/routes.tsx\nimport * as React7 from \"react\";\n\n// lib/dom/ssr/errorBoundaries.tsx\nimport * as React5 from \"react\";\nvar RemixErrorBoundary = class extends React5.Component {\n constructor(props) {\n super(props);\n this.state = { error: props.error || null, location: props.location };\n }\n static getDerivedStateFromError(error) {\n return { error };\n }\n static getDerivedStateFromProps(props, state) {\n if (state.location !== props.location) {\n return { error: props.error || null, location: props.location };\n }\n return { error: props.error || state.error, location: state.location };\n }\n render() {\n if (this.state.error) {\n return /* @__PURE__ */ React5.createElement(\n RemixRootDefaultErrorBoundary,\n {\n error: this.state.error,\n isOutsideRemixApp: true\n }\n );\n } else {\n return this.props.children;\n }\n }\n};\nfunction RemixRootDefaultErrorBoundary({\n error,\n isOutsideRemixApp\n}) {\n console.error(error);\n let heyDeveloper = /* @__PURE__ */ React5.createElement(\n \"script\",\n {\n dangerouslySetInnerHTML: {\n __html: `\n console.log(\n \"\\u{1F4BF} Hey developer \\u{1F44B}. You can provide a way better UX than this when your app throws errors. Check out https://remix.run/guides/errors for more information.\"\n );\n `\n }\n }\n );\n if (isRouteErrorResponse(error)) {\n return /* @__PURE__ */ React5.createElement(BoundaryShell, { title: \"Unhandled Thrown Response!\" }, /* @__PURE__ */ React5.createElement(\"h1\", { style: { fontSize: \"24px\" } }, error.status, \" \", error.statusText), heyDeveloper);\n }\n let errorInstance;\n if (error instanceof Error) {\n errorInstance = error;\n } else {\n let errorString = error == null ? \"Unknown Error\" : typeof error === \"object\" && \"toString\" in error ? error.toString() : JSON.stringify(error);\n errorInstance = new Error(errorString);\n }\n return /* @__PURE__ */ React5.createElement(\n BoundaryShell,\n {\n title: \"Application Error!\",\n isOutsideRemixApp\n },\n /* @__PURE__ */ React5.createElement(\"h1\", { style: { fontSize: \"24px\" } }, \"Application Error\"),\n /* @__PURE__ */ React5.createElement(\n \"pre\",\n {\n style: {\n padding: \"2rem\",\n background: \"hsla(10, 50%, 50%, 0.1)\",\n color: \"red\",\n overflow: \"auto\"\n }\n },\n errorInstance.stack\n ),\n heyDeveloper\n );\n}\nfunction BoundaryShell({\n title,\n renderScripts,\n isOutsideRemixApp,\n children\n}) {\n let { routeModules } = useFrameworkContext();\n if (routeModules.root?.Layout && !isOutsideRemixApp) {\n return children;\n }\n return /* @__PURE__ */ React5.createElement(\"html\", { lang: \"en\" }, /* @__PURE__ */ React5.createElement(\"head\", null, /* @__PURE__ */ React5.createElement(\"meta\", { charSet: \"utf-8\" }), /* @__PURE__ */ React5.createElement(\n \"meta\",\n {\n name: \"viewport\",\n content: \"width=device-width,initial-scale=1,viewport-fit=cover\"\n }\n ), /* @__PURE__ */ React5.createElement(\"title\", null, title)), /* @__PURE__ */ React5.createElement(\"body\", null, /* @__PURE__ */ React5.createElement(\"main\", { style: { fontFamily: \"system-ui, sans-serif\", padding: \"2rem\" } }, children, renderScripts ? /* @__PURE__ */ React5.createElement(Scripts, null) : null)));\n}\n\n// lib/dom/ssr/fallback.tsx\nimport * as React6 from \"react\";\nfunction RemixRootDefaultHydrateFallback() {\n return /* @__PURE__ */ React6.createElement(BoundaryShell, { title: \"Loading...\", renderScripts: true }, /* @__PURE__ */ React6.createElement(\n \"script\",\n {\n dangerouslySetInnerHTML: {\n __html: `\n console.log(\n \"\\u{1F4BF} Hey developer \\u{1F44B}. You can provide a way better UX than this \" +\n \"when your app is loading JS modules and/or running \\`clientLoader\\` \" +\n \"functions. Check out https://remix.run/route/hydrate-fallback \" +\n \"for more information.\"\n );\n `\n }\n }\n ));\n}\n\n// lib/dom/ssr/routes.tsx\nfunction groupRoutesByParentId(manifest) {\n let routes = {};\n Object.values(manifest).forEach((route) => {\n if (route) {\n let parentId = route.parentId || \"\";\n if (!routes[parentId]) {\n routes[parentId] = [];\n }\n routes[parentId].push(route);\n }\n });\n return routes;\n}\nfunction getRouteComponents(route, routeModule, isSpaMode) {\n let Component4 = getRouteModuleComponent(routeModule);\n let HydrateFallback = routeModule.HydrateFallback && (!isSpaMode || route.id === \"root\") ? routeModule.HydrateFallback : route.id === \"root\" ? RemixRootDefaultHydrateFallback : void 0;\n let ErrorBoundary = routeModule.ErrorBoundary ? routeModule.ErrorBoundary : route.id === \"root\" ? () => /* @__PURE__ */ React7.createElement(RemixRootDefaultErrorBoundary, { error: useRouteError() }) : void 0;\n if (route.id === \"root\" && routeModule.Layout) {\n return {\n ...Component4 ? {\n element: /* @__PURE__ */ React7.createElement(routeModule.Layout, null, /* @__PURE__ */ React7.createElement(Component4, null))\n } : { Component: Component4 },\n ...ErrorBoundary ? {\n errorElement: /* @__PURE__ */ React7.createElement(routeModule.Layout, null, /* @__PURE__ */ React7.createElement(ErrorBoundary, null))\n } : { ErrorBoundary },\n ...HydrateFallback ? {\n hydrateFallbackElement: /* @__PURE__ */ React7.createElement(routeModule.Layout, null, /* @__PURE__ */ React7.createElement(HydrateFallback, null))\n } : { HydrateFallback }\n };\n }\n return { Component: Component4, ErrorBoundary, HydrateFallback };\n}\nfunction createServerRoutes(manifest, routeModules, future, isSpaMode, parentId = \"\", routesByParentId = groupRoutesByParentId(manifest), spaModeLazyPromise = Promise.resolve({ Component: () => null })) {\n return (routesByParentId[parentId] || []).map((route) => {\n let routeModule = routeModules[route.id];\n invariant2(\n routeModule,\n \"No `routeModule` available to create server routes\"\n );\n let dataRoute = {\n ...getRouteComponents(route, routeModule, isSpaMode),\n caseSensitive: route.caseSensitive,\n id: route.id,\n index: route.index,\n path: route.path,\n handle: routeModule.handle,\n // For SPA Mode, all routes are lazy except root. However we tell the\n // router root is also lazy here too since we don't need a full\n // implementation - we just need a `lazy` prop to tell the RR rendering\n // where to stop which is always at the root route in SPA mode\n lazy: isSpaMode ? () => spaModeLazyPromise : void 0,\n // For partial hydration rendering, we need to indicate when the route\n // has a loader/clientLoader, but it won't ever be called during the static\n // render, so just give it a no-op function so we can render down to the\n // proper fallback\n loader: route.hasLoader || route.hasClientLoader ? () => null : void 0\n // We don't need middleware/action/shouldRevalidate on these routes since\n // they're for a static render\n };\n let children = createServerRoutes(\n manifest,\n routeModules,\n future,\n isSpaMode,\n route.id,\n routesByParentId,\n spaModeLazyPromise\n );\n if (children.length > 0) dataRoute.children = children;\n return dataRoute;\n });\n}\nfunction createClientRoutesWithHMRRevalidationOptOut(needsRevalidation, manifest, routeModulesCache, initialState, ssr, isSpaMode) {\n return createClientRoutes(\n manifest,\n routeModulesCache,\n initialState,\n ssr,\n isSpaMode,\n \"\",\n groupRoutesByParentId(manifest),\n needsRevalidation\n );\n}\nfunction preventInvalidServerHandlerCall(type, route) {\n if (type === \"loader\" && !route.hasLoader || type === \"action\" && !route.hasAction) {\n let fn = type === \"action\" ? \"serverAction()\" : \"serverLoader()\";\n let msg = `You are trying to call ${fn} on a route that does not have a server ${type} (routeId: \"${route.id}\")`;\n console.error(msg);\n throw new ErrorResponseImpl(400, \"Bad Request\", new Error(msg), true);\n }\n}\nfunction noActionDefinedError(type, routeId) {\n let article = type === \"clientAction\" ? \"a\" : \"an\";\n let msg = `Route \"${routeId}\" does not have ${article} ${type}, but you are trying to submit to it. To fix this, please add ${article} \\`${type}\\` function to the route`;\n console.error(msg);\n throw new ErrorResponseImpl(405, \"Method Not Allowed\", new Error(msg), true);\n}\nfunction createClientRoutes(manifest, routeModulesCache, initialState, ssr, isSpaMode, parentId = \"\", routesByParentId = groupRoutesByParentId(manifest), needsRevalidation) {\n return (routesByParentId[parentId] || []).map((route) => {\n let routeModule = routeModulesCache[route.id];\n function fetchServerHandler(singleFetch) {\n invariant2(\n typeof singleFetch === \"function\",\n \"No single fetch function available for route handler\"\n );\n return singleFetch();\n }\n function fetchServerLoader(singleFetch) {\n if (!route.hasLoader) return Promise.resolve(null);\n return fetchServerHandler(singleFetch);\n }\n function fetchServerAction(singleFetch) {\n if (!route.hasAction) {\n throw noActionDefinedError(\"action\", route.id);\n }\n return fetchServerHandler(singleFetch);\n }\n function prefetchModule(modulePath) {\n import(\n /* @vite-ignore */\n /* webpackIgnore: true */\n modulePath\n );\n }\n function prefetchRouteModuleChunks(route2) {\n if (route2.clientActionModule) {\n prefetchModule(route2.clientActionModule);\n }\n if (route2.clientLoaderModule) {\n prefetchModule(route2.clientLoaderModule);\n }\n }\n async function prefetchStylesAndCallHandler(handler) {\n let cachedModule = routeModulesCache[route.id];\n let linkPrefetchPromise = cachedModule ? prefetchStyleLinks(route, cachedModule) : Promise.resolve();\n try {\n return handler();\n } finally {\n await linkPrefetchPromise;\n }\n }\n let dataRoute = {\n id: route.id,\n index: route.index,\n path: route.path\n };\n if (routeModule) {\n Object.assign(dataRoute, {\n ...dataRoute,\n ...getRouteComponents(route, routeModule, isSpaMode),\n unstable_middleware: routeModule.unstable_clientMiddleware,\n handle: routeModule.handle,\n shouldRevalidate: getShouldRevalidateFunction(\n routeModule,\n route,\n ssr,\n needsRevalidation\n )\n });\n let hasInitialData = initialState && initialState.loaderData && route.id in initialState.loaderData;\n let initialData = hasInitialData ? initialState?.loaderData?.[route.id] : void 0;\n let hasInitialError = initialState && initialState.errors && route.id in initialState.errors;\n let initialError = hasInitialError ? initialState?.errors?.[route.id] : void 0;\n let isHydrationRequest = needsRevalidation == null && (routeModule.clientLoader?.hydrate === true || !route.hasLoader);\n dataRoute.loader = async ({ request, params, context }, singleFetch) => {\n try {\n let result = await prefetchStylesAndCallHandler(async () => {\n invariant2(\n routeModule,\n \"No `routeModule` available for critical-route loader\"\n );\n if (!routeModule.clientLoader) {\n return fetchServerLoader(singleFetch);\n }\n return routeModule.clientLoader({\n request,\n params,\n context,\n async serverLoader() {\n preventInvalidServerHandlerCall(\"loader\", route);\n if (isHydrationRequest) {\n if (hasInitialData) {\n return initialData;\n }\n if (hasInitialError) {\n throw initialError;\n }\n }\n return fetchServerLoader(singleFetch);\n }\n });\n });\n return result;\n } finally {\n isHydrationRequest = false;\n }\n };\n dataRoute.loader.hydrate = shouldHydrateRouteLoader(\n route,\n routeModule,\n isSpaMode\n );\n dataRoute.action = ({ request, params, context }, singleFetch) => {\n return prefetchStylesAndCallHandler(async () => {\n invariant2(\n routeModule,\n \"No `routeModule` available for critical-route action\"\n );\n if (!routeModule.clientAction) {\n if (isSpaMode) {\n throw noActionDefinedError(\"clientAction\", route.id);\n }\n return fetchServerAction(singleFetch);\n }\n return routeModule.clientAction({\n request,\n params,\n context,\n async serverAction() {\n preventInvalidServerHandlerCall(\"action\", route);\n return fetchServerAction(singleFetch);\n }\n });\n });\n };\n } else {\n if (!route.hasClientLoader) {\n dataRoute.loader = (_, singleFetch) => prefetchStylesAndCallHandler(() => {\n return fetchServerLoader(singleFetch);\n });\n } else if (route.clientLoaderModule) {\n dataRoute.loader = async (args, singleFetch) => {\n invariant2(route.clientLoaderModule);\n let { clientLoader } = await import(\n /* @vite-ignore */\n /* webpackIgnore: true */\n route.clientLoaderModule\n );\n return clientLoader({\n ...args,\n async serverLoader() {\n preventInvalidServerHandlerCall(\"loader\", route);\n return fetchServerLoader(singleFetch);\n }\n });\n };\n }\n if (!route.hasClientAction) {\n dataRoute.action = (_, singleFetch) => prefetchStylesAndCallHandler(() => {\n if (isSpaMode) {\n throw noActionDefinedError(\"clientAction\", route.id);\n }\n return fetchServerAction(singleFetch);\n });\n } else if (route.clientActionModule) {\n dataRoute.action = async (args, singleFetch) => {\n invariant2(route.clientActionModule);\n prefetchRouteModuleChunks(route);\n let { clientAction } = await import(\n /* @vite-ignore */\n /* webpackIgnore: true */\n route.clientActionModule\n );\n return clientAction({\n ...args,\n async serverAction() {\n preventInvalidServerHandlerCall(\"action\", route);\n return fetchServerAction(singleFetch);\n }\n });\n };\n }\n dataRoute.lazy = async () => {\n if (route.clientLoaderModule || route.clientActionModule) {\n await new Promise((resolve) => setTimeout(resolve, 0));\n }\n let modPromise = loadRouteModuleWithBlockingLinks(\n route,\n routeModulesCache\n );\n prefetchRouteModuleChunks(route);\n let mod = await modPromise;\n let lazyRoute = { ...mod };\n if (mod.clientLoader) {\n let clientLoader = mod.clientLoader;\n lazyRoute.loader = (args, singleFetch) => clientLoader({\n ...args,\n async serverLoader() {\n preventInvalidServerHandlerCall(\"loader\", route);\n return fetchServerLoader(singleFetch);\n }\n });\n }\n if (mod.clientAction) {\n let clientAction = mod.clientAction;\n lazyRoute.action = (args, singleFetch) => clientAction({\n ...args,\n async serverAction() {\n preventInvalidServerHandlerCall(\"action\", route);\n return fetchServerAction(singleFetch);\n }\n });\n }\n return {\n ...lazyRoute.loader ? { loader: lazyRoute.loader } : {},\n ...lazyRoute.action ? { action: lazyRoute.action } : {},\n unstable_middleware: mod.unstable_clientMiddleware,\n hasErrorBoundary: lazyRoute.hasErrorBoundary,\n shouldRevalidate: getShouldRevalidateFunction(\n lazyRoute,\n route,\n ssr,\n needsRevalidation\n ),\n handle: lazyRoute.handle,\n // No need to wrap these in layout since the root route is never\n // loaded via route.lazy()\n Component: lazyRoute.Component,\n ErrorBoundary: lazyRoute.ErrorBoundary\n };\n };\n }\n let children = createClientRoutes(\n manifest,\n routeModulesCache,\n initialState,\n ssr,\n isSpaMode,\n route.id,\n routesByParentId,\n needsRevalidation\n );\n if (children.length > 0) dataRoute.children = children;\n return dataRoute;\n });\n}\nfunction getShouldRevalidateFunction(route, manifestRoute, ssr, needsRevalidation) {\n if (needsRevalidation) {\n return wrapShouldRevalidateForHdr(\n manifestRoute.id,\n route.shouldRevalidate,\n needsRevalidation\n );\n }\n if (!ssr && manifestRoute.hasLoader && !manifestRoute.hasClientLoader) {\n if (route.shouldRevalidate) {\n let fn = route.shouldRevalidate;\n return (opts) => fn({ ...opts, defaultShouldRevalidate: false });\n } else {\n return () => false;\n }\n }\n if (ssr && route.shouldRevalidate) {\n let fn = route.shouldRevalidate;\n return (opts) => fn({ ...opts, defaultShouldRevalidate: true });\n }\n return route.shouldRevalidate;\n}\nfunction wrapShouldRevalidateForHdr(routeId, routeShouldRevalidate, needsRevalidation) {\n let handledRevalidation = false;\n return (arg) => {\n if (!handledRevalidation) {\n handledRevalidation = true;\n return needsRevalidation.has(routeId);\n }\n return routeShouldRevalidate ? routeShouldRevalidate(arg) : arg.defaultShouldRevalidate;\n };\n}\nasync function loadRouteModuleWithBlockingLinks(route, routeModules) {\n let routeModulePromise = loadRouteModule(route, routeModules);\n let prefetchRouteCssPromise = prefetchRouteCss(route);\n let routeModule = await routeModulePromise;\n await Promise.all([\n prefetchRouteCssPromise,\n prefetchStyleLinks(route, routeModule)\n ]);\n return {\n Component: getRouteModuleComponent(routeModule),\n ErrorBoundary: routeModule.ErrorBoundary,\n unstable_clientMiddleware: routeModule.unstable_clientMiddleware,\n clientAction: routeModule.clientAction,\n clientLoader: routeModule.clientLoader,\n handle: routeModule.handle,\n links: routeModule.links,\n meta: routeModule.meta,\n shouldRevalidate: routeModule.shouldRevalidate\n };\n}\nfunction getRouteModuleComponent(routeModule) {\n if (routeModule.default == null) return void 0;\n let isEmptyObject = typeof routeModule.default === \"object\" && Object.keys(routeModule.default).length === 0;\n if (!isEmptyObject) {\n return routeModule.default;\n }\n}\nfunction shouldHydrateRouteLoader(route, routeModule, isSpaMode) {\n return isSpaMode && route.id !== \"root\" || routeModule.clientLoader != null && (routeModule.clientLoader.hydrate === true || route.hasLoader !== true);\n}\n\n// lib/dom/ssr/fog-of-war.ts\nvar nextPaths = /* @__PURE__ */ new Set();\nvar discoveredPathsMaxSize = 1e3;\nvar discoveredPaths = /* @__PURE__ */ new Set();\nvar URL_LIMIT = 7680;\nfunction isFogOfWarEnabled(ssr) {\n return ssr === true;\n}\nfunction getPartialManifest(manifest, router) {\n let routeIds = new Set(router.state.matches.map((m) => m.route.id));\n let segments = router.state.location.pathname.split(\"/\").filter(Boolean);\n let paths = [\"/\"];\n segments.pop();\n while (segments.length > 0) {\n paths.push(`/${segments.join(\"/\")}`);\n segments.pop();\n }\n paths.forEach((path) => {\n let matches = matchRoutes(router.routes, path, router.basename);\n if (matches) {\n matches.forEach((m) => routeIds.add(m.route.id));\n }\n });\n let initialRoutes = [...routeIds].reduce(\n (acc, id) => Object.assign(acc, { [id]: manifest.routes[id] }),\n {}\n );\n return {\n ...manifest,\n routes: initialRoutes\n };\n}\nfunction getPatchRoutesOnNavigationFunction(manifest, routeModules, ssr, isSpaMode, basename) {\n if (!isFogOfWarEnabled(ssr)) {\n return void 0;\n }\n return async ({ path, patch, signal, fetcherKey }) => {\n if (discoveredPaths.has(path)) {\n return;\n }\n await fetchAndApplyManifestPatches(\n [path],\n fetcherKey ? window.location.href : path,\n manifest,\n routeModules,\n ssr,\n isSpaMode,\n basename,\n patch,\n signal\n );\n };\n}\nfunction useFogOFWarDiscovery(router, manifest, routeModules, ssr, isSpaMode) {\n React8.useEffect(() => {\n if (!isFogOfWarEnabled(ssr) || navigator.connection?.saveData === true) {\n return;\n }\n function registerElement(el) {\n let path = el.tagName === \"FORM\" ? el.getAttribute(\"action\") : el.getAttribute(\"href\");\n if (!path) {\n return;\n }\n let pathname = el.tagName === \"A\" ? el.pathname : new URL(path, window.location.origin).pathname;\n if (!discoveredPaths.has(pathname)) {\n nextPaths.add(pathname);\n }\n }\n async function fetchPatches() {\n document.querySelectorAll(\"a[data-discover], form[data-discover]\").forEach(registerElement);\n let lazyPaths = Array.from(nextPaths.keys()).filter((path) => {\n if (discoveredPaths.has(path)) {\n nextPaths.delete(path);\n return false;\n }\n return true;\n });\n if (lazyPaths.length === 0) {\n return;\n }\n try {\n await fetchAndApplyManifestPatches(\n lazyPaths,\n null,\n manifest,\n routeModules,\n ssr,\n isSpaMode,\n router.basename,\n router.patchRoutes\n );\n } catch (e) {\n console.error(\"Failed to fetch manifest patches\", e);\n }\n }\n let debouncedFetchPatches = debounce(fetchPatches, 100);\n fetchPatches();\n let observer = new MutationObserver(() => debouncedFetchPatches());\n observer.observe(document.documentElement, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: [\"data-discover\", \"href\", \"action\"]\n });\n return () => observer.disconnect();\n }, [ssr, isSpaMode, manifest, routeModules, router]);\n}\nvar MANIFEST_VERSION_STORAGE_KEY = \"react-router-manifest-version\";\nasync function fetchAndApplyManifestPatches(paths, errorReloadPath, manifest, routeModules, ssr, isSpaMode, basename, patchRoutes, signal) {\n let manifestPath = `${basename != null ? basename : \"/\"}/__manifest`.replace(\n /\\/+/g,\n \"/\"\n );\n let url = new URL(manifestPath, window.location.origin);\n paths.sort().forEach((path) => url.searchParams.append(\"p\", path));\n url.searchParams.set(\"version\", manifest.version);\n if (url.toString().length > URL_LIMIT) {\n nextPaths.clear();\n return;\n }\n let serverPatches;\n try {\n let res = await fetch(url, { signal });\n if (!res.ok) {\n throw new Error(`${res.status} ${res.statusText}`);\n } else if (res.status === 204 && res.headers.has(\"X-Remix-Reload-Document\")) {\n if (!errorReloadPath) {\n console.warn(\n \"Detected a manifest version mismatch during eager route discovery. The next navigation/fetch to an undiscovered route will result in a new document navigation to sync up with the latest manifest.\"\n );\n return;\n }\n if (sessionStorage.getItem(MANIFEST_VERSION_STORAGE_KEY) === manifest.version) {\n console.error(\n \"Unable to discover routes due to manifest version mismatch.\"\n );\n return;\n }\n sessionStorage.setItem(MANIFEST_VERSION_STORAGE_KEY, manifest.version);\n window.location.href = errorReloadPath;\n throw new Error(\"Detected manifest version mismatch, reloading...\");\n } else if (res.status >= 400) {\n throw new Error(await res.text());\n }\n sessionStorage.removeItem(MANIFEST_VERSION_STORAGE_KEY);\n serverPatches = await res.json();\n } catch (e) {\n if (signal?.aborted) return;\n throw e;\n }\n let knownRoutes = new Set(Object.keys(manifest.routes));\n let patches = Object.values(serverPatches).reduce((acc, route) => {\n if (route && !knownRoutes.has(route.id)) {\n acc[route.id] = route;\n }\n return acc;\n }, {});\n Object.assign(manifest.routes, patches);\n paths.forEach((p) => addToFifoQueue(p, discoveredPaths));\n let parentIds = /* @__PURE__ */ new Set();\n Object.values(patches).forEach((patch) => {\n if (patch && (!patch.parentId || !patches[patch.parentId])) {\n parentIds.add(patch.parentId);\n }\n });\n parentIds.forEach(\n (parentId) => patchRoutes(\n parentId || null,\n createClientRoutes(patches, routeModules, null, ssr, isSpaMode, parentId)\n )\n );\n}\nfunction addToFifoQueue(path, queue) {\n if (queue.size >= discoveredPathsMaxSize) {\n let first = queue.values().next().value;\n queue.delete(first);\n }\n queue.add(path);\n}\nfunction debounce(callback, wait) {\n let timeoutId;\n return (...args) => {\n window.clearTimeout(timeoutId);\n timeoutId = window.setTimeout(() => callback(...args), wait);\n };\n}\n\n// lib/dom/ssr/components.tsx\nfunction useDataRouterContext2() {\n let context = React9.useContext(DataRouterContext);\n invariant2(\n context,\n \"You must render this element inside a <DataRouterContext.Provider> element\"\n );\n return context;\n}\nfunction useDataRouterStateContext() {\n let context = React9.useContext(DataRouterStateContext);\n invariant2(\n context,\n \"You must render this element inside a <DataRouterStateContext.Provider> element\"\n );\n return context;\n}\nvar FrameworkContext = React9.createContext(void 0);\nFrameworkContext.displayName = \"FrameworkContext\";\nfunction useFrameworkContext() {\n let context = React9.useContext(FrameworkContext);\n invariant2(\n context,\n \"You must render this element inside a <HydratedRouter> element\"\n );\n return context;\n}\nfunction usePrefetchBehavior(prefetch, theirElementProps) {\n let frameworkContext = React9.useContext(FrameworkContext);\n let [maybePrefetch, setMaybePrefetch] = React9.useState(false);\n let [shouldPrefetch, setShouldPrefetch] = React9.useState(false);\n let { onFocus, onBlur, onMouseEnter, onMouseLeave, onTouchStart } = theirElementProps;\n let ref = React9.useRef(null);\n React9.useEffect(() => {\n if (prefetch === \"render\") {\n setShouldPrefetch(true);\n }\n if (prefetch === \"viewport\") {\n let callback = (entries) => {\n entries.forEach((entry) => {\n setShouldPrefetch(entry.isIntersecting);\n });\n };\n let observer = new IntersectionObserver(callback, { threshold: 0.5 });\n if (ref.current) observer.observe(ref.current);\n return () => {\n observer.disconnect();\n };\n }\n }, [prefetch]);\n React9.useEffect(() => {\n if (maybePrefetch) {\n let id = setTimeout(() => {\n setShouldPrefetch(true);\n }, 100);\n return () => {\n clearTimeout(id);\n };\n }\n }, [maybePrefetch]);\n let setIntent = () => {\n setMaybePrefetch(true);\n };\n let cancelIntent = () => {\n setMaybePrefetch(false);\n setShouldPrefetch(false);\n };\n if (!frameworkContext) {\n return [false, ref, {}];\n }\n if (prefetch !== \"intent\") {\n return [shouldPrefetch, ref, {}];\n }\n return [\n shouldPrefetch,\n ref,\n {\n onFocus: composeEventHandlers(onFocus, setIntent),\n onBlur: composeEventHandlers(onBlur, cancelIntent),\n onMouseEnter: composeEventHandlers(onMouseEnter, setIntent),\n onMouseLeave: composeEventHandlers(onMouseLeave, cancelIntent),\n onTouchStart: composeEventHandlers(onTouchStart, setIntent)\n }\n ];\n}\nfunction composeEventHandlers(theirHandler, ourHandler) {\n return (event) => {\n theirHandler && theirHandler(event);\n if (!event.defaultPrevented) {\n ourHandler(event);\n }\n };\n}\nfunction getActiveMatches(matches, errors, isSpaMode) {\n if (isSpaMode && !isHydrated) {\n return [matches[0]];\n }\n if (errors) {\n let errorIdx = matches.findIndex((m) => errors[m.route.id] !== void 0);\n return matches.slice(0, errorIdx + 1);\n }\n return matches;\n}\nfunction Links() {\n let { isSpaMode, manifest, routeModules, criticalCss } = useFrameworkContext();\n let { errors, matches: routerMatches } = useDataRouterStateContext();\n let matches = getActiveMatches(routerMatches, errors, isSpaMode);\n let keyedLinks = React9.useMemo(\n () => getKeyedLinksForMatches(matches, routeModules, manifest),\n [matches, routeModules, manifest]\n );\n return /* @__PURE__ */ React9.createElement(React9.Fragment, null, typeof criticalCss === \"string\" ? /* @__PURE__ */ React9.createElement(\"style\", { dangerouslySetInnerHTML: { __html: criticalCss } }) : null, typeof criticalCss === \"object\" ? /* @__PURE__ */ React9.createElement(\"link\", { rel: \"stylesheet\", href: criticalCss.href }) : null, keyedLinks.map(\n ({ key, link }) => isPageLinkDescriptor(link) ? /* @__PURE__ */ React9.createElement(PrefetchPageLinks, { key, ...link }) : /* @__PURE__ */ React9.createElement(\"link\", { key, ...link })\n ));\n}\nfunction PrefetchPageLinks({\n page,\n ...dataLinkProps\n}) {\n let { router } = useDataRouterContext2();\n let matches = React9.useMemo(\n () => matchRoutes(router.routes, page, router.basename),\n [router.routes, page, router.basename]\n );\n if (!matches) {\n return null;\n }\n return /* @__PURE__ */ React9.createElement(PrefetchPageLinksImpl, { page, matches, ...dataLinkProps });\n}\nfunction useKeyedPrefetchLinks(matches) {\n let { manifest, routeModules } = useFrameworkContext();\n let [keyedPrefetchLinks, setKeyedPrefetchLinks] = React9.useState([]);\n React9.useEffect(() => {\n let interrupted = false;\n void getKeyedPrefetchLinks(matches, manifest, routeModules).then(\n (links) => {\n if (!interrupted) {\n setKeyedPrefetchLinks(links);\n }\n }\n );\n return () => {\n interrupted = true;\n };\n }, [matches, manifest, routeModules]);\n return keyedPrefetchLinks;\n}\nfunction PrefetchPageLinksImpl({\n page,\n matches: nextMatches,\n ...linkProps\n}) {\n let location = useLocation();\n let { manifest, routeModules } = useFrameworkContext();\n let { basename } = useDataRouterContext2();\n let { loaderData, matches } = useDataRouterStateContext();\n let newMatchesForData = React9.useMemo(\n () => getNewMatchesForLinks(\n page,\n nextMatches,\n matches,\n manifest,\n location,\n \"data\"\n ),\n [page, nextMatches, matches, manifest, location]\n );\n let newMatchesForAssets = React9.useMemo(\n () => getNewMatchesForLinks(\n page,\n nextMatches,\n matches,\n manifest,\n location,\n \"assets\"\n ),\n [page, nextMatches, matches, manifest, location]\n );\n let dataHrefs = React9.useMemo(() => {\n if (page === location.pathname + location.search + location.hash) {\n return [];\n }\n let routesParams = /* @__PURE__ */ new Set();\n let foundOptOutRoute = false;\n nextMatches.forEach((m) => {\n let manifestRoute = manifest.routes[m.route.id];\n if (!manifestRoute || !manifestRoute.hasLoader) {\n return;\n }\n if (!newMatchesForData.some((m2) => m2.route.id === m.route.id) && m.route.id in loaderData && routeModules[m.route.id]?.shouldRevalidate) {\n foundOptOutRoute = true;\n } else if (manifestRoute.hasClientLoader) {\n foundOptOutRoute = true;\n } else {\n routesParams.add(m.route.id);\n }\n });\n if (routesParams.size === 0) {\n return [];\n }\n let url = singleFetchUrl(page, basename);\n if (foundOptOutRoute && routesParams.size > 0) {\n url.searchParams.set(\n \"_routes\",\n nextMatches.filter((m) => routesParams.has(m.route.id)).map((m) => m.route.id).join(\",\")\n );\n }\n return [url.pathname + url.search];\n }, [\n basename,\n loaderData,\n location,\n manifest,\n newMatchesForData,\n nextMatches,\n page,\n routeModules\n ]);\n let moduleHrefs = React9.useMemo(\n () => getModuleLinkHrefs(newMatchesForAssets, manifest),\n [newMatchesForAssets, manifest]\n );\n let keyedPrefetchLinks = useKeyedPrefetchLinks(newMatchesForAssets);\n return /* @__PURE__ */ React9.createElement(React9.Fragment, null, dataHrefs.map((href2) => /* @__PURE__ */ React9.createElement(\"link\", { key: href2, rel: \"prefetch\", as: \"fetch\", href: href2, ...linkProps })), moduleHrefs.map((href2) => /* @__PURE__ */ React9.createElement(\"link\", { key: href2, rel: \"modulepreload\", href: href2, ...linkProps })), keyedPrefetchLinks.map(({ key, link }) => (\n // these don't spread `linkProps` because they are full link descriptors\n // already with their own props\n /* @__PURE__ */ React9.createElement(\"link\", { key, ...link })\n )));\n}\nfunction Meta() {\n let { isSpaMode, routeModules } = useFrameworkContext();\n let {\n errors,\n matches: routerMatches,\n loaderData\n } = useDataRouterStateContext();\n let location = useLocation();\n let _matches = getActiveMatches(routerMatches, errors, isSpaMode);\n let error = null;\n if (errors) {\n error = errors[_matches[_matches.length - 1].route.id];\n }\n let meta = [];\n let leafMeta = null;\n let matches = [];\n for (let i = 0; i < _matches.length; i++) {\n let _match = _matches[i];\n let routeId = _match.route.id;\n let data2 = loaderData[routeId];\n let params = _match.params;\n let routeModule = routeModules[routeId];\n let routeMeta = [];\n let match = {\n id: routeId,\n data: data2,\n meta: [],\n params: _match.params,\n pathname: _match.pathname,\n handle: _match.route.handle,\n error\n };\n matches[i] = match;\n if (routeModule?.meta) {\n routeMeta = typeof routeModule.meta === \"function\" ? routeModule.meta({\n data: data2,\n params,\n location,\n matches,\n error\n }) : Array.isArray(routeModule.meta) ? [...routeModule.meta] : routeModule.meta;\n } else if (leafMeta) {\n routeMeta = [...leafMeta];\n }\n routeMeta = routeMeta || [];\n if (!Array.isArray(routeMeta)) {\n throw new Error(\n \"The route at \" + _match.route.path + \" returns an invalid value. All route meta functions must return an array of meta objects.\\n\\nTo reference the meta function API, see https://remix.run/route/meta\"\n );\n }\n match.meta = routeMeta;\n matches[i] = match;\n meta = [...routeMeta];\n leafMeta = meta;\n }\n return /* @__PURE__ */ React9.createElement(React9.Fragment, null, meta.flat().map((metaProps) => {\n if (!metaProps) {\n return null;\n }\n if (\"tagName\" in metaProps) {\n let { tagName, ...rest } = metaProps;\n if (!isValidMetaTag(tagName)) {\n console.warn(\n `A meta object uses an invalid tagName: ${tagName}. Expected either 'link' or 'meta'`\n );\n return null;\n }\n let Comp = tagName;\n return /* @__PURE__ */ React9.createElement(Comp, { key: JSON.stringify(rest), ...rest });\n }\n if (\"title\" in metaProps) {\n return /* @__PURE__ */ React9.createElement(\"title\", { key: \"title\" }, String(metaProps.title));\n }\n if (\"charset\" in metaProps) {\n metaProps.charSet ?? (metaProps.charSet = metaProps.charset);\n delete metaProps.charset;\n }\n if (\"charSet\" in metaProps && metaProps.charSet != null) {\n return typeof metaProps.charSet === \"string\" ? /* @__PURE__ */ React9.createElement(\"meta\", { key: \"charSet\", charSet: metaProps.charSet }) : null;\n }\n if (\"script:ld+json\" in metaProps) {\n try {\n let json = JSON.stringify(metaProps[\"script:ld+json\"]);\n return /* @__PURE__ */ React9.createElement(\n \"script\",\n {\n key: `script:ld+json:${json}`,\n type: \"application/ld+json\",\n dangerouslySetInnerHTML: { __html: json }\n }\n );\n } catch (err) {\n return null;\n }\n }\n return /* @__PURE__ */ React9.createElement(\"meta\", { key: JSON.stringify(metaProps), ...metaProps });\n }));\n}\nfunction isValidMetaTag(tagName) {\n return typeof tagName === \"string\" && /^(meta|link)$/.test(tagName);\n}\nvar isHydrated = false;\nfunction Scripts(props) {\n let { manifest, serverHandoffString, isSpaMode, ssr, renderMeta } = useFrameworkContext();\n let { router, static: isStatic, staticContext } = useDataRouterContext2();\n let { matches: routerMatches } = useDataRouterStateContext();\n let enableFogOfWar = isFogOfWarEnabled(ssr);\n if (renderMeta) {\n renderMeta.didRenderScripts = true;\n }\n let matches = getActiveMatches(routerMatches, null, isSpaMode);\n React9.useEffect(() => {\n isHydrated = true;\n }, []);\n let initialScripts = React9.useMemo(() => {\n let streamScript = \"window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());\";\n let contextScript = staticContext ? `window.__reactRouterContext = ${serverHandoffString};${streamScript}` : \" \";\n let routeModulesScript = !isStatic ? \" \" : `${manifest.hmr?.runtime ? `import ${JSON.stringify(manifest.hmr.runtime)};` : \"\"}${!enableFogOfWar ? `import ${JSON.stringify(manifest.url)}` : \"\"};\n${matches.map((match, routeIndex) => {\n let routeVarName = `route${routeIndex}`;\n let manifestEntry = manifest.routes[match.route.id];\n invariant2(manifestEntry, `Route ${match.route.id} not found in manifest`);\n let {\n clientActionModule,\n clientLoaderModule,\n hydrateFallbackModule,\n module\n } = manifestEntry;\n let chunks = [\n ...clientActionModule ? [\n {\n module: clientActionModule,\n varName: `${routeVarName}_clientAction`\n }\n ] : [],\n ...clientLoaderModule ? [\n {\n module: clientLoaderModule,\n varName: `${routeVarName}_clientLoader`\n }\n ] : [],\n ...hydrateFallbackModule ? [\n {\n module: hydrateFallbackModule,\n varName: `${routeVarName}_HydrateFallback`\n }\n ] : [],\n { module, varName: `${routeVarName}_main` }\n ];\n if (chunks.length === 1) {\n return `import * as ${routeVarName} from ${JSON.stringify(module)};`;\n }\n let chunkImportsSnippet = chunks.map((chunk) => `import * as ${chunk.varName} from \"${chunk.module}\";`).join(\"\\n\");\n let mergedChunksSnippet = `const ${routeVarName} = {${chunks.map((chunk) => `...${chunk.varName}`).join(\",\")}};`;\n return [chunkImportsSnippet, mergedChunksSnippet].join(\"\\n\");\n }).join(\"\\n\")}\n ${enableFogOfWar ? (\n // Inline a minimal manifest with the SSR matches\n `window.__reactRouterManifest = ${JSON.stringify(\n getPartialManifest(manifest, router),\n null,\n 2\n )};`\n ) : \"\"}\n window.__reactRouterRouteModules = {${matches.map((match, index) => `${JSON.stringify(match.route.id)}:route${index}`).join(\",\")}};\n\nimport(${JSON.stringify(manifest.entry.module)});`;\n return /* @__PURE__ */ React9.createElement(React9.Fragment, null, /* @__PURE__ */ React9.createElement(\n \"script\",\n {\n ...props,\n suppressHydrationWarning: true,\n dangerouslySetInnerHTML: createHtml(contextScript),\n type: void 0\n }\n ), /* @__PURE__ */ React9.createElement(\n \"script\",\n {\n ...props,\n suppressHydrationWarning: true,\n dangerouslySetInnerHTML: createHtml(routeModulesScript),\n type: \"module\",\n async: true\n }\n ));\n }, []);\n let preloads = isHydrated ? [] : manifest.entry.imports.concat(\n getModuleLinkHrefs(matches, manifest, {\n includeHydrateFallback: true\n })\n );\n return isHydrated ? null : /* @__PURE__ */ React9.createElement(React9.Fragment, null, !enableFogOfWar ? /* @__PURE__ */ React9.createElement(\n \"link\",\n {\n rel: \"modulepreload\",\n href: manifest.url,\n crossOrigin: props.crossOrigin\n }\n ) : null, /* @__PURE__ */ React9.createElement(\n \"link\",\n {\n rel: \"modulepreload\",\n href: manifest.entry.module,\n crossOrigin: props.crossOrigin\n }\n ), dedupe(preloads).map((path) => /* @__PURE__ */ React9.createElement(\n \"link\",\n {\n key: path,\n rel: \"modulepreload\",\n href: path,\n crossOrigin: props.crossOrigin\n }\n )), initialScripts);\n}\nfunction dedupe(array) {\n return [...new Set(array)];\n}\nfunction mergeRefs(...refs) {\n return (value) => {\n refs.forEach((ref) => {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref != null) {\n ref.current = value;\n }\n });\n };\n}\n\n// lib/dom/lib.tsx\nvar isBrowser = typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.document.createElement !== \"undefined\";\ntry {\n if (isBrowser) {\n window.__reactRouterVersion = \"7.4.0\";\n }\n} catch (e) {\n}\nfunction createBrowserRouter(routes, opts) {\n return createRouter({\n basename: opts?.basename,\n unstable_getContext: opts?.unstable_getContext,\n future: opts?.future,\n history: createBrowserHistory({ window: opts?.window }),\n hydrationData: opts?.hydrationData || parseHydrationData(),\n routes,\n mapRouteProperties,\n dataStrategy: opts?.dataStrategy,\n patchRoutesOnNavigation: opts?.patchRoutesOnNavigation,\n window: opts?.window\n }).initialize();\n}\nfunction createHashRouter(routes, opts) {\n return createRouter({\n basename: opts?.basename,\n unstable_getContext: opts?.unstable_getContext,\n future: opts?.future,\n history: createHashHistory({ window: opts?.window }),\n hydrationData: opts?.hydrationData || parseHydrationData(),\n routes,\n mapRouteProperties,\n dataStrategy: opts?.dataStrategy,\n patchRoutesOnNavigation: opts?.patchRoutesOnNavigation,\n window: opts?.window\n }).initialize();\n}\nfunction parseHydrationData() {\n let state = window?.__staticRouterHydrationData;\n if (state && state.errors) {\n state = {\n ...state,\n errors: deserializeErrors(state.errors)\n };\n }\n return state;\n}\nfunction deserializeErrors(errors) {\n if (!errors) return null;\n let entries = Object.entries(errors);\n let serialized = {};\n for (let [key, val] of entries) {\n if (val && val.__type === \"RouteErrorResponse\") {\n serialized[key] = new ErrorResponseImpl(\n val.status,\n val.statusText,\n val.data,\n val.internal === true\n );\n } else if (val && val.__type === \"Error\") {\n if (val.__subType) {\n let ErrorConstructor = window[val.__subType];\n if (typeof ErrorConstructor === \"function\") {\n try {\n let error = new ErrorConstructor(val.message);\n error.stack = \"\";\n serialized[key] = error;\n } catch (e) {\n }\n }\n }\n if (serialized[key] == null) {\n let error = new Error(val.message);\n error.stack = \"\";\n serialized[key] = error;\n }\n } else {\n serialized[key] = val;\n }\n }\n return serialized;\n}\nfunction BrowserRouter({\n basename,\n children,\n window: window2\n}) {\n let historyRef = React10.useRef();\n if (historyRef.current == null) {\n historyRef.current = createBrowserHistory({ window: window2, v5Compat: true });\n }\n let history = historyRef.current;\n let [state, setStateImpl] = React10.useState({\n action: history.action,\n location: history.location\n });\n let setState = React10.useCallback(\n (newState) => {\n React10.startTransition(() => setStateImpl(newState));\n },\n [setStateImpl]\n );\n React10.useLayoutEffect(() => history.listen(setState), [history, setState]);\n return /* @__PURE__ */ React10.createElement(\n Router,\n {\n basename,\n children,\n location: state.location,\n navigationType: state.action,\n navigator: history\n }\n );\n}\nfunction HashRouter({ basename, children, window: window2 }) {\n let historyRef = React10.useRef();\n if (historyRef.current == null) {\n historyRef.current = createHashHistory({ window: window2, v5Compat: true });\n }\n let history = historyRef.current;\n let [state, setStateImpl] = React10.useState({\n action: history.action,\n location: history.location\n });\n let setState = React10.useCallback(\n (newState) => {\n React10.startTransition(() => setStateImpl(newState));\n },\n [setStateImpl]\n );\n React10.useLayoutEffect(() => history.listen(setState), [history, setState]);\n return /* @__PURE__ */ React10.createElement(\n Router,\n {\n basename,\n children,\n location: state.location,\n navigationType: state.action,\n navigator: history\n }\n );\n}\nfunction HistoryRouter({\n basename,\n children,\n history\n}) {\n let [state, setStateImpl] = React10.useState({\n action: history.action,\n location: history.location\n });\n let setState = React10.useCallback(\n (newState) => {\n React10.startTransition(() => setStateImpl(newState));\n },\n [setStateImpl]\n );\n React10.useLayoutEffect(() => history.listen(setState), [history, setState]);\n return /* @__PURE__ */ React10.createElement(\n Router,\n {\n basename,\n children,\n location: state.location,\n navigationType: state.action,\n navigator: history\n }\n );\n}\nHistoryRouter.displayName = \"unstable_HistoryRouter\";\nvar ABSOLUTE_URL_REGEX2 = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nvar Link = React10.forwardRef(\n function LinkWithRef({\n onClick,\n discover = \"render\",\n prefetch = \"none\",\n relative,\n reloadDocument,\n replace: replace2,\n state,\n target,\n to,\n preventScrollReset,\n viewTransition,\n ...rest\n }, forwardedRef) {\n let { basename } = React10.useContext(NavigationContext);\n let isAbsolute = typeof to === \"string\" && ABSOLUTE_URL_REGEX2.test(to);\n let absoluteHref;\n let isExternal = false;\n if (typeof to === \"string\" && isAbsolute) {\n absoluteHref = to;\n if (isBrowser) {\n try {\n let currentUrl = new URL(window.location.href);\n let targetUrl = to.startsWith(\"//\") ? new URL(currentUrl.protocol + to) : new URL(to);\n let path = stripBasename(targetUrl.pathname, basename);\n if (targetUrl.origin === currentUrl.origin && path != null) {\n to = path + targetUrl.search + targetUrl.hash;\n } else {\n isExternal = true;\n }\n } catch (e) {\n warning(\n false,\n `<Link to=\"${to}\"> contains an invalid URL which will probably break when clicked - please update to a valid URL path.`\n );\n }\n }\n }\n let href2 = useHref(to, { relative });\n let [shouldPrefetch, prefetchRef, prefetchHandlers] = usePrefetchBehavior(\n prefetch,\n rest\n );\n let internalOnClick = useLinkClickHandler(to, {\n replace: replace2,\n state,\n target,\n preventScrollReset,\n relative,\n viewTransition\n });\n function handleClick(event) {\n if (onClick) onClick(event);\n if (!event.defaultPrevented) {\n internalOnClick(event);\n }\n }\n let link = (\n // eslint-disable-next-line jsx-a11y/anchor-has-content\n /* @__PURE__ */ React10.createElement(\n \"a\",\n {\n ...rest,\n ...prefetchHandlers,\n href: absoluteHref || href2,\n onClick: isExternal || reloadDocument ? onClick : handleClick,\n ref: mergeRefs(forwardedRef, prefetchRef),\n target,\n \"data-discover\": !isAbsolute && discover === \"render\" ? \"true\" : void 0\n }\n )\n );\n return shouldPrefetch && !isAbsolute ? /* @__PURE__ */ React10.createElement(React10.Fragment, null, link, /* @__PURE__ */ React10.createElement(PrefetchPageLinks, { page: href2 })) : link;\n }\n);\nLink.displayName = \"Link\";\nvar NavLink = React10.forwardRef(\n function NavLinkWithRef({\n \"aria-current\": ariaCurrentProp = \"page\",\n caseSensitive = false,\n className: classNameProp = \"\",\n end = false,\n style: styleProp,\n to,\n viewTransition,\n children,\n ...rest\n }, ref) {\n let path = useResolvedPath(to, { relative: rest.relative });\n let location = useLocation();\n let routerState = React10.useContext(DataRouterStateContext);\n let { navigator: navigator2, basename } = React10.useContext(NavigationContext);\n let isTransitioning = routerState != null && // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useViewTransitionState(path) && viewTransition === true;\n let toPathname = navigator2.encodeLocation ? navigator2.encodeLocation(path).pathname : path.pathname;\n let locationPathname = location.pathname;\n let nextLocationPathname = routerState && routerState.navigation && routerState.navigation.location ? routerState.navigation.location.pathname : null;\n if (!caseSensitive) {\n locationPathname = locationPathname.toLowerCase();\n nextLocationPathname = nextLocationPathname ? nextLocationPathname.toLowerCase() : null;\n toPathname = toPathname.toLowerCase();\n }\n if (nextLocationPathname && basename) {\n nextLocationPathname = stripBasename(nextLocationPathname, basename) || nextLocationPathname;\n }\n const endSlashPosition = toPathname !== \"/\" && toPathname.endsWith(\"/\") ? toPathname.length - 1 : toPathname.length;\n let isActive = locationPathname === toPathname || !end && locationPathname.startsWith(toPathname) && locationPathname.charAt(endSlashPosition) === \"/\";\n let isPending = nextLocationPathname != null && (nextLocationPathname === toPathname || !end && nextLocationPathname.startsWith(toPathname) && nextLocationPathname.charAt(toPathname.length) === \"/\");\n let renderProps = {\n isActive,\n isPending,\n isTransitioning\n };\n let ariaCurrent = isActive ? ariaCurrentProp : void 0;\n let className;\n if (typeof classNameProp === \"function\") {\n className = classNameProp(renderProps);\n } else {\n className = [\n classNameProp,\n isActive ? \"active\" : null,\n isPending ? \"pending\" : null,\n isTransitioning ? \"transitioning\" : null\n ].filter(Boolean).join(\" \");\n }\n let style = typeof styleProp === \"function\" ? styleProp(renderProps) : styleProp;\n return /* @__PURE__ */ React10.createElement(\n Link,\n {\n ...rest,\n \"aria-current\": ariaCurrent,\n className,\n ref,\n style,\n to,\n viewTransition\n },\n typeof children === \"function\" ? children(renderProps) : children\n );\n }\n);\nNavLink.displayName = \"NavLink\";\nvar Form = React10.forwardRef(\n ({\n discover = \"render\",\n fetcherKey,\n navigate,\n reloadDocument,\n replace: replace2,\n state,\n method = defaultMethod,\n action,\n onSubmit,\n relative,\n preventScrollReset,\n viewTransition,\n ...props\n }, forwardedRef) => {\n let submit = useSubmit();\n let formAction = useFormAction(action, { relative });\n let formMethod = method.toLowerCase() === \"get\" ? \"get\" : \"post\";\n let isAbsolute = typeof action === \"string\" && ABSOLUTE_URL_REGEX2.test(action);\n let submitHandler = (event) => {\n onSubmit && onSubmit(event);\n if (event.defaultPrevented) return;\n event.preventDefault();\n let submitter = event.nativeEvent.submitter;\n let submitMethod = submitter?.getAttribute(\"formmethod\") || method;\n submit(submitter || event.currentTarget, {\n fetcherKey,\n method: submitMethod,\n navigate,\n replace: replace2,\n state,\n relative,\n preventScrollReset,\n viewTransition\n });\n };\n return /* @__PURE__ */ React10.createElement(\n \"form\",\n {\n ref: forwardedRef,\n method: formMethod,\n action: formAction,\n onSubmit: reloadDocument ? onSubmit : submitHandler,\n ...props,\n \"data-discover\": !isAbsolute && discover === \"render\" ? \"true\" : void 0\n }\n );\n }\n);\nForm.displayName = \"Form\";\nfunction ScrollRestoration({\n getKey,\n storageKey,\n ...props\n}) {\n let remixContext = React10.useContext(FrameworkContext);\n let { basename } = React10.useContext(NavigationContext);\n let location = useLocation();\n let matches = useMatches();\n useScrollRestoration({ getKey, storageKey });\n let ssrKey = React10.useMemo(\n () => {\n if (!remixContext || !getKey) return null;\n let userKey = getScrollRestorationKey(\n location,\n matches,\n basename,\n getKey\n );\n return userKey !== location.key ? userKey : null;\n },\n // Nah, we only need this the first time for the SSR render\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n if (!remixContext || remixContext.isSpaMode) {\n return null;\n }\n let restoreScroll = ((storageKey2, restoreKey) => {\n if (!window.history.state || !window.history.state.key) {\n let key = Math.random().toString(32).slice(2);\n window.history.replaceState({ key }, \"\");\n }\n try {\n let positions = JSON.parse(sessionStorage.getItem(storageKey2) || \"{}\");\n let storedY = positions[restoreKey || window.history.state.key];\n if (typeof storedY === \"number\") {\n window.scrollTo(0, storedY);\n }\n } catch (error) {\n console.error(error);\n sessionStorage.removeItem(storageKey2);\n }\n }).toString();\n return /* @__PURE__ */ React10.createElement(\n \"script\",\n {\n ...props,\n suppressHydrationWarning: true,\n dangerouslySetInnerHTML: {\n __html: `(${restoreScroll})(${JSON.stringify(\n storageKey || SCROLL_RESTORATION_STORAGE_KEY\n )}, ${JSON.stringify(ssrKey)})`\n }\n }\n );\n}\nScrollRestoration.displayName = \"ScrollRestoration\";\nfunction getDataRouterConsoleError2(hookName) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`;\n}\nfunction useDataRouterContext3(hookName) {\n let ctx = React10.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError2(hookName));\n return ctx;\n}\nfunction useDataRouterState2(hookName) {\n let state = React10.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError2(hookName));\n return state;\n}\nfunction useLinkClickHandler(to, {\n target,\n replace: replaceProp,\n state,\n preventScrollReset,\n relative,\n viewTransition\n} = {}) {\n let navigate = useNavigate();\n let location = useLocation();\n let path = useResolvedPath(to, { relative });\n return React10.useCallback(\n (event) => {\n if (shouldProcessLinkClick(event, target)) {\n event.preventDefault();\n let replace2 = replaceProp !== void 0 ? replaceProp : createPath(location) === createPath(path);\n navigate(to, {\n replace: replace2,\n state,\n preventScrollReset,\n relative,\n viewTransition\n });\n }\n },\n [\n location,\n navigate,\n path,\n replaceProp,\n state,\n target,\n to,\n preventScrollReset,\n relative,\n viewTransition\n ]\n );\n}\nfunction useSearchParams(defaultInit) {\n warning(\n typeof URLSearchParams !== \"undefined\",\n `You cannot use the \\`useSearchParams\\` hook in a browser that does not support the URLSearchParams API. If you need to support Internet Explorer 11, we recommend you load a polyfill such as https://github.com/ungap/url-search-params.`\n );\n let defaultSearchParamsRef = React10.useRef(createSearchParams(defaultInit));\n let hasSetSearchParamsRef = React10.useRef(false);\n let location = useLocation();\n let searchParams = React10.useMemo(\n () => (\n // Only merge in the defaults if we haven't yet called setSearchParams.\n // Once we call that we want those to take precedence, otherwise you can't\n // remove a param with setSearchParams({}) if it has an initial value\n getSearchParamsForLocation(\n location.search,\n hasSetSearchParamsRef.current ? null : defaultSearchParamsRef.current\n )\n ),\n [location.search]\n );\n let navigate = useNavigate();\n let setSearchParams = React10.useCallback(\n (nextInit, navigateOptions) => {\n const newSearchParams = createSearchParams(\n typeof nextInit === \"function\" ? nextInit(searchParams) : nextInit\n );\n hasSetSearchParamsRef.current = true;\n navigate(\"?\" + newSearchParams, navigateOptions);\n },\n [navigate, searchParams]\n );\n return [searchParams, setSearchParams];\n}\nvar fetcherId = 0;\nvar getUniqueFetcherId = () => `__${String(++fetcherId)}__`;\nfunction useSubmit() {\n let { router } = useDataRouterContext3(\"useSubmit\" /* UseSubmit */);\n let { basename } = React10.useContext(NavigationContext);\n let currentRouteId = useRouteId();\n return React10.useCallback(\n async (target, options = {}) => {\n let { action, method, encType, formData, body } = getFormSubmissionInfo(\n target,\n basename\n );\n if (options.navigate === false) {\n let key = options.fetcherKey || getUniqueFetcherId();\n await router.fetch(key, currentRouteId, options.action || action, {\n preventScrollReset: options.preventScrollReset,\n formData,\n body,\n formMethod: options.method || method,\n formEncType: options.encType || encType,\n flushSync: options.flushSync\n });\n } else {\n await router.navigate(options.action || action, {\n preventScrollReset: options.preventScrollReset,\n formData,\n body,\n formMethod: options.method || method,\n formEncType: options.encType || encType,\n replace: options.replace,\n state: options.state,\n fromRouteId: currentRouteId,\n flushSync: options.flushSync,\n viewTransition: options.viewTransition\n });\n }\n },\n [router, basename, currentRouteId]\n );\n}\nfunction useFormAction(action, { relative } = {}) {\n let { basename } = React10.useContext(NavigationContext);\n let routeContext = React10.useContext(RouteContext);\n invariant(routeContext, \"useFormAction must be used inside a RouteContext\");\n let [match] = routeContext.matches.slice(-1);\n let path = { ...useResolvedPath(action ? action : \".\", { relative }) };\n let location = useLocation();\n if (action == null) {\n path.search = location.search;\n let params = new URLSearchParams(path.search);\n let indexValues = params.getAll(\"index\");\n let hasNakedIndexParam = indexValues.some((v) => v === \"\");\n if (hasNakedIndexParam) {\n params.delete(\"index\");\n indexValues.filter((v) => v).forEach((v) => params.append(\"index\", v));\n let qs = params.toString();\n path.search = qs ? `?${qs}` : \"\";\n }\n }\n if ((!action || action === \".\") && match.route.index) {\n path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\n }\n if (basename !== \"/\") {\n path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n return createPath(path);\n}\nfunction useFetcher({\n key\n} = {}) {\n let { router } = useDataRouterContext3(\"useFetcher\" /* UseFetcher */);\n let state = useDataRouterState2(\"useFetcher\" /* UseFetcher */);\n let fetcherData = React10.useContext(FetchersContext);\n let route = React10.useContext(RouteContext);\n let routeId = route.matches[route.matches.length - 1]?.route.id;\n invariant(fetcherData, `useFetcher must be used inside a FetchersContext`);\n invariant(route, `useFetcher must be used inside a RouteContext`);\n invariant(\n routeId != null,\n `useFetcher can only be used on routes that contain a unique \"id\"`\n );\n let defaultKey = React10.useId();\n let [fetcherKey, setFetcherKey] = React10.useState(key || defaultKey);\n if (key && key !== fetcherKey) {\n setFetcherKey(key);\n }\n React10.useEffect(() => {\n router.getFetcher(fetcherKey);\n return () => router.deleteFetcher(fetcherKey);\n }, [router, fetcherKey]);\n let load = React10.useCallback(\n async (href2, opts) => {\n invariant(routeId, \"No routeId available for fetcher.load()\");\n await router.fetch(fetcherKey, routeId, href2, opts);\n },\n [fetcherKey, routeId, router]\n );\n let submitImpl = useSubmit();\n let submit = React10.useCallback(\n async (target, opts) => {\n await submitImpl(target, {\n ...opts,\n navigate: false,\n fetcherKey\n });\n },\n [fetcherKey, submitImpl]\n );\n let FetcherForm = React10.useMemo(() => {\n let FetcherForm2 = React10.forwardRef(\n (props, ref) => {\n return /* @__PURE__ */ React10.createElement(Form, { ...props, navigate: false, fetcherKey, ref });\n }\n );\n FetcherForm2.displayName = \"fetcher.Form\";\n return FetcherForm2;\n }, [fetcherKey]);\n let fetcher = state.fetchers.get(fetcherKey) || IDLE_FETCHER;\n let data2 = fetcherData.get(fetcherKey);\n let fetcherWithComponents = React10.useMemo(\n () => ({\n Form: FetcherForm,\n submit,\n load,\n ...fetcher,\n data: data2\n }),\n [FetcherForm, submit, load, fetcher, data2]\n );\n return fetcherWithComponents;\n}\nfunction useFetchers() {\n let state = useDataRouterState2(\"useFetchers\" /* UseFetchers */);\n return Array.from(state.fetchers.entries()).map(([key, fetcher]) => ({\n ...fetcher,\n key\n }));\n}\nvar SCROLL_RESTORATION_STORAGE_KEY = \"react-router-scroll-positions\";\nvar savedScrollPositions = {};\nfunction getScrollRestorationKey(location, matches, basename, getKey) {\n let key = null;\n if (getKey) {\n if (basename !== \"/\") {\n key = getKey(\n {\n ...location,\n pathname: stripBasename(location.pathname, basename) || location.pathname\n },\n matches\n );\n } else {\n key = getKey(location, matches);\n }\n }\n if (key == null) {\n key = location.key;\n }\n return key;\n}\nfunction useScrollRestoration({\n getKey,\n storageKey\n} = {}) {\n let { router } = useDataRouterContext3(\"useScrollRestoration\" /* UseScrollRestoration */);\n let { restoreScrollPosition, preventScrollReset } = useDataRouterState2(\n \"useScrollRestoration\" /* UseScrollRestoration */\n );\n let { basename } = React10.useContext(NavigationContext);\n let location = useLocation();\n let matches = useMatches();\n let navigation = useNavigation();\n React10.useEffect(() => {\n window.history.scrollRestoration = \"manual\";\n return () => {\n window.history.scrollRestoration = \"auto\";\n };\n }, []);\n usePageHide(\n React10.useCallback(() => {\n if (navigation.state === \"idle\") {\n let key = getScrollRestorationKey(location, matches, basename, getKey);\n savedScrollPositions[key] = window.scrollY;\n }\n try {\n sessionStorage.setItem(\n storageKey || SCROLL_RESTORATION_STORAGE_KEY,\n JSON.stringify(savedScrollPositions)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (${error}).`\n );\n }\n window.history.scrollRestoration = \"auto\";\n }, [navigation.state, getKey, basename, location, matches, storageKey])\n );\n if (typeof document !== \"undefined\") {\n React10.useLayoutEffect(() => {\n try {\n let sessionPositions = sessionStorage.getItem(\n storageKey || SCROLL_RESTORATION_STORAGE_KEY\n );\n if (sessionPositions) {\n savedScrollPositions = JSON.parse(sessionPositions);\n }\n } catch (e) {\n }\n }, [storageKey]);\n React10.useLayoutEffect(() => {\n let disableScrollRestoration = router?.enableScrollRestoration(\n savedScrollPositions,\n () => window.scrollY,\n getKey ? (location2, matches2) => getScrollRestorationKey(location2, matches2, basename, getKey) : void 0\n );\n return () => disableScrollRestoration && disableScrollRestoration();\n }, [router, basename, getKey]);\n React10.useLayoutEffect(() => {\n if (restoreScrollPosition === false) {\n return;\n }\n if (typeof restoreScrollPosition === \"number\") {\n window.scrollTo(0, restoreScrollPosition);\n return;\n }\n if (location.hash) {\n let el = document.getElementById(\n decodeURIComponent(location.hash.slice(1))\n );\n if (el) {\n el.scrollIntoView();\n return;\n }\n }\n if (preventScrollReset === true) {\n return;\n }\n window.scrollTo(0, 0);\n }, [location, restoreScrollPosition, preventScrollReset]);\n }\n}\nfunction useBeforeUnload(callback, options) {\n let { capture } = options || {};\n React10.useEffect(() => {\n let opts = capture != null ? { capture } : void 0;\n window.addEventListener(\"beforeunload\", callback, opts);\n return () => {\n window.removeEventListener(\"beforeunload\", callback, opts);\n };\n }, [callback, capture]);\n}\nfunction usePageHide(callback, options) {\n let { capture } = options || {};\n React10.useEffect(() => {\n let opts = capture != null ? { capture } : void 0;\n window.addEventListener(\"pagehide\", callback, opts);\n return () => {\n window.removeEventListener(\"pagehide\", callback, opts);\n };\n }, [callback, capture]);\n}\nfunction usePrompt({\n when,\n message\n}) {\n let blocker = useBlocker(when);\n React10.useEffect(() => {\n if (blocker.state === \"blocked\") {\n let proceed = window.confirm(message);\n if (proceed) {\n setTimeout(blocker.proceed, 0);\n } else {\n blocker.reset();\n }\n }\n }, [blocker, message]);\n React10.useEffect(() => {\n if (blocker.state === \"blocked\" && !when) {\n blocker.reset();\n }\n }, [blocker, when]);\n}\nfunction useViewTransitionState(to, opts = {}) {\n let vtContext = React10.useContext(ViewTransitionContext);\n invariant(\n vtContext != null,\n \"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?\"\n );\n let { basename } = useDataRouterContext3(\n \"useViewTransitionState\" /* useViewTransitionState */\n );\n let path = useResolvedPath(to, { relative: opts.relative });\n if (!vtContext.isTransitioning) {\n return false;\n }\n let currentPath = stripBasename(vtContext.currentLocation.pathname, basename) || vtContext.currentLocation.pathname;\n let nextPath = stripBasename(vtContext.nextLocation.pathname, basename) || vtContext.nextLocation.pathname;\n return matchPath(path.pathname, nextPath) != null || matchPath(path.pathname, currentPath) != null;\n}\n\n// lib/dom/server.tsx\nimport * as React11 from \"react\";\nfunction StaticRouter({\n basename,\n children,\n location: locationProp = \"/\"\n}) {\n if (typeof locationProp === \"string\") {\n locationProp = parsePath(locationProp);\n }\n let action = \"POP\" /* Pop */;\n let location = {\n pathname: locationProp.pathname || \"/\",\n search: locationProp.search || \"\",\n hash: locationProp.hash || \"\",\n state: locationProp.state != null ? locationProp.state : null,\n key: locationProp.key || \"default\"\n };\n let staticNavigator = getStatelessNavigator();\n return /* @__PURE__ */ React11.createElement(\n Router,\n {\n basename,\n children,\n location,\n navigationType: action,\n navigator: staticNavigator,\n static: true\n }\n );\n}\nfunction StaticRouterProvider({\n context,\n router,\n hydrate = true,\n nonce\n}) {\n invariant(\n router && context,\n \"You must provide `router` and `context` to <StaticRouterProvider>\"\n );\n let dataRouterContext = {\n router,\n navigator: getStatelessNavigator(),\n static: true,\n staticContext: context,\n basename: context.basename || \"/\"\n };\n let fetchersContext = /* @__PURE__ */ new Map();\n let hydrateScript = \"\";\n if (hydrate !== false) {\n let data2 = {\n loaderData: context.loaderData,\n actionData: context.actionData,\n errors: serializeErrors(context.errors)\n };\n let json = htmlEscape(JSON.stringify(JSON.stringify(data2)));\n hydrateScript = `window.__staticRouterHydrationData = JSON.parse(${json});`;\n }\n let { state } = dataRouterContext.router;\n return /* @__PURE__ */ React11.createElement(React11.Fragment, null, /* @__PURE__ */ React11.createElement(DataRouterContext.Provider, { value: dataRouterContext }, /* @__PURE__ */ React11.createElement(DataRouterStateContext.Provider, { value: state }, /* @__PURE__ */ React11.createElement(FetchersContext.Provider, { value: fetchersContext }, /* @__PURE__ */ React11.createElement(ViewTransitionContext.Provider, { value: { isTransitioning: false } }, /* @__PURE__ */ React11.createElement(\n Router,\n {\n basename: dataRouterContext.basename,\n location: state.location,\n navigationType: state.historyAction,\n navigator: dataRouterContext.navigator,\n static: dataRouterContext.static\n },\n /* @__PURE__ */ React11.createElement(\n DataRoutes2,\n {\n routes: router.routes,\n future: router.future,\n state\n }\n )\n ))))), hydrateScript ? /* @__PURE__ */ React11.createElement(\n \"script\",\n {\n suppressHydrationWarning: true,\n nonce,\n dangerouslySetInnerHTML: { __html: hydrateScript }\n }\n ) : null);\n}\nfunction DataRoutes2({\n routes,\n future,\n state\n}) {\n return useRoutesImpl(routes, void 0, state, future);\n}\nfunction serializeErrors(errors) {\n if (!errors) return null;\n let entries = Object.entries(errors);\n let serialized = {};\n for (let [key, val] of entries) {\n if (isRouteErrorResponse(val)) {\n serialized[key] = { ...val, __type: \"RouteErrorResponse\" };\n } else if (val instanceof Error) {\n serialized[key] = {\n message: val.message,\n __type: \"Error\",\n // If this is a subclass (i.e., ReferenceError), send up the type so we\n // can re-create the same type during hydration.\n ...val.name !== \"Error\" ? {\n __subType: val.name\n } : {}\n };\n } else {\n serialized[key] = val;\n }\n }\n return serialized;\n}\nfunction getStatelessNavigator() {\n return {\n createHref,\n encodeLocation,\n push(to) {\n throw new Error(\n `You cannot use navigator.push() on the server because it is a stateless environment. This error was probably triggered when you did a \\`navigate(${JSON.stringify(to)})\\` somewhere in your app.`\n );\n },\n replace(to) {\n throw new Error(\n `You cannot use navigator.replace() on the server because it is a stateless environment. This error was probably triggered when you did a \\`navigate(${JSON.stringify(to)}, { replace: true })\\` somewhere in your app.`\n );\n },\n go(delta) {\n throw new Error(\n `You cannot use navigator.go() on the server because it is a stateless environment. This error was probably triggered when you did a \\`navigate(${delta})\\` somewhere in your app.`\n );\n },\n back() {\n throw new Error(\n `You cannot use navigator.back() on the server because it is a stateless environment.`\n );\n },\n forward() {\n throw new Error(\n `You cannot use navigator.forward() on the server because it is a stateless environment.`\n );\n }\n };\n}\nfunction createStaticHandler2(routes, opts) {\n return createStaticHandler(routes, {\n ...opts,\n mapRouteProperties\n });\n}\nfunction createStaticRouter(routes, context, opts = {}) {\n let manifest = {};\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n void 0,\n manifest\n );\n let matches = context.matches.map((match) => {\n let route = manifest[match.route.id] || match.route;\n return {\n ...match,\n route\n };\n });\n let msg = (method) => `You cannot use router.${method}() on the server because it is a stateless environment`;\n return {\n get basename() {\n return context.basename;\n },\n get future() {\n return {\n unstable_middleware: false,\n ...opts?.future\n };\n },\n get state() {\n return {\n historyAction: \"POP\" /* Pop */,\n location: context.location,\n matches,\n loaderData: context.loaderData,\n actionData: context.actionData,\n errors: context.errors,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n restoreScrollPosition: null,\n preventScrollReset: false,\n revalidation: \"idle\",\n fetchers: /* @__PURE__ */ new Map(),\n blockers: /* @__PURE__ */ new Map()\n };\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return void 0;\n },\n initialize() {\n throw msg(\"initialize\");\n },\n subscribe() {\n throw msg(\"subscribe\");\n },\n enableScrollRestoration() {\n throw msg(\"enableScrollRestoration\");\n },\n navigate() {\n throw msg(\"navigate\");\n },\n fetch() {\n throw msg(\"fetch\");\n },\n revalidate() {\n throw msg(\"revalidate\");\n },\n createHref,\n encodeLocation,\n getFetcher() {\n return IDLE_FETCHER;\n },\n deleteFetcher() {\n throw msg(\"deleteFetcher\");\n },\n dispose() {\n throw msg(\"dispose\");\n },\n getBlocker() {\n return IDLE_BLOCKER;\n },\n deleteBlocker() {\n throw msg(\"deleteBlocker\");\n },\n patchRoutes() {\n throw msg(\"patchRoutes\");\n },\n _internalFetchControllers: /* @__PURE__ */ new Map(),\n _internalSetRoutes() {\n throw msg(\"_internalSetRoutes\");\n }\n };\n}\nfunction createHref(to) {\n return typeof to === \"string\" ? to : createPath(to);\n}\nfunction encodeLocation(to) {\n let href2 = typeof to === \"string\" ? to : createPath(to);\n href2 = href2.replace(/ $/, \"%20\");\n let encoded = ABSOLUTE_URL_REGEX3.test(href2) ? new URL(href2) : new URL(href2, \"http://localhost\");\n return {\n pathname: encoded.pathname,\n search: encoded.search,\n hash: encoded.hash\n };\n}\nvar ABSOLUTE_URL_REGEX3 = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nvar ESCAPE_LOOKUP2 = {\n \"&\": \"\\\\u0026\",\n \">\": \"\\\\u003e\",\n \"<\": \"\\\\u003c\",\n \"\\u2028\": \"\\\\u2028\",\n \"\\u2029\": \"\\\\u2029\"\n};\nvar ESCAPE_REGEX2 = /[&><\\u2028\\u2029]/g;\nfunction htmlEscape(str) {\n return str.replace(ESCAPE_REGEX2, (match) => ESCAPE_LOOKUP2[match]);\n}\n\n// lib/dom/ssr/server.tsx\nimport * as React12 from \"react\";\nfunction ServerRouter({\n context,\n url,\n nonce\n}) {\n if (typeof url === \"string\") {\n url = new URL(url);\n }\n let { manifest, routeModules, criticalCss, serverHandoffString } = context;\n let routes = createServerRoutes(\n manifest.routes,\n routeModules,\n context.future,\n context.isSpaMode\n );\n context.staticHandlerContext.loaderData = {\n ...context.staticHandlerContext.loaderData\n };\n for (let match of context.staticHandlerContext.matches) {\n let routeId = match.route.id;\n let route = routeModules[routeId];\n let manifestRoute = context.manifest.routes[routeId];\n if (route && manifestRoute && shouldHydrateRouteLoader(manifestRoute, route, context.isSpaMode) && (route.HydrateFallback || !manifestRoute.hasLoader)) {\n delete context.staticHandlerContext.loaderData[routeId];\n }\n }\n let router = createStaticRouter(routes, context.staticHandlerContext);\n return /* @__PURE__ */ React12.createElement(React12.Fragment, null, /* @__PURE__ */ React12.createElement(\n FrameworkContext.Provider,\n {\n value: {\n manifest,\n routeModules,\n criticalCss,\n serverHandoffString,\n future: context.future,\n ssr: context.ssr,\n isSpaMode: context.isSpaMode,\n serializeError: context.serializeError,\n renderMeta: context.renderMeta\n }\n },\n /* @__PURE__ */ React12.createElement(RemixErrorBoundary, { location: router.state.location }, /* @__PURE__ */ React12.createElement(\n StaticRouterProvider,\n {\n router,\n context: context.staticHandlerContext,\n hydrate: false\n }\n ))\n ), context.serverHandoffStream ? /* @__PURE__ */ React12.createElement(React12.Suspense, null, /* @__PURE__ */ React12.createElement(\n StreamTransfer,\n {\n context,\n identifier: 0,\n reader: context.serverHandoffStream.getReader(),\n textDecoder: new TextDecoder(),\n nonce\n }\n )) : null);\n}\n\n// lib/dom/ssr/routes-test-stub.tsx\nimport * as React13 from \"react\";\nfunction createRoutesStub(routes, unstable_getContext) {\n return function RoutesTestStub({\n initialEntries,\n initialIndex,\n hydrationData,\n future\n }) {\n let routerRef = React13.useRef();\n let remixContextRef = React13.useRef();\n if (routerRef.current == null) {\n remixContextRef.current = {\n future: {\n unstable_middleware: future?.unstable_middleware === true\n },\n manifest: {\n routes: {},\n entry: { imports: [], module: \"\" },\n url: \"\",\n version: \"\"\n },\n routeModules: {},\n ssr: false,\n isSpaMode: false\n };\n let patched = processRoutes(\n // @ts-expect-error `StubRouteObject` is stricter about `loader`/`action`\n // types compared to `AgnosticRouteObject`\n convertRoutesToDataRoutes(routes, (r) => r),\n remixContextRef.current.manifest,\n remixContextRef.current.routeModules\n );\n routerRef.current = createMemoryRouter(patched, {\n unstable_getContext,\n initialEntries,\n initialIndex,\n hydrationData\n });\n }\n return /* @__PURE__ */ React13.createElement(FrameworkContext.Provider, { value: remixContextRef.current }, /* @__PURE__ */ React13.createElement(RouterProvider, { router: routerRef.current }));\n };\n}\nfunction processRoutes(routes, manifest, routeModules, parentId) {\n return routes.map((route) => {\n if (!route.id) {\n throw new Error(\n \"Expected a route.id in @remix-run/testing processRoutes() function\"\n );\n }\n let newRoute = {\n id: route.id,\n path: route.path,\n index: route.index,\n Component: route.Component,\n HydrateFallback: route.HydrateFallback,\n ErrorBoundary: route.ErrorBoundary,\n action: route.action,\n loader: route.loader,\n handle: route.handle,\n shouldRevalidate: route.shouldRevalidate\n };\n let entryRoute = {\n id: route.id,\n path: route.path,\n index: route.index,\n parentId,\n hasAction: route.action != null,\n hasLoader: route.loader != null,\n // When testing routes, you should just be stubbing loader/action, not\n // trying to re-implement the full loader/clientLoader/SSR/hydration flow.\n // That is better tested via E2E tests.\n hasClientAction: false,\n hasClientLoader: false,\n hasErrorBoundary: route.ErrorBoundary != null,\n // any need for these?\n module: \"build/stub-path-to-module.js\",\n clientActionModule: void 0,\n clientLoaderModule: void 0,\n hydrateFallbackModule: void 0\n };\n manifest.routes[newRoute.id] = entryRoute;\n routeModules[route.id] = {\n default: route.Component || Outlet,\n ErrorBoundary: route.ErrorBoundary || void 0,\n handle: route.handle,\n links: route.links,\n meta: route.meta,\n shouldRevalidate: route.shouldRevalidate\n };\n if (route.children) {\n newRoute.children = processRoutes(\n route.children,\n manifest,\n routeModules,\n newRoute.id\n );\n }\n return newRoute;\n });\n}\n\n// lib/server-runtime/cookies.ts\nimport { parse, serialize } from \"cookie\";\n\n// lib/server-runtime/crypto.ts\nvar encoder = new TextEncoder();\nvar sign = async (value, secret) => {\n let data2 = encoder.encode(value);\n let key = await createKey2(secret, [\"sign\"]);\n let signature = await crypto.subtle.sign(\"HMAC\", key, data2);\n let hash = btoa(String.fromCharCode(...new Uint8Array(signature))).replace(\n /=+$/,\n \"\"\n );\n return value + \".\" + hash;\n};\nvar unsign = async (cookie, secret) => {\n let index = cookie.lastIndexOf(\".\");\n let value = cookie.slice(0, index);\n let hash = cookie.slice(index + 1);\n let data2 = encoder.encode(value);\n let key = await createKey2(secret, [\"verify\"]);\n let signature = byteStringToUint8Array(atob(hash));\n let valid = await crypto.subtle.verify(\"HMAC\", key, signature, data2);\n return valid ? value : false;\n};\nvar createKey2 = async (secret, usages) => crypto.subtle.importKey(\n \"raw\",\n encoder.encode(secret),\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n usages\n);\nfunction byteStringToUint8Array(byteString) {\n let array = new Uint8Array(byteString.length);\n for (let i = 0; i < byteString.length; i++) {\n array[i] = byteString.charCodeAt(i);\n }\n return array;\n}\n\n// lib/server-runtime/cookies.ts\nvar createCookie = (name, cookieOptions = {}) => {\n let { secrets = [], ...options } = {\n path: \"/\",\n sameSite: \"lax\",\n ...cookieOptions\n };\n warnOnceAboutExpiresCookie(name, options.expires);\n return {\n get name() {\n return name;\n },\n get isSigned() {\n return secrets.length > 0;\n },\n get expires() {\n return typeof options.maxAge !== \"undefined\" ? new Date(Date.now() + options.maxAge * 1e3) : options.expires;\n },\n async parse(cookieHeader, parseOptions) {\n if (!cookieHeader) return null;\n let cookies = parse(cookieHeader, { ...options, ...parseOptions });\n if (name in cookies) {\n let value = cookies[name];\n if (typeof value === \"string\" && value !== \"\") {\n let decoded = await decodeCookieValue(value, secrets);\n return decoded;\n } else {\n return \"\";\n }\n } else {\n return null;\n }\n },\n async serialize(value, serializeOptions) {\n return serialize(\n name,\n value === \"\" ? \"\" : await encodeCookieValue(value, secrets),\n {\n ...options,\n ...serializeOptions\n }\n );\n }\n };\n};\nvar isCookie = (object) => {\n return object != null && typeof object.name === \"string\" && typeof object.isSigned === \"boolean\" && typeof object.parse === \"function\" && typeof object.serialize === \"function\";\n};\nasync function encodeCookieValue(value, secrets) {\n let encoded = encodeData(value);\n if (secrets.length > 0) {\n encoded = await sign(encoded, secrets[0]);\n }\n return encoded;\n}\nasync function decodeCookieValue(value, secrets) {\n if (secrets.length > 0) {\n for (let secret of secrets) {\n let unsignedValue = await unsign(value, secret);\n if (unsignedValue !== false) {\n return decodeData(unsignedValue);\n }\n }\n return null;\n }\n return decodeData(value);\n}\nfunction encodeData(value) {\n return btoa(myUnescape(encodeURIComponent(JSON.stringify(value))));\n}\nfunction decodeData(value) {\n try {\n return JSON.parse(decodeURIComponent(myEscape(atob(value))));\n } catch (error) {\n return {};\n }\n}\nfunction myEscape(value) {\n let str = value.toString();\n let result = \"\";\n let index = 0;\n let chr, code;\n while (index < str.length) {\n chr = str.charAt(index++);\n if (/[\\w*+\\-./@]/.exec(chr)) {\n result += chr;\n } else {\n code = chr.charCodeAt(0);\n if (code < 256) {\n result += \"%\" + hex(code, 2);\n } else {\n result += \"%u\" + hex(code, 4).toUpperCase();\n }\n }\n }\n return result;\n}\nfunction hex(code, length) {\n let result = code.toString(16);\n while (result.length < length) result = \"0\" + result;\n return result;\n}\nfunction myUnescape(value) {\n let str = value.toString();\n let result = \"\";\n let index = 0;\n let chr, part;\n while (index < str.length) {\n chr = str.charAt(index++);\n if (chr === \"%\") {\n if (str.charAt(index) === \"u\") {\n part = str.slice(index + 1, index + 5);\n if (/^[\\da-f]{4}$/i.exec(part)) {\n result += String.fromCharCode(parseInt(part, 16));\n index += 5;\n continue;\n }\n } else {\n part = str.slice(index, index + 2);\n if (/^[\\da-f]{2}$/i.exec(part)) {\n result += String.fromCharCode(parseInt(part, 16));\n index += 2;\n continue;\n }\n }\n }\n result += chr;\n }\n return result;\n}\nfunction warnOnceAboutExpiresCookie(name, expires) {\n warnOnce(\n !expires,\n `The \"${name}\" cookie has an \"expires\" property set. This will cause the expires value to not be updated when the session is committed. Instead, you should set the expires value when serializing the cookie. You can use \\`commitSession(session, { expires })\\` if using a session storage object, or \\`cookie.serialize(\"value\", { expires })\\` if you're using the cookie directly.`\n );\n}\n\n// lib/server-runtime/entry.ts\nfunction createEntryRouteModules(manifest) {\n return Object.keys(manifest).reduce((memo2, routeId) => {\n let route = manifest[routeId];\n if (route) {\n memo2[routeId] = route.module;\n }\n return memo2;\n }, {});\n}\n\n// lib/server-runtime/mode.ts\nvar ServerMode = /* @__PURE__ */ ((ServerMode2) => {\n ServerMode2[\"Development\"] = \"development\";\n ServerMode2[\"Production\"] = \"production\";\n ServerMode2[\"Test\"] = \"test\";\n return ServerMode2;\n})(ServerMode || {});\nfunction isServerMode(value) {\n return value === \"development\" /* Development */ || value === \"production\" /* Production */ || value === \"test\" /* Test */;\n}\n\n// lib/server-runtime/errors.ts\nfunction sanitizeError(error, serverMode) {\n if (error instanceof Error && serverMode !== \"development\" /* Development */) {\n let sanitized = new Error(\"Unexpected Server Error\");\n sanitized.stack = void 0;\n return sanitized;\n }\n return error;\n}\nfunction sanitizeErrors(errors, serverMode) {\n return Object.entries(errors).reduce((acc, [routeId, error]) => {\n return Object.assign(acc, { [routeId]: sanitizeError(error, serverMode) });\n }, {});\n}\nfunction serializeError(error, serverMode) {\n let sanitized = sanitizeError(error, serverMode);\n return {\n message: sanitized.message,\n stack: sanitized.stack\n };\n}\nfunction serializeErrors2(errors, serverMode) {\n if (!errors) return null;\n let entries = Object.entries(errors);\n let serialized = {};\n for (let [key, val] of entries) {\n if (isRouteErrorResponse(val)) {\n serialized[key] = { ...val, __type: \"RouteErrorResponse\" };\n } else if (val instanceof Error) {\n let sanitized = sanitizeError(val, serverMode);\n serialized[key] = {\n message: sanitized.message,\n stack: sanitized.stack,\n __type: \"Error\",\n // If this is a subclass (i.e., ReferenceError), send up the type so we\n // can re-create the same type during hydration. This will only apply\n // in dev mode since all production errors are sanitized to normal\n // Error instances\n ...sanitized.name !== \"Error\" ? {\n __subType: sanitized.name\n } : {}\n };\n } else {\n serialized[key] = val;\n }\n }\n return serialized;\n}\n\n// lib/server-runtime/routeMatching.ts\nfunction matchServerRoutes(routes, pathname, basename) {\n let matches = matchRoutes(\n routes,\n pathname,\n basename\n );\n if (!matches) return null;\n return matches.map((match) => ({\n params: match.params,\n pathname: match.pathname,\n route: match.route\n }));\n}\n\n// lib/server-runtime/data.ts\nasync function callRouteHandler(handler, args) {\n let result = await handler({\n request: stripRoutesParam(stripIndexParam2(args.request)),\n params: args.params,\n context: args.context\n });\n if (isDataWithResponseInit(result) && result.init && result.init.status && isRedirectStatusCode(result.init.status)) {\n throw new Response(null, result.init);\n }\n return result;\n}\nfunction stripIndexParam2(request) {\n let url = new URL(request.url);\n let indexValues = url.searchParams.getAll(\"index\");\n url.searchParams.delete(\"index\");\n let indexValuesToKeep = [];\n for (let indexValue of indexValues) {\n if (indexValue) {\n indexValuesToKeep.push(indexValue);\n }\n }\n for (let toKeep of indexValuesToKeep) {\n url.searchParams.append(\"index\", toKeep);\n }\n let init = {\n method: request.method,\n body: request.body,\n headers: request.headers,\n signal: request.signal\n };\n if (init.body) {\n init.duplex = \"half\";\n }\n return new Request(url.href, init);\n}\nfunction stripRoutesParam(request) {\n let url = new URL(request.url);\n url.searchParams.delete(\"_routes\");\n let init = {\n method: request.method,\n body: request.body,\n headers: request.headers,\n signal: request.signal\n };\n if (init.body) {\n init.duplex = \"half\";\n }\n return new Request(url.href, init);\n}\n\n// lib/server-runtime/invariant.ts\nfunction invariant3(value, message) {\n if (value === false || value === null || typeof value === \"undefined\") {\n console.error(\n \"The following error is a bug in React Router; please open an issue! https://github.com/remix-run/react-router/issues/new/choose\"\n );\n throw new Error(message);\n }\n}\n\n// lib/server-runtime/routes.ts\nfunction groupRoutesByParentId2(manifest) {\n let routes = {};\n Object.values(manifest).forEach((route) => {\n if (route) {\n let parentId = route.parentId || \"\";\n if (!routes[parentId]) {\n routes[parentId] = [];\n }\n routes[parentId].push(route);\n }\n });\n return routes;\n}\nfunction createRoutes(manifest, parentId = \"\", routesByParentId = groupRoutesByParentId2(manifest)) {\n return (routesByParentId[parentId] || []).map((route) => ({\n ...route,\n children: createRoutes(manifest, route.id, routesByParentId)\n }));\n}\nfunction createStaticHandlerDataRoutes(manifest, future, parentId = \"\", routesByParentId = groupRoutesByParentId2(manifest)) {\n return (routesByParentId[parentId] || []).map((route) => {\n let commonRoute = {\n // Always include root due to default boundaries\n hasErrorBoundary: route.id === \"root\" || route.module.ErrorBoundary != null,\n id: route.id,\n path: route.path,\n unstable_middleware: route.module.unstable_middleware,\n // Need to use RR's version in the param typed here to permit the optional\n // context even though we know it'll always be provided in remix\n loader: route.module.loader ? async (args) => {\n if (args.request.headers.has(\"X-React-Router-Prerender-Data\")) {\n const preRenderedData = args.request.headers.get(\n \"X-React-Router-Prerender-Data\"\n );\n let encoded = preRenderedData ? decodeURI(preRenderedData) : preRenderedData;\n invariant3(encoded, \"Missing prerendered data for route\");\n let uint8array = new TextEncoder().encode(encoded);\n let stream = new ReadableStream({\n start(controller) {\n controller.enqueue(uint8array);\n controller.close();\n }\n });\n let decoded = await decodeViaTurboStream(stream, global);\n let data2 = decoded.value;\n invariant3(\n data2 && route.id in data2,\n \"Unable to decode prerendered data\"\n );\n let result = data2[route.id];\n invariant3(\"data\" in result, \"Unable to process prerendered data\");\n return result.data;\n }\n let val = await callRouteHandler(route.module.loader, args);\n return val;\n } : void 0,\n action: route.module.action ? (args) => callRouteHandler(route.module.action, args) : void 0,\n handle: route.module.handle\n };\n return route.index ? {\n index: true,\n ...commonRoute\n } : {\n caseSensitive: route.caseSensitive,\n children: createStaticHandlerDataRoutes(\n manifest,\n future,\n route.id,\n routesByParentId\n ),\n ...commonRoute\n };\n });\n}\n\n// lib/server-runtime/markup.ts\nvar ESCAPE_LOOKUP3 = {\n \"&\": \"\\\\u0026\",\n \">\": \"\\\\u003e\",\n \"<\": \"\\\\u003c\",\n \"\\u2028\": \"\\\\u2028\",\n \"\\u2029\": \"\\\\u2029\"\n};\nvar ESCAPE_REGEX3 = /[&><\\u2028\\u2029]/g;\nfunction escapeHtml2(html) {\n return html.replace(ESCAPE_REGEX3, (match) => ESCAPE_LOOKUP3[match]);\n}\n\n// lib/server-runtime/serverHandoff.ts\nfunction createServerHandoffString(serverHandoff) {\n return escapeHtml2(JSON.stringify(serverHandoff));\n}\n\n// lib/server-runtime/dev.ts\nvar globalDevServerHooksKey = \"__reactRouterDevServerHooks\";\nfunction setDevServerHooks(devServerHooks) {\n globalThis[globalDevServerHooksKey] = devServerHooks;\n}\nfunction getDevServerHooks() {\n return globalThis[globalDevServerHooksKey];\n}\n\n// lib/server-runtime/single-fetch.ts\nimport { encode } from \"turbo-stream\";\n\n// lib/server-runtime/headers.ts\nimport { splitCookiesString } from \"set-cookie-parser\";\nfunction getDocumentHeaders(build, context) {\n let boundaryIdx = context.errors ? context.matches.findIndex((m) => context.errors[m.route.id]) : -1;\n let matches = boundaryIdx >= 0 ? context.matches.slice(0, boundaryIdx + 1) : context.matches;\n let errorHeaders;\n if (boundaryIdx >= 0) {\n let { actionHeaders, actionData, loaderHeaders, loaderData } = context;\n context.matches.slice(boundaryIdx).some((match) => {\n let id = match.route.id;\n if (actionHeaders[id] && (!actionData || !actionData.hasOwnProperty(id))) {\n errorHeaders = actionHeaders[id];\n } else if (loaderHeaders[id] && !loaderData.hasOwnProperty(id)) {\n errorHeaders = loaderHeaders[id];\n }\n return errorHeaders != null;\n });\n }\n return matches.reduce((parentHeaders, match, idx) => {\n let { id } = match.route;\n let route = build.routes[id];\n invariant3(route, `Route with id \"${id}\" not found in build`);\n let routeModule = route.module;\n let loaderHeaders = context.loaderHeaders[id] || new Headers();\n let actionHeaders = context.actionHeaders[id] || new Headers();\n let includeErrorHeaders = errorHeaders != null && idx === matches.length - 1;\n let includeErrorCookies = includeErrorHeaders && errorHeaders !== loaderHeaders && errorHeaders !== actionHeaders;\n if (routeModule.headers == null) {\n let headers2 = new Headers(parentHeaders);\n if (includeErrorCookies) {\n prependCookies(errorHeaders, headers2);\n }\n prependCookies(actionHeaders, headers2);\n prependCookies(loaderHeaders, headers2);\n return headers2;\n }\n let headers = new Headers(\n routeModule.headers ? typeof routeModule.headers === \"function\" ? routeModule.headers({\n loaderHeaders,\n parentHeaders,\n actionHeaders,\n errorHeaders: includeErrorHeaders ? errorHeaders : void 0\n }) : routeModule.headers : void 0\n );\n if (includeErrorCookies) {\n prependCookies(errorHeaders, headers);\n }\n prependCookies(actionHeaders, headers);\n prependCookies(loaderHeaders, headers);\n prependCookies(parentHeaders, headers);\n return headers;\n }, new Headers());\n}\nfunction prependCookies(parentHeaders, childHeaders) {\n let parentSetCookieString = parentHeaders.get(\"Set-Cookie\");\n if (parentSetCookieString) {\n let cookies = splitCookiesString(parentSetCookieString);\n let childCookies = new Set(childHeaders.getSetCookie());\n cookies.forEach((cookie) => {\n if (!childCookies.has(cookie)) {\n childHeaders.append(\"Set-Cookie\", cookie);\n }\n });\n }\n}\n\n// lib/server-runtime/single-fetch.ts\nvar NO_BODY_STATUS_CODES = /* @__PURE__ */ new Set([100, 101, 204, 205, 304]);\nvar SINGLE_FETCH_REDIRECT_STATUS = 202;\nasync function singleFetchAction(build, serverMode, staticHandler, request, handlerUrl, loadContext, handleError) {\n try {\n let respond2 = function(context) {\n let headers = getDocumentHeaders(build, context);\n if (isRedirectStatusCode(context.statusCode) && headers.has(\"Location\")) {\n return generateSingleFetchResponse(request, build, serverMode, {\n result: getSingleFetchRedirect(\n context.statusCode,\n headers,\n build.basename\n ),\n headers,\n status: SINGLE_FETCH_REDIRECT_STATUS\n });\n }\n if (context.errors) {\n Object.values(context.errors).forEach((err) => {\n if (!isRouteErrorResponse(err) || err.error) {\n handleError(err);\n }\n });\n context.errors = sanitizeErrors(context.errors, serverMode);\n }\n let singleFetchResult;\n if (context.errors) {\n singleFetchResult = { error: Object.values(context.errors)[0] };\n } else {\n singleFetchResult = {\n data: Object.values(context.actionData || {})[0]\n };\n }\n return generateSingleFetchResponse(request, build, serverMode, {\n result: singleFetchResult,\n headers,\n status: context.statusCode\n });\n };\n var respond = respond2;\n let handlerRequest = new Request(handlerUrl, {\n method: request.method,\n body: request.body,\n headers: request.headers,\n signal: request.signal,\n ...request.body ? { duplex: \"half\" } : void 0\n });\n let result = await staticHandler.query(handlerRequest, {\n requestContext: loadContext,\n skipLoaderErrorBubbling: true,\n skipRevalidation: true,\n unstable_respond: respond2\n });\n if (!isResponse(result)) {\n result = respond2(result);\n }\n if (isRedirectResponse(result)) {\n return generateSingleFetchResponse(request, build, serverMode, {\n result: getSingleFetchRedirect(\n result.status,\n result.headers,\n build.basename\n ),\n headers: result.headers,\n status: SINGLE_FETCH_REDIRECT_STATUS\n });\n }\n return result;\n } catch (error) {\n handleError(error);\n return generateSingleFetchResponse(request, build, serverMode, {\n result: { error },\n headers: new Headers(),\n status: 500\n });\n }\n}\nasync function singleFetchLoaders(build, serverMode, staticHandler, request, handlerUrl, loadContext, handleError) {\n try {\n let respond2 = function(context) {\n let headers = getDocumentHeaders(build, context);\n if (isRedirectStatusCode(context.statusCode) && headers.has(\"Location\")) {\n return generateSingleFetchResponse(request, build, serverMode, {\n result: {\n [SingleFetchRedirectSymbol]: getSingleFetchRedirect(\n context.statusCode,\n headers,\n build.basename\n )\n },\n headers,\n status: SINGLE_FETCH_REDIRECT_STATUS\n });\n }\n if (context.errors) {\n Object.values(context.errors).forEach((err) => {\n if (!isRouteErrorResponse(err) || err.error) {\n handleError(err);\n }\n });\n context.errors = sanitizeErrors(context.errors, serverMode);\n }\n let results = {};\n let loadedMatches = new Set(\n context.matches.filter(\n (m) => loadRouteIds ? loadRouteIds.has(m.route.id) : m.route.loader != null\n ).map((m) => m.route.id)\n );\n if (context.errors) {\n for (let [id, error] of Object.entries(context.errors)) {\n results[id] = { error };\n }\n }\n for (let [id, data2] of Object.entries(context.loaderData)) {\n if (!(id in results) && loadedMatches.has(id)) {\n results[id] = { data: data2 };\n }\n }\n return generateSingleFetchResponse(request, build, serverMode, {\n result: results,\n headers,\n status: context.statusCode\n });\n };\n var respond = respond2;\n let handlerRequest = new Request(handlerUrl, {\n headers: request.headers,\n signal: request.signal\n });\n let routesParam = new URL(request.url).searchParams.get(\"_routes\");\n let loadRouteIds = routesParam ? new Set(routesParam.split(\",\")) : null;\n let result = await staticHandler.query(handlerRequest, {\n requestContext: loadContext,\n filterMatchesToLoad: (m) => !loadRouteIds || loadRouteIds.has(m.route.id),\n skipLoaderErrorBubbling: true,\n unstable_respond: respond2\n });\n if (!isResponse(result)) {\n result = respond2(result);\n }\n if (isRedirectResponse(result)) {\n return generateSingleFetchResponse(request, build, serverMode, {\n result: {\n [SingleFetchRedirectSymbol]: getSingleFetchRedirect(\n result.status,\n result.headers,\n build.basename\n )\n },\n headers: result.headers,\n status: SINGLE_FETCH_REDIRECT_STATUS\n });\n }\n return result;\n } catch (error) {\n handleError(error);\n return generateSingleFetchResponse(request, build, serverMode, {\n result: { root: { error } },\n headers: new Headers(),\n status: 500\n });\n }\n}\nfunction generateSingleFetchResponse(request, build, serverMode, {\n result,\n headers,\n status\n}) {\n let resultHeaders = new Headers(headers);\n resultHeaders.set(\"X-Remix-Response\", \"yes\");\n if (NO_BODY_STATUS_CODES.has(status)) {\n return new Response(null, { status, headers: resultHeaders });\n }\n resultHeaders.set(\"Content-Type\", \"text/x-script\");\n return new Response(\n encodeViaTurboStream(\n result,\n request.signal,\n build.entry.module.streamTimeout,\n serverMode\n ),\n {\n status: status || 200,\n headers: resultHeaders\n }\n );\n}\nfunction getSingleFetchRedirect(status, headers, basename) {\n let redirect2 = headers.get(\"Location\");\n if (basename) {\n redirect2 = stripBasename(redirect2, basename) || redirect2;\n }\n return {\n redirect: redirect2,\n status,\n revalidate: (\n // Technically X-Remix-Revalidate isn't needed here - that was an implementation\n // detail of ?_data requests as our way to tell the front end to revalidate when\n // we didn't have a response body to include that information in.\n // With single fetch, we tell the front end via this revalidate boolean field.\n // However, we're respecting it for now because it may be something folks have\n // used in their own responses\n // TODO(v3): Consider removing or making this official public API\n headers.has(\"X-Remix-Revalidate\") || headers.has(\"Set-Cookie\")\n ),\n reload: headers.has(\"X-Remix-Reload-Document\"),\n replace: headers.has(\"X-Remix-Replace\")\n };\n}\nfunction encodeViaTurboStream(data2, requestSignal, streamTimeout, serverMode) {\n let controller = new AbortController();\n let timeoutId = setTimeout(\n () => controller.abort(new Error(\"Server Timeout\")),\n typeof streamTimeout === \"number\" ? streamTimeout : 4950\n );\n requestSignal.addEventListener(\"abort\", () => clearTimeout(timeoutId));\n return encode(data2, {\n signal: controller.signal,\n plugins: [\n (value) => {\n if (value instanceof Error) {\n let { name, message, stack } = serverMode === \"production\" /* Production */ ? sanitizeError(value, serverMode) : value;\n return [\"SanitizedError\", name, message, stack];\n }\n if (value instanceof ErrorResponseImpl) {\n let { data: data3, status, statusText } = value;\n return [\"ErrorResponse\", data3, status, statusText];\n }\n if (value && typeof value === \"object\" && SingleFetchRedirectSymbol in value) {\n return [\"SingleFetchRedirect\", value[SingleFetchRedirectSymbol]];\n }\n }\n ],\n postPlugins: [\n (value) => {\n if (!value) return;\n if (typeof value !== \"object\") return;\n return [\n \"SingleFetchClassInstance\",\n Object.fromEntries(Object.entries(value))\n ];\n },\n () => [\"SingleFetchFallback\"]\n ]\n });\n}\n\n// lib/server-runtime/server.ts\nfunction derive(build, mode) {\n let routes = createRoutes(build.routes);\n let dataRoutes = createStaticHandlerDataRoutes(build.routes, build.future);\n let serverMode = isServerMode(mode) ? mode : \"production\" /* Production */;\n let staticHandler = createStaticHandler(dataRoutes, {\n basename: build.basename\n });\n let errorHandler = build.entry.module.handleError || ((error, { request }) => {\n if (serverMode !== \"test\" /* Test */ && !request.signal.aborted) {\n console.error(\n // @ts-expect-error This is \"private\" from users but intended for internal use\n isRouteErrorResponse(error) && error.error ? error.error : error\n );\n }\n });\n return {\n routes,\n dataRoutes,\n serverMode,\n staticHandler,\n errorHandler\n };\n}\nvar createRequestHandler = (build, mode) => {\n let _build;\n let routes;\n let serverMode;\n let staticHandler;\n let errorHandler;\n return async function requestHandler(request, initialContext) {\n _build = typeof build === \"function\" ? await build() : build;\n let loadContext = _build.future.unstable_middleware ? new unstable_RouterContextProvider(\n initialContext\n ) : initialContext || {};\n if (typeof build === \"function\") {\n let derived = derive(_build, mode);\n routes = derived.routes;\n serverMode = derived.serverMode;\n staticHandler = derived.staticHandler;\n errorHandler = derived.errorHandler;\n } else if (!routes || !serverMode || !staticHandler || !errorHandler) {\n let derived = derive(_build, mode);\n routes = derived.routes;\n serverMode = derived.serverMode;\n staticHandler = derived.staticHandler;\n errorHandler = derived.errorHandler;\n }\n let url = new URL(request.url);\n let normalizedBasename = _build.basename || \"/\";\n let normalizedPath = url.pathname;\n if (stripBasename(normalizedPath, normalizedBasename) === \"/_root.data\") {\n normalizedPath = normalizedBasename;\n } else if (normalizedPath.endsWith(\".data\")) {\n normalizedPath = normalizedPath.replace(/\\.data$/, \"\");\n }\n if (stripBasename(normalizedPath, normalizedBasename) !== \"/\" && normalizedPath.endsWith(\"/\")) {\n normalizedPath = normalizedPath.slice(0, -1);\n }\n let params = {};\n let handleError = (error) => {\n if (mode === \"development\" /* Development */) {\n getDevServerHooks()?.processRequestError?.(error);\n }\n errorHandler(error, {\n context: loadContext,\n params,\n request\n });\n };\n if (!_build.ssr) {\n if (_build.prerender.length === 0) {\n request.headers.set(\"X-React-Router-SPA-Mode\", \"yes\");\n } else if (!_build.prerender.includes(normalizedPath) && !_build.prerender.includes(normalizedPath + \"/\")) {\n if (url.pathname.endsWith(\".data\")) {\n errorHandler(\n new ErrorResponseImpl(\n 404,\n \"Not Found\",\n `Refusing to SSR the path \\`${normalizedPath}\\` because \\`ssr:false\\` is set and the path is not included in the \\`prerender\\` config, so in production the path will be a 404.`\n ),\n {\n context: loadContext,\n params,\n request\n }\n );\n return new Response(\"Not Found\", {\n status: 404,\n statusText: \"Not Found\"\n });\n } else {\n request.headers.set(\"X-React-Router-SPA-Mode\", \"yes\");\n }\n }\n }\n let manifestUrl = `${normalizedBasename}/__manifest`.replace(/\\/+/g, \"/\");\n if (url.pathname === manifestUrl) {\n try {\n let res = await handleManifestRequest(_build, routes, url);\n return res;\n } catch (e) {\n handleError(e);\n return new Response(\"Unknown Server Error\", { status: 500 });\n }\n }\n let matches = matchServerRoutes(routes, url.pathname, _build.basename);\n if (matches && matches.length > 0) {\n Object.assign(params, matches[0].params);\n }\n let response;\n if (url.pathname.endsWith(\".data\")) {\n let handlerUrl = new URL(request.url);\n handlerUrl.pathname = normalizedPath;\n let singleFetchMatches = matchServerRoutes(\n routes,\n handlerUrl.pathname,\n _build.basename\n );\n response = await handleSingleFetchRequest(\n serverMode,\n _build,\n staticHandler,\n request,\n handlerUrl,\n loadContext,\n handleError\n );\n if (_build.entry.module.handleDataRequest) {\n response = await _build.entry.module.handleDataRequest(response, {\n context: loadContext,\n params: singleFetchMatches ? singleFetchMatches[0].params : {},\n request\n });\n if (isRedirectResponse(response)) {\n let result = getSingleFetchRedirect(\n response.status,\n response.headers,\n _build.basename\n );\n if (request.method === \"GET\") {\n result = {\n [SingleFetchRedirectSymbol]: result\n };\n }\n let headers = new Headers(response.headers);\n headers.set(\"Content-Type\", \"text/x-script\");\n return new Response(\n encodeViaTurboStream(\n result,\n request.signal,\n _build.entry.module.streamTimeout,\n serverMode\n ),\n {\n status: SINGLE_FETCH_REDIRECT_STATUS,\n headers\n }\n );\n }\n }\n } else if (!request.headers.has(\"X-React-Router-SPA-Mode\") && matches && matches[matches.length - 1].route.module.default == null && matches[matches.length - 1].route.module.ErrorBoundary == null) {\n response = await handleResourceRequest(\n serverMode,\n _build,\n staticHandler,\n matches.slice(-1)[0].route.id,\n request,\n loadContext,\n handleError\n );\n } else {\n let { pathname } = url;\n let criticalCss = void 0;\n if (_build.unstable_getCriticalCss) {\n criticalCss = await _build.unstable_getCriticalCss({ pathname });\n } else if (mode === \"development\" /* Development */ && getDevServerHooks()?.getCriticalCss) {\n criticalCss = await getDevServerHooks()?.getCriticalCss?.(pathname);\n }\n response = await handleDocumentRequest(\n serverMode,\n _build,\n staticHandler,\n request,\n loadContext,\n handleError,\n criticalCss\n );\n }\n if (request.method === \"HEAD\") {\n return new Response(null, {\n headers: response.headers,\n status: response.status,\n statusText: response.statusText\n });\n }\n return response;\n };\n};\nasync function handleManifestRequest(build, routes, url) {\n if (build.assets.version !== url.searchParams.get(\"version\")) {\n return new Response(null, {\n status: 204,\n headers: {\n \"X-Remix-Reload-Document\": \"true\"\n }\n });\n }\n let patches = {};\n if (url.searchParams.has(\"p\")) {\n let paths = /* @__PURE__ */ new Set();\n url.searchParams.getAll(\"p\").forEach((path) => {\n if (!path.startsWith(\"/\")) {\n path = `/${path}`;\n }\n let segments = path.split(\"/\").slice(1);\n segments.forEach((_, i) => {\n let partialPath = segments.slice(0, i + 1).join(\"/\");\n paths.add(`/${partialPath}`);\n });\n });\n for (let path of paths) {\n let matches = matchServerRoutes(routes, path, build.basename);\n if (matches) {\n for (let match of matches) {\n let routeId = match.route.id;\n let route = build.assets.routes[routeId];\n if (route) {\n patches[routeId] = route;\n }\n }\n }\n }\n return Response.json(patches, {\n headers: {\n \"Cache-Control\": \"public, max-age=31536000, immutable\"\n }\n });\n }\n return new Response(\"Invalid Request\", { status: 400 });\n}\nasync function handleSingleFetchRequest(serverMode, build, staticHandler, request, handlerUrl, loadContext, handleError) {\n let response = request.method !== \"GET\" ? await singleFetchAction(\n build,\n serverMode,\n staticHandler,\n request,\n handlerUrl,\n loadContext,\n handleError\n ) : await singleFetchLoaders(\n build,\n serverMode,\n staticHandler,\n request,\n handlerUrl,\n loadContext,\n handleError\n );\n return response;\n}\nasync function handleDocumentRequest(serverMode, build, staticHandler, request, loadContext, handleError, criticalCss) {\n let isSpaMode = request.headers.has(\"X-React-Router-SPA-Mode\");\n try {\n let response = await staticHandler.query(request, {\n requestContext: loadContext,\n unstable_respond: build.future.unstable_middleware ? (ctx) => renderHtml(ctx, isSpaMode) : void 0\n });\n return isResponse(response) ? response : renderHtml(response, isSpaMode);\n } catch (error) {\n handleError(error);\n return new Response(null, { status: 500 });\n }\n async function renderHtml(context, isSpaMode2) {\n if (isResponse(context)) {\n return context;\n }\n let headers = getDocumentHeaders(build, context);\n if (NO_BODY_STATUS_CODES.has(context.statusCode)) {\n return new Response(null, { status: context.statusCode, headers });\n }\n if (context.errors) {\n Object.values(context.errors).forEach((err) => {\n if (!isRouteErrorResponse(err) || err.error) {\n handleError(err);\n }\n });\n context.errors = sanitizeErrors(context.errors, serverMode);\n }\n let state = {\n loaderData: context.loaderData,\n actionData: context.actionData,\n errors: serializeErrors2(context.errors, serverMode)\n };\n let entryContext = {\n manifest: build.assets,\n routeModules: createEntryRouteModules(build.routes),\n staticHandlerContext: context,\n criticalCss,\n serverHandoffString: createServerHandoffString({\n basename: build.basename,\n criticalCss,\n future: build.future,\n ssr: build.ssr,\n isSpaMode: isSpaMode2\n }),\n serverHandoffStream: encodeViaTurboStream(\n state,\n request.signal,\n build.entry.module.streamTimeout,\n serverMode\n ),\n renderMeta: {},\n future: build.future,\n ssr: build.ssr,\n isSpaMode: isSpaMode2,\n serializeError: (err) => serializeError(err, serverMode)\n };\n let handleDocumentRequestFunction = build.entry.module.default;\n try {\n return await handleDocumentRequestFunction(\n request,\n context.statusCode,\n headers,\n entryContext,\n loadContext\n );\n } catch (error) {\n handleError(error);\n let errorForSecondRender = error;\n if (isResponse(error)) {\n try {\n let data2 = await unwrapResponse(error);\n errorForSecondRender = new ErrorResponseImpl(\n error.status,\n error.statusText,\n data2\n );\n } catch (e) {\n }\n }\n context = getStaticContextFromError(\n staticHandler.dataRoutes,\n context,\n errorForSecondRender\n );\n if (context.errors) {\n context.errors = sanitizeErrors(context.errors, serverMode);\n }\n let state2 = {\n loaderData: context.loaderData,\n actionData: context.actionData,\n errors: serializeErrors2(context.errors, serverMode)\n };\n entryContext = {\n ...entryContext,\n staticHandlerContext: context,\n serverHandoffString: createServerHandoffString({\n basename: build.basename,\n future: build.future,\n ssr: build.ssr,\n isSpaMode: isSpaMode2\n }),\n serverHandoffStream: encodeViaTurboStream(\n state2,\n request.signal,\n build.entry.module.streamTimeout,\n serverMode\n ),\n renderMeta: {}\n };\n try {\n return await handleDocumentRequestFunction(\n request,\n context.statusCode,\n headers,\n entryContext,\n loadContext\n );\n } catch (error2) {\n handleError(error2);\n return returnLastResortErrorResponse(error2, serverMode);\n }\n }\n }\n}\nasync function handleResourceRequest(serverMode, build, staticHandler, routeId, request, loadContext, handleError) {\n try {\n let response = await staticHandler.queryRoute(request, {\n routeId,\n requestContext: loadContext,\n unstable_respond: build.future.unstable_middleware ? (ctx) => ctx : void 0\n });\n if (isResponse(response)) {\n return response;\n }\n if (typeof response === \"string\") {\n return new Response(response);\n }\n return Response.json(response);\n } catch (error) {\n if (isResponse(error)) {\n error.headers.set(\"X-Remix-Catch\", \"yes\");\n return error;\n }\n if (isRouteErrorResponse(error)) {\n if (error) {\n handleError(error);\n }\n return errorResponseToJson(error, serverMode);\n }\n if (error instanceof Error && error.message === \"Expected a response from queryRoute\") {\n let newError = new Error(\n \"Expected a Response to be returned from resource route handler\"\n );\n handleError(newError);\n return returnLastResortErrorResponse(newError, serverMode);\n }\n handleError(error);\n return returnLastResortErrorResponse(error, serverMode);\n }\n}\nfunction errorResponseToJson(errorResponse, serverMode) {\n return Response.json(\n serializeError(\n // @ts-expect-error This is \"private\" from users but intended for internal use\n errorResponse.error || new Error(\"Unexpected Server Error\"),\n serverMode\n ),\n {\n status: errorResponse.status,\n statusText: errorResponse.statusText,\n headers: {\n \"X-Remix-Error\": \"yes\"\n }\n }\n );\n}\nfunction returnLastResortErrorResponse(error, serverMode) {\n let message = \"Unexpected Server Error\";\n if (serverMode !== \"production\" /* Production */) {\n message += `\n\n${String(error)}`;\n }\n return new Response(message, {\n status: 500,\n headers: {\n \"Content-Type\": \"text/plain\"\n }\n });\n}\nfunction unwrapResponse(response) {\n let contentType = response.headers.get(\"Content-Type\");\n return contentType && /\\bapplication\\/json\\b/.test(contentType) ? response.body == null ? null : response.json() : response.text();\n}\n\n// lib/server-runtime/sessions.ts\nfunction flash(name) {\n return `__flash_${name}__`;\n}\nvar createSession = (initialData = {}, id = \"\") => {\n let map = new Map(Object.entries(initialData));\n return {\n get id() {\n return id;\n },\n get data() {\n return Object.fromEntries(map);\n },\n has(name) {\n return map.has(name) || map.has(flash(name));\n },\n get(name) {\n if (map.has(name)) return map.get(name);\n let flashName = flash(name);\n if (map.has(flashName)) {\n let value = map.get(flashName);\n map.delete(flashName);\n return value;\n }\n return void 0;\n },\n set(name, value) {\n map.set(name, value);\n },\n flash(name, value) {\n map.set(flash(name), value);\n },\n unset(name) {\n map.delete(name);\n }\n };\n};\nvar isSession = (object) => {\n return object != null && typeof object.id === \"string\" && typeof object.data !== \"undefined\" && typeof object.has === \"function\" && typeof object.get === \"function\" && typeof object.set === \"function\" && typeof object.flash === \"function\" && typeof object.unset === \"function\";\n};\nfunction createSessionStorage({\n cookie: cookieArg,\n createData,\n readData,\n updateData,\n deleteData\n}) {\n let cookie = isCookie(cookieArg) ? cookieArg : createCookie(cookieArg?.name || \"__session\", cookieArg);\n warnOnceAboutSigningSessionCookie(cookie);\n return {\n async getSession(cookieHeader, options) {\n let id = cookieHeader && await cookie.parse(cookieHeader, options);\n let data2 = id && await readData(id);\n return createSession(data2 || {}, id || \"\");\n },\n async commitSession(session, options) {\n let { id, data: data2 } = session;\n let expires = options?.maxAge != null ? new Date(Date.now() + options.maxAge * 1e3) : options?.expires != null ? options.expires : cookie.expires;\n if (id) {\n await updateData(id, data2, expires);\n } else {\n id = await createData(data2, expires);\n }\n return cookie.serialize(id, options);\n },\n async destroySession(session, options) {\n await deleteData(session.id);\n return cookie.serialize(\"\", {\n ...options,\n maxAge: void 0,\n expires: /* @__PURE__ */ new Date(0)\n });\n }\n };\n}\nfunction warnOnceAboutSigningSessionCookie(cookie) {\n warnOnce(\n cookie.isSigned,\n `The \"${cookie.name}\" cookie is not signed, but session cookies should be signed to prevent tampering on the client before they are sent back to the server. See https://remix.run/utils/cookies#signing-cookies for more information.`\n );\n}\n\n// lib/server-runtime/sessions/cookieStorage.ts\nfunction createCookieSessionStorage({ cookie: cookieArg } = {}) {\n let cookie = isCookie(cookieArg) ? cookieArg : createCookie(cookieArg?.name || \"__session\", cookieArg);\n warnOnceAboutSigningSessionCookie(cookie);\n return {\n async getSession(cookieHeader, options) {\n return createSession(\n cookieHeader && await cookie.parse(cookieHeader, options) || {}\n );\n },\n async commitSession(session, options) {\n let serializedCookie = await cookie.serialize(session.data, options);\n if (serializedCookie.length > 4096) {\n throw new Error(\n \"Cookie length will exceed browser maximum. Length: \" + serializedCookie.length\n );\n }\n return serializedCookie;\n },\n async destroySession(_session, options) {\n return cookie.serialize(\"\", {\n ...options,\n maxAge: void 0,\n expires: /* @__PURE__ */ new Date(0)\n });\n }\n };\n}\n\n// lib/server-runtime/sessions/memoryStorage.ts\nfunction createMemorySessionStorage({ cookie } = {}) {\n let map = /* @__PURE__ */ new Map();\n return createSessionStorage({\n cookie,\n async createData(data2, expires) {\n let id = Math.random().toString(36).substring(2, 10);\n map.set(id, { data: data2, expires });\n return id;\n },\n async readData(id) {\n if (map.has(id)) {\n let { data: data2, expires } = map.get(id);\n if (!expires || expires > /* @__PURE__ */ new Date()) {\n return data2;\n }\n if (expires) map.delete(id);\n }\n return null;\n },\n async updateData(id, data2, expires) {\n map.set(id, { data: data2, expires });\n },\n async deleteData(id) {\n map.delete(id);\n }\n });\n}\n\n// lib/href.ts\nfunction href(path, ...args) {\n let params = args[0];\n return path.split(\"/\").map((segment) => {\n const match = segment.match(/^:([\\w-]+)(\\?)?/);\n if (!match) return segment;\n const param = match[1];\n const value = params ? params[param] : void 0;\n const isRequired = match[2] === void 0;\n if (isRequired && value === void 0) {\n throw Error(\n `Path '${path}' requires param '${param}' but it was not provided`\n );\n }\n return value;\n }).filter((segment) => segment !== void 0).join(\"/\");\n}\n\n// lib/dom/ssr/errors.ts\nfunction deserializeErrors2(errors) {\n if (!errors) return null;\n let entries = Object.entries(errors);\n let serialized = {};\n for (let [key, val] of entries) {\n if (val && val.__type === \"RouteErrorResponse\") {\n serialized[key] = new ErrorResponseImpl(\n val.status,\n val.statusText,\n val.data,\n val.internal === true\n );\n } else if (val && val.__type === \"Error\") {\n if (val.__subType) {\n let ErrorConstructor = window[val.__subType];\n if (typeof ErrorConstructor === \"function\") {\n try {\n let error = new ErrorConstructor(val.message);\n error.stack = val.stack;\n serialized[key] = error;\n } catch (e) {\n }\n }\n }\n if (serialized[key] == null) {\n let error = new Error(val.message);\n error.stack = val.stack;\n serialized[key] = error;\n }\n } else {\n serialized[key] = val;\n }\n }\n return serialized;\n}\n\nexport {\n Action,\n createBrowserHistory,\n invariant,\n createPath,\n parsePath,\n unstable_createContext,\n unstable_RouterContextProvider,\n matchRoutes,\n generatePath,\n matchPath,\n resolvePath,\n data,\n redirect,\n redirectDocument,\n replace,\n ErrorResponseImpl,\n isRouteErrorResponse,\n IDLE_NAVIGATION,\n IDLE_FETCHER,\n IDLE_BLOCKER,\n createRouter,\n DataRouterContext,\n DataRouterStateContext,\n ViewTransitionContext,\n FetchersContext,\n NavigationContext,\n LocationContext,\n RouteContext,\n useHref,\n useInRouterContext,\n useLocation,\n useNavigationType,\n useMatch,\n useNavigate,\n useOutletContext,\n useOutlet,\n useParams,\n useResolvedPath,\n useRoutes,\n useNavigation,\n useRevalidator,\n useMatches,\n useLoaderData,\n useRouteLoaderData,\n useActionData,\n useRouteError,\n useAsyncValue,\n useAsyncError,\n useBlocker,\n mapRouteProperties,\n createMemoryRouter,\n RouterProvider,\n MemoryRouter,\n Navigate,\n Outlet,\n Route,\n Router,\n Routes,\n Await,\n createRoutesFromChildren,\n createRoutesFromElements,\n renderMatches,\n createSearchParams,\n SingleFetchRedirectSymbol,\n getSingleFetchDataStrategy,\n decodeViaTurboStream,\n RemixErrorBoundary,\n createClientRoutesWithHMRRevalidationOptOut,\n createClientRoutes,\n shouldHydrateRouteLoader,\n getPatchRoutesOnNavigationFunction,\n useFogOFWarDiscovery,\n FrameworkContext,\n Links,\n PrefetchPageLinks,\n Meta,\n Scripts,\n createBrowserRouter,\n createHashRouter,\n BrowserRouter,\n HashRouter,\n HistoryRouter,\n Link,\n NavLink,\n Form,\n ScrollRestoration,\n useLinkClickHandler,\n useSearchParams,\n useSubmit,\n useFormAction,\n useFetcher,\n useFetchers,\n useScrollRestoration,\n useBeforeUnload,\n usePrompt,\n useViewTransitionState,\n StaticRouter,\n StaticRouterProvider,\n createStaticHandler2 as createStaticHandler,\n createStaticRouter,\n ServerRouter,\n createRoutesStub,\n createCookie,\n isCookie,\n ServerMode,\n setDevServerHooks,\n createRequestHandler,\n createSession,\n isSession,\n createSessionStorage,\n createCookieSessionStorage,\n createMemorySessionStorage,\n href,\n deserializeErrors2 as deserializeErrors\n};\n", "// src/utils.ts\nvar HOLE = -1;\nvar NAN = -2;\nvar NEGATIVE_INFINITY = -3;\nvar NEGATIVE_ZERO = -4;\nvar NULL = -5;\nvar POSITIVE_INFINITY = -6;\nvar UNDEFINED = -7;\nvar TYPE_BIGINT = \"B\";\nvar TYPE_DATE = \"D\";\nvar TYPE_ERROR = \"E\";\nvar TYPE_MAP = \"M\";\nvar TYPE_NULL_OBJECT = \"N\";\nvar TYPE_PROMISE = \"P\";\nvar TYPE_REGEXP = \"R\";\nvar TYPE_SET = \"S\";\nvar TYPE_SYMBOL = \"Y\";\nvar TYPE_URL = \"U\";\nvar TYPE_PREVIOUS_RESOLVED = \"Z\";\nvar Deferred = class {\n promise;\n resolve;\n reject;\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n};\nfunction createLineSplittingTransform() {\n const decoder = new TextDecoder();\n let leftover = \"\";\n return new TransformStream({\n transform(chunk, controller) {\n const str = decoder.decode(chunk, { stream: true });\n const parts = (leftover + str).split(\"\\n\");\n leftover = parts.pop() || \"\";\n for (const part of parts) {\n controller.enqueue(part);\n }\n },\n flush(controller) {\n if (leftover) {\n controller.enqueue(leftover);\n }\n }\n });\n}\n\n// src/flatten.ts\nfunction flatten(input) {\n const { indices } = this;\n const existing = indices.get(input);\n if (existing)\n return [existing];\n if (input === void 0)\n return UNDEFINED;\n if (input === null)\n return NULL;\n if (Number.isNaN(input))\n return NAN;\n if (input === Number.POSITIVE_INFINITY)\n return POSITIVE_INFINITY;\n if (input === Number.NEGATIVE_INFINITY)\n return NEGATIVE_INFINITY;\n if (input === 0 && 1 / input < 0)\n return NEGATIVE_ZERO;\n const index = this.index++;\n indices.set(input, index);\n stringify.call(this, input, index);\n return index;\n}\nfunction stringify(input, index) {\n const { deferred, plugins, postPlugins } = this;\n const str = this.stringified;\n const stack = [[input, index]];\n while (stack.length > 0) {\n const [input2, index2] = stack.pop();\n const partsForObj = (obj) => Object.keys(obj).map((k) => `\"_${flatten.call(this, k)}\":${flatten.call(this, obj[k])}`).join(\",\");\n let error = null;\n switch (typeof input2) {\n case \"boolean\":\n case \"number\":\n case \"string\":\n str[index2] = JSON.stringify(input2);\n break;\n case \"bigint\":\n str[index2] = `[\"${TYPE_BIGINT}\",\"${input2}\"]`;\n break;\n case \"symbol\": {\n const keyFor = Symbol.keyFor(input2);\n if (!keyFor) {\n error = new Error(\n \"Cannot encode symbol unless created with Symbol.for()\"\n );\n } else {\n str[index2] = `[\"${TYPE_SYMBOL}\",${JSON.stringify(keyFor)}]`;\n }\n break;\n }\n case \"object\": {\n if (!input2) {\n str[index2] = `${NULL}`;\n break;\n }\n const isArray = Array.isArray(input2);\n let pluginHandled = false;\n if (!isArray && plugins) {\n for (const plugin of plugins) {\n const pluginResult = plugin(input2);\n if (Array.isArray(pluginResult)) {\n pluginHandled = true;\n const [pluginIdentifier, ...rest] = pluginResult;\n str[index2] = `[${JSON.stringify(pluginIdentifier)}`;\n if (rest.length > 0) {\n str[index2] += `,${rest.map((v) => flatten.call(this, v)).join(\",\")}`;\n }\n str[index2] += \"]\";\n break;\n }\n }\n }\n if (!pluginHandled) {\n let result = isArray ? \"[\" : \"{\";\n if (isArray) {\n for (let i = 0; i < input2.length; i++)\n result += (i ? \",\" : \"\") + (i in input2 ? flatten.call(this, input2[i]) : HOLE);\n str[index2] = `${result}]`;\n } else if (input2 instanceof Date) {\n str[index2] = `[\"${TYPE_DATE}\",${input2.getTime()}]`;\n } else if (input2 instanceof URL) {\n str[index2] = `[\"${TYPE_URL}\",${JSON.stringify(input2.href)}]`;\n } else if (input2 instanceof RegExp) {\n str[index2] = `[\"${TYPE_REGEXP}\",${JSON.stringify(\n input2.source\n )},${JSON.stringify(input2.flags)}]`;\n } else if (input2 instanceof Set) {\n if (input2.size > 0) {\n str[index2] = `[\"${TYPE_SET}\",${[...input2].map((val) => flatten.call(this, val)).join(\",\")}]`;\n } else {\n str[index2] = `[\"${TYPE_SET}\"]`;\n }\n } else if (input2 instanceof Map) {\n if (input2.size > 0) {\n str[index2] = `[\"${TYPE_MAP}\",${[...input2].flatMap(([k, v]) => [\n flatten.call(this, k),\n flatten.call(this, v)\n ]).join(\",\")}]`;\n } else {\n str[index2] = `[\"${TYPE_MAP}\"]`;\n }\n } else if (input2 instanceof Promise) {\n str[index2] = `[\"${TYPE_PROMISE}\",${index2}]`;\n deferred[index2] = input2;\n } else if (input2 instanceof Error) {\n str[index2] = `[\"${TYPE_ERROR}\",${JSON.stringify(input2.message)}`;\n if (input2.name !== \"Error\") {\n str[index2] += `,${JSON.stringify(input2.name)}`;\n }\n str[index2] += \"]\";\n } else if (Object.getPrototypeOf(input2) === null) {\n str[index2] = `[\"${TYPE_NULL_OBJECT}\",{${partsForObj(input2)}}]`;\n } else if (isPlainObject(input2)) {\n str[index2] = `{${partsForObj(input2)}}`;\n } else {\n error = new Error(\"Cannot encode object with prototype\");\n }\n }\n break;\n }\n default: {\n const isArray = Array.isArray(input2);\n let pluginHandled = false;\n if (!isArray && plugins) {\n for (const plugin of plugins) {\n const pluginResult = plugin(input2);\n if (Array.isArray(pluginResult)) {\n pluginHandled = true;\n const [pluginIdentifier, ...rest] = pluginResult;\n str[index2] = `[${JSON.stringify(pluginIdentifier)}`;\n if (rest.length > 0) {\n str[index2] += `,${rest.map((v) => flatten.call(this, v)).join(\",\")}`;\n }\n str[index2] += \"]\";\n break;\n }\n }\n }\n if (!pluginHandled) {\n error = new Error(\"Cannot encode function or unexpected type\");\n }\n }\n }\n if (error) {\n let pluginHandled = false;\n if (postPlugins) {\n for (const plugin of postPlugins) {\n const pluginResult = plugin(input2);\n if (Array.isArray(pluginResult)) {\n pluginHandled = true;\n const [pluginIdentifier, ...rest] = pluginResult;\n str[index2] = `[${JSON.stringify(pluginIdentifier)}`;\n if (rest.length > 0) {\n str[index2] += `,${rest.map((v) => flatten.call(this, v)).join(\",\")}`;\n }\n str[index2] += \"]\";\n break;\n }\n }\n }\n if (!pluginHandled) {\n throw error;\n }\n }\n }\n}\nvar objectProtoNames = Object.getOwnPropertyNames(Object.prototype).sort().join(\"\\0\");\nfunction isPlainObject(thing) {\n const proto = Object.getPrototypeOf(thing);\n return proto === Object.prototype || proto === null || Object.getOwnPropertyNames(proto).sort().join(\"\\0\") === objectProtoNames;\n}\n\n// src/unflatten.ts\nvar globalObj = typeof window !== \"undefined\" ? window : typeof globalThis !== \"undefined\" ? globalThis : void 0;\nfunction unflatten(parsed) {\n const { hydrated, values } = this;\n if (typeof parsed === \"number\")\n return hydrate.call(this, parsed);\n if (!Array.isArray(parsed) || !parsed.length)\n throw new SyntaxError();\n const startIndex = values.length;\n for (const value of parsed) {\n values.push(value);\n }\n hydrated.length = values.length;\n return hydrate.call(this, startIndex);\n}\nfunction hydrate(index) {\n const { hydrated, values, deferred, plugins } = this;\n let result;\n const stack = [\n [\n index,\n (v) => {\n result = v;\n }\n ]\n ];\n let postRun = [];\n while (stack.length > 0) {\n const [index2, set] = stack.pop();\n switch (index2) {\n case UNDEFINED:\n set(void 0);\n continue;\n case NULL:\n set(null);\n continue;\n case NAN:\n set(NaN);\n continue;\n case POSITIVE_INFINITY:\n set(Infinity);\n continue;\n case NEGATIVE_INFINITY:\n set(-Infinity);\n continue;\n case NEGATIVE_ZERO:\n set(-0);\n continue;\n }\n if (hydrated[index2]) {\n set(hydrated[index2]);\n continue;\n }\n const value = values[index2];\n if (!value || typeof value !== \"object\") {\n hydrated[index2] = value;\n set(value);\n continue;\n }\n if (Array.isArray(value)) {\n if (typeof value[0] === \"string\") {\n const [type, b, c] = value;\n switch (type) {\n case TYPE_DATE:\n set(hydrated[index2] = new Date(b));\n continue;\n case TYPE_URL:\n set(hydrated[index2] = new URL(b));\n continue;\n case TYPE_BIGINT:\n set(hydrated[index2] = BigInt(b));\n continue;\n case TYPE_REGEXP:\n set(hydrated[index2] = new RegExp(b, c));\n continue;\n case TYPE_SYMBOL:\n set(hydrated[index2] = Symbol.for(b));\n continue;\n case TYPE_SET:\n const newSet = /* @__PURE__ */ new Set();\n hydrated[index2] = newSet;\n for (let i = 1; i < value.length; i++)\n stack.push([\n value[i],\n (v) => {\n newSet.add(v);\n }\n ]);\n set(newSet);\n continue;\n case TYPE_MAP:\n const map = /* @__PURE__ */ new Map();\n hydrated[index2] = map;\n for (let i = 1; i < value.length; i += 2) {\n const r = [];\n stack.push([\n value[i + 1],\n (v) => {\n r[1] = v;\n }\n ]);\n stack.push([\n value[i],\n (k) => {\n r[0] = k;\n }\n ]);\n postRun.push(() => {\n map.set(r[0], r[1]);\n });\n }\n set(map);\n continue;\n case TYPE_NULL_OBJECT:\n const obj = /* @__PURE__ */ Object.create(null);\n hydrated[index2] = obj;\n for (const key of Object.keys(b).reverse()) {\n const r = [];\n stack.push([\n b[key],\n (v) => {\n r[1] = v;\n }\n ]);\n stack.push([\n Number(key.slice(1)),\n (k) => {\n r[0] = k;\n }\n ]);\n postRun.push(() => {\n obj[r[0]] = r[1];\n });\n }\n set(obj);\n continue;\n case TYPE_PROMISE:\n if (hydrated[b]) {\n set(hydrated[index2] = hydrated[b]);\n } else {\n const d = new Deferred();\n deferred[b] = d;\n set(hydrated[index2] = d.promise);\n }\n continue;\n case TYPE_ERROR:\n const [, message, errorType] = value;\n let error = errorType && globalObj && globalObj[errorType] ? new globalObj[errorType](message) : new Error(message);\n hydrated[index2] = error;\n set(error);\n continue;\n case TYPE_PREVIOUS_RESOLVED:\n set(hydrated[index2] = hydrated[b]);\n continue;\n default:\n if (Array.isArray(plugins)) {\n const r = [];\n const vals = value.slice(1);\n for (let i = 0; i < vals.length; i++) {\n const v = vals[i];\n stack.push([\n v,\n (v2) => {\n r[i] = v2;\n }\n ]);\n }\n postRun.push(() => {\n for (const plugin of plugins) {\n const result2 = plugin(value[0], ...r);\n if (result2) {\n set(hydrated[index2] = result2.value);\n return;\n }\n }\n throw new SyntaxError();\n });\n continue;\n }\n throw new SyntaxError();\n }\n } else {\n const array = [];\n hydrated[index2] = array;\n for (let i = 0; i < value.length; i++) {\n const n = value[i];\n if (n !== HOLE) {\n stack.push([\n n,\n (v) => {\n array[i] = v;\n }\n ]);\n }\n }\n set(array);\n continue;\n }\n } else {\n const object = {};\n hydrated[index2] = object;\n for (const key of Object.keys(value).reverse()) {\n const r = [];\n stack.push([\n value[key],\n (v) => {\n r[1] = v;\n }\n ]);\n stack.push([\n Number(key.slice(1)),\n (k) => {\n r[0] = k;\n }\n ]);\n postRun.push(() => {\n object[r[0]] = r[1];\n });\n }\n set(object);\n continue;\n }\n }\n while (postRun.length > 0) {\n postRun.pop()();\n }\n return result;\n}\n\n// src/turbo-stream.ts\nasync function decode(readable, options) {\n const { plugins } = options ?? {};\n const done = new Deferred();\n const reader = readable.pipeThrough(createLineSplittingTransform()).getReader();\n const decoder = {\n values: [],\n hydrated: [],\n deferred: {},\n plugins\n };\n const decoded = await decodeInitial.call(decoder, reader);\n let donePromise = done.promise;\n if (decoded.done) {\n done.resolve();\n } else {\n donePromise = decodeDeferred.call(decoder, reader).then(done.resolve).catch((reason) => {\n for (const deferred of Object.values(decoder.deferred)) {\n deferred.reject(reason);\n }\n done.reject(reason);\n });\n }\n return {\n done: donePromise.then(() => reader.closed),\n value: decoded.value\n };\n}\nasync function decodeInitial(reader) {\n const read = await reader.read();\n if (!read.value) {\n throw new SyntaxError();\n }\n let line;\n try {\n line = JSON.parse(read.value);\n } catch (reason) {\n throw new SyntaxError();\n }\n return {\n done: read.done,\n value: unflatten.call(this, line)\n };\n}\nasync function decodeDeferred(reader) {\n let read = await reader.read();\n while (!read.done) {\n if (!read.value)\n continue;\n const line = read.value;\n switch (line[0]) {\n case TYPE_PROMISE: {\n const colonIndex = line.indexOf(\":\");\n const deferredId = Number(line.slice(1, colonIndex));\n const deferred = this.deferred[deferredId];\n if (!deferred) {\n throw new Error(`Deferred ID ${deferredId} not found in stream`);\n }\n const lineData = line.slice(colonIndex + 1);\n let jsonLine;\n try {\n jsonLine = JSON.parse(lineData);\n } catch (reason) {\n throw new SyntaxError();\n }\n const value = unflatten.call(this, jsonLine);\n deferred.resolve(value);\n break;\n }\n case TYPE_ERROR: {\n const colonIndex = line.indexOf(\":\");\n const deferredId = Number(line.slice(1, colonIndex));\n const deferred = this.deferred[deferredId];\n if (!deferred) {\n throw new Error(`Deferred ID ${deferredId} not found in stream`);\n }\n const lineData = line.slice(colonIndex + 1);\n let jsonLine;\n try {\n jsonLine = JSON.parse(lineData);\n } catch (reason) {\n throw new SyntaxError();\n }\n const value = unflatten.call(this, jsonLine);\n deferred.reject(value);\n break;\n }\n default:\n throw new SyntaxError();\n }\n read = await reader.read();\n }\n}\nfunction encode(input, options) {\n const { plugins, postPlugins, signal } = options ?? {};\n const encoder = {\n deferred: {},\n index: 0,\n indices: /* @__PURE__ */ new Map(),\n stringified: [],\n plugins,\n postPlugins,\n signal\n };\n const textEncoder = new TextEncoder();\n let lastSentIndex = 0;\n const readable = new ReadableStream({\n async start(controller) {\n const id = flatten.call(encoder, input);\n if (Array.isArray(id)) {\n throw new Error(\"This should never happen\");\n }\n if (id < 0) {\n controller.enqueue(textEncoder.encode(`${id}\n`));\n } else {\n controller.enqueue(\n textEncoder.encode(`[${encoder.stringified.join(\",\")}]\n`)\n );\n lastSentIndex = encoder.stringified.length - 1;\n }\n const seenPromises = /* @__PURE__ */ new WeakSet();\n while (Object.keys(encoder.deferred).length > 0) {\n for (const [deferredId, deferred] of Object.entries(encoder.deferred)) {\n if (seenPromises.has(deferred))\n continue;\n seenPromises.add(\n encoder.deferred[Number(deferredId)] = raceSignal(\n deferred,\n encoder.signal\n ).then(\n (resolved) => {\n const id2 = flatten.call(encoder, resolved);\n if (Array.isArray(id2)) {\n controller.enqueue(\n textEncoder.encode(\n `${TYPE_PROMISE}${deferredId}:[[\"${TYPE_PREVIOUS_RESOLVED}\",${id2[0]}]]\n`\n )\n );\n encoder.index++;\n lastSentIndex++;\n } else if (id2 < 0) {\n controller.enqueue(\n textEncoder.encode(`${TYPE_PROMISE}${deferredId}:${id2}\n`)\n );\n } else {\n const values = encoder.stringified.slice(lastSentIndex + 1).join(\",\");\n controller.enqueue(\n textEncoder.encode(\n `${TYPE_PROMISE}${deferredId}:[${values}]\n`\n )\n );\n lastSentIndex = encoder.stringified.length - 1;\n }\n },\n (reason) => {\n if (!reason || typeof reason !== \"object\" || !(reason instanceof Error)) {\n reason = new Error(\"An unknown error occurred\");\n }\n const id2 = flatten.call(encoder, reason);\n if (Array.isArray(id2)) {\n controller.enqueue(\n textEncoder.encode(\n `${TYPE_ERROR}${deferredId}:[[\"${TYPE_PREVIOUS_RESOLVED}\",${id2[0]}]]\n`\n )\n );\n encoder.index++;\n lastSentIndex++;\n } else if (id2 < 0) {\n controller.enqueue(\n textEncoder.encode(`${TYPE_ERROR}${deferredId}:${id2}\n`)\n );\n } else {\n const values = encoder.stringified.slice(lastSentIndex + 1).join(\",\");\n controller.enqueue(\n textEncoder.encode(\n `${TYPE_ERROR}${deferredId}:[${values}]\n`\n )\n );\n lastSentIndex = encoder.stringified.length - 1;\n }\n }\n ).finally(() => {\n delete encoder.deferred[Number(deferredId)];\n })\n );\n }\n await Promise.race(Object.values(encoder.deferred));\n }\n await Promise.all(Object.values(encoder.deferred));\n controller.close();\n }\n });\n return readable;\n}\nfunction raceSignal(promise, signal) {\n if (!signal)\n return promise;\n if (signal.aborted)\n return Promise.reject(signal.reason || new Error(\"Signal was aborted.\"));\n const abort = new Promise((resolve, reject) => {\n signal.addEventListener(\"abort\", (event) => {\n reject(signal.reason || new Error(\"Signal was aborted.\"));\n });\n promise.then(resolve).catch(reject);\n });\n abort.catch(() => {\n });\n return Promise.race([abort, promise]);\n}\nexport {\n decode,\n encode\n};\n", "/**\n * react-router v7.4.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport {\n FrameworkContext,\n RemixErrorBoundary,\n RouterProvider,\n createBrowserHistory,\n createClientRoutes,\n createClientRoutesWithHMRRevalidationOptOut,\n createRouter,\n decodeViaTurboStream,\n deserializeErrors,\n getPatchRoutesOnNavigationFunction,\n getSingleFetchDataStrategy,\n invariant,\n mapRouteProperties,\n matchRoutes,\n shouldHydrateRouteLoader,\n useFogOFWarDiscovery\n} from \"./chunk-GNGMS2XR.mjs\";\n\n// lib/dom-export/dom-router-provider.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nfunction RouterProvider2(props) {\n return /* @__PURE__ */ React.createElement(RouterProvider, { flushSync: ReactDOM.flushSync, ...props });\n}\n\n// lib/dom-export/hydrated-router.tsx\nimport * as React2 from \"react\";\nvar ssrInfo = null;\nvar router = null;\nfunction initSsrInfo() {\n if (!ssrInfo && window.__reactRouterContext && window.__reactRouterManifest && window.__reactRouterRouteModules) {\n ssrInfo = {\n context: window.__reactRouterContext,\n manifest: window.__reactRouterManifest,\n routeModules: window.__reactRouterRouteModules,\n stateDecodingPromise: void 0,\n router: void 0,\n routerInitialized: false\n };\n }\n}\nfunction createHydratedRouter({\n unstable_getContext\n}) {\n initSsrInfo();\n if (!ssrInfo) {\n throw new Error(\n \"You must be using the SSR features of React Router in order to skip passing a `router` prop to `<RouterProvider>`\"\n );\n }\n let localSsrInfo = ssrInfo;\n if (!ssrInfo.stateDecodingPromise) {\n let stream = ssrInfo.context.stream;\n invariant(stream, \"No stream found for single fetch decoding\");\n ssrInfo.context.stream = void 0;\n ssrInfo.stateDecodingPromise = decodeViaTurboStream(stream, window).then((value) => {\n ssrInfo.context.state = value.value;\n localSsrInfo.stateDecodingPromise.value = true;\n }).catch((e) => {\n localSsrInfo.stateDecodingPromise.error = e;\n });\n }\n if (ssrInfo.stateDecodingPromise.error) {\n throw ssrInfo.stateDecodingPromise.error;\n }\n if (!ssrInfo.stateDecodingPromise.value) {\n throw ssrInfo.stateDecodingPromise;\n }\n let routes = createClientRoutes(\n ssrInfo.manifest.routes,\n ssrInfo.routeModules,\n ssrInfo.context.state,\n ssrInfo.context.ssr,\n ssrInfo.context.isSpaMode\n );\n let hydrationData = void 0;\n let loaderData = ssrInfo.context.state.loaderData;\n if (ssrInfo.context.isSpaMode) {\n if (ssrInfo.manifest.routes.root?.hasLoader && loaderData && \"root\" in loaderData) {\n hydrationData = {\n loaderData: {\n root: loaderData.root\n }\n };\n }\n } else {\n hydrationData = {\n ...ssrInfo.context.state,\n loaderData: { ...loaderData }\n };\n let initialMatches = matchRoutes(\n routes,\n window.location,\n window.__reactRouterContext?.basename\n );\n if (initialMatches) {\n for (let match of initialMatches) {\n let routeId = match.route.id;\n let route = ssrInfo.routeModules[routeId];\n let manifestRoute = ssrInfo.manifest.routes[routeId];\n if (route && manifestRoute && shouldHydrateRouteLoader(\n manifestRoute,\n route,\n ssrInfo.context.isSpaMode\n ) && (route.HydrateFallback || !manifestRoute.hasLoader)) {\n delete hydrationData.loaderData[routeId];\n } else if (manifestRoute && !manifestRoute.hasLoader) {\n hydrationData.loaderData[routeId] = null;\n }\n }\n }\n if (hydrationData && hydrationData.errors) {\n hydrationData.errors = deserializeErrors(hydrationData.errors);\n }\n }\n let router2 = createRouter({\n routes,\n history: createBrowserHistory(),\n basename: ssrInfo.context.basename,\n unstable_getContext,\n hydrationData,\n mapRouteProperties,\n future: {\n unstable_middleware: ssrInfo.context.future.unstable_middleware\n },\n dataStrategy: getSingleFetchDataStrategy(\n ssrInfo.manifest,\n ssrInfo.routeModules,\n ssrInfo.context.ssr,\n ssrInfo.context.basename,\n () => router2\n ),\n patchRoutesOnNavigation: getPatchRoutesOnNavigationFunction(\n ssrInfo.manifest,\n ssrInfo.routeModules,\n ssrInfo.context.ssr,\n ssrInfo.context.isSpaMode,\n ssrInfo.context.basename\n )\n });\n ssrInfo.router = router2;\n if (router2.state.initialized) {\n ssrInfo.routerInitialized = true;\n router2.initialize();\n }\n router2.createRoutesForHMR = /* spacer so ts-ignore does not affect the right hand of the assignment */\n createClientRoutesWithHMRRevalidationOptOut;\n window.__reactRouterDataRouter = router2;\n return router2;\n}\nfunction HydratedRouter(props) {\n if (!router) {\n router = createHydratedRouter({\n unstable_getContext: props.unstable_getContext\n });\n }\n let [criticalCss, setCriticalCss] = React2.useState(\n process.env.NODE_ENV === \"development\" ? ssrInfo?.context.criticalCss : void 0\n );\n if (process.env.NODE_ENV === \"development\") {\n if (ssrInfo) {\n window.__reactRouterClearCriticalCss = () => setCriticalCss(void 0);\n }\n }\n let [location, setLocation] = React2.useState(router.state.location);\n React2.useLayoutEffect(() => {\n if (ssrInfo && ssrInfo.router && !ssrInfo.routerInitialized) {\n ssrInfo.routerInitialized = true;\n ssrInfo.router.initialize();\n }\n }, []);\n React2.useLayoutEffect(() => {\n if (ssrInfo && ssrInfo.router) {\n return ssrInfo.router.subscribe((newState) => {\n if (newState.location !== location) {\n setLocation(newState.location);\n }\n });\n }\n }, [location]);\n invariant(ssrInfo, \"ssrInfo unavailable for HydratedRouter\");\n useFogOFWarDiscovery(\n router,\n ssrInfo.manifest,\n ssrInfo.routeModules,\n ssrInfo.context.ssr,\n ssrInfo.context.isSpaMode\n );\n return (\n // This fragment is important to ensure we match the <ServerRouter> JSX\n // structure so that useId values hydrate correctly\n /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(\n FrameworkContext.Provider,\n {\n value: {\n manifest: ssrInfo.manifest,\n routeModules: ssrInfo.routeModules,\n future: ssrInfo.context.future,\n criticalCss,\n ssr: ssrInfo.context.ssr,\n isSpaMode: ssrInfo.context.isSpaMode\n }\n },\n /* @__PURE__ */ React2.createElement(RemixErrorBoundary, { location }, /* @__PURE__ */ React2.createElement(RouterProvider2, { router }))\n ), /* @__PURE__ */ React2.createElement(React2.Fragment, null))\n );\n}\nexport {\n HydratedRouter,\n RouterProvider2 as RouterProvider\n};\n", "import { Store } from './types';\n\ntype Subscription = {\n key: string;\n callback: (value: any) => void;\n};\n\nconst RA_STORE = 'RaStore';\n\n// localStorage isn't available in incognito mode. We need to detect it\nconst testLocalStorage = () => {\n // eslint-disable-next-line eqeqeq\n if (typeof window === 'undefined' || window.localStorage == undefined) {\n return false;\n }\n\n try {\n window.localStorage.setItem('test', 'test');\n window.localStorage.removeItem('test');\n return true;\n } catch (e) {\n return false;\n }\n};\n\nlet localStorageAvailable = testLocalStorage();\n\n/**\n * Store using localStorage, or memory storage in incognito mode\n *\n * @example\n *\n * import { localStorageStore } from 'react-admin';\n *\n * const App = () => (\n * <Admin store={localStorageStore()}>\n * ...\n * </Admin>\n * );\n */\nexport const localStorageStore = (\n version: string = '1',\n appKey: string = ''\n): Store => {\n const prefix = `${RA_STORE}${appKey}`;\n const prefixLength = prefix.length;\n const subscriptions: { [key: string]: Subscription } = {};\n const publish = (key: string, value: any) => {\n Object.keys(subscriptions).forEach(id => {\n if (!subscriptions[id]) return; // may happen if a component unmounts after a first subscriber was notified\n if (subscriptions[id].key === key) {\n subscriptions[id].callback(value);\n }\n });\n };\n\n // Whenever the local storage changes in another document, look for matching subscribers.\n // This allows to synchronize state across tabs\n const onLocalStorageChange = (event: StorageEvent): void => {\n if (event.key?.substring(0, prefixLength) !== prefix) {\n return;\n }\n const key = event.key.substring(prefixLength + 1);\n const value = event.newValue ? tryParse(event.newValue) : undefined;\n Object.keys(subscriptions).forEach(id => {\n if (!subscriptions[id]) return; // may happen if a component unmounts after a first subscriber was notified\n if (subscriptions[id].key === key) {\n if (value === null) {\n // an event with a null value is sent when the key is deleted.\n // to enable default value, we need to call setValue(undefined) instead of setValue(null)\n subscriptions[id].callback(undefined);\n } else {\n subscriptions[id].callback(\n value == null ? undefined : value\n );\n }\n }\n });\n };\n\n return {\n setup: () => {\n if (localStorageAvailable) {\n const storedVersion = getStorage().getItem(`${prefix}.version`);\n if (storedVersion && storedVersion !== version) {\n const storage = getStorage();\n Object.keys(storage).forEach(key => {\n if (key.startsWith(prefix)) {\n storage.removeItem(key);\n }\n });\n }\n getStorage().setItem(`${prefix}.version`, version);\n window.addEventListener('storage', onLocalStorageChange);\n }\n },\n teardown: () => {\n if (localStorageAvailable) {\n window.removeEventListener('storage', onLocalStorageChange);\n }\n },\n getItem<T = any>(key: string, defaultValue?: T): T {\n const valueFromStorage = getStorage().getItem(`${prefix}.${key}`);\n\n // eslint-disable-next-line eqeqeq\n return valueFromStorage == null\n ? defaultValue\n : tryParse(valueFromStorage);\n },\n setItem<T = any>(key: string, value: T): void {\n if (value === undefined) {\n getStorage().removeItem(`${prefix}.${key}`);\n } else {\n getStorage().setItem(`${prefix}.${key}`, JSON.stringify(value));\n }\n publish(key, value);\n },\n removeItem(key: string): void {\n getStorage().removeItem(`${prefix}.${key}`);\n publish(key, undefined);\n },\n removeItems(keyPrefix: string): void {\n const storage = getStorage();\n Object.keys(storage).forEach(key => {\n if (key.startsWith(`${prefix}.${keyPrefix}`)) {\n storage.removeItem(key);\n const publishKey = key.substring(prefixLength + 1);\n publish(publishKey, undefined);\n }\n });\n },\n reset(): void {\n const storage = getStorage();\n Object.keys(storage).forEach(key => {\n if (key.startsWith(prefix)) {\n storage.removeItem(key);\n const publishKey = key.substring(prefixLength + 1);\n publish(publishKey, undefined);\n }\n });\n },\n subscribe: (key: string, callback: (value: string) => void) => {\n const id = Math.random().toString();\n subscriptions[id] = {\n key,\n callback,\n };\n return () => {\n delete subscriptions[id];\n };\n },\n };\n};\n\nconst tryParse = (value: string): any => {\n try {\n return JSON.parse(value);\n } catch (e) {\n return value;\n }\n};\nclass LocalStorageShim {\n valuesMap: any = new Map();\n\n getItem(key: string) {\n if (this.valuesMap.has(key)) {\n return String(this.valuesMap.get(key));\n }\n return null;\n }\n\n setItem(key: string, value: string) {\n this.valuesMap.set(key, value);\n }\n\n removeItem(key: string) {\n this.valuesMap.delete(key);\n }\n\n removeItems(keyPrefix: string) {\n this.valuesMap.forEach((value, key) => {\n if (key.startsWith(keyPrefix)) {\n this.valuesMap.delete(key);\n }\n });\n }\n\n clear() {\n this.valuesMap.clear();\n }\n\n key(i): string {\n if (arguments.length === 0) {\n throw new TypeError(\n \"Failed to execute 'key' on 'Storage': 1 argument required, but only 0 present.\"\n ); // this is a TypeError implemented on Chrome, Firefox throws Not enough arguments to Storage.key.\n }\n const arr = Array.from(this.valuesMap.keys()) as string[];\n return arr[i];\n }\n\n get length() {\n return this.valuesMap.size;\n }\n}\nconst memoryStorage = new LocalStorageShim();\n\nexport const getStorage = () => {\n return localStorageAvailable ? window.localStorage : memoryStorage;\n};\n", "import set from 'lodash/set';\nimport unset from 'lodash/unset';\nimport get from 'lodash/get';\nimport { Store } from './types';\n\ntype Subscription = {\n key: string;\n callback: (value: any) => void;\n};\n\n/**\n * Store using memory\n *\n * @example\n *\n * import { memoryStore } from 'react-admin';\n *\n * const App = () => (\n * <Admin store={memoryStore()}>\n * ...\n * </Admin>\n * );\n */\nexport const memoryStore = (storage: any = {}): Store => {\n const subscriptions: { [key: string]: Subscription } = {};\n const publish = (key: string, value: any) => {\n Object.keys(subscriptions).forEach(id => {\n if (!subscriptions[id]) return; // may happen if a component unmounts after a first subscriber was notified\n if (subscriptions[id].key === key) {\n subscriptions[id].callback(value);\n }\n });\n };\n return {\n setup: () => {},\n teardown: () => {\n Object.keys(storage).forEach(key => delete storage[key]);\n },\n getItem<T = any>(key: string, defaultValue?: T): T {\n return get(storage, key, defaultValue);\n },\n setItem<T = any>(key: string, value: T): void {\n set(storage, key, value);\n publish(key, value);\n },\n removeItem(key: string): void {\n unset(storage, key);\n publish(key, undefined);\n },\n removeItems(keyPrefix: string): void {\n const flatStorage = flatten(storage);\n Object.keys(flatStorage).forEach(key => {\n if (!key.startsWith(keyPrefix)) {\n return;\n }\n unset(storage, key);\n publish(key, undefined);\n });\n },\n reset(): void {\n const flatStorage = flatten(storage);\n Object.keys(flatStorage).forEach(key => {\n unset(storage, key);\n publish(key, undefined);\n });\n },\n subscribe: (key: string, callback: (value: string) => void) => {\n const id = Math.random().toString();\n subscriptions[id] = {\n key,\n callback,\n };\n return () => {\n delete subscriptions[id];\n };\n },\n };\n};\n\n// taken from https://stackoverflow.com/a/19101235/1333479\nconst flatten = (data: any) => {\n var result = {};\n function doFlatten(current, prop) {\n if (Object(current) !== current) {\n // scalar value\n result[prop] = current;\n } else if (Array.isArray(current)) {\n // array\n result[prop] = current;\n } else {\n // object\n var isEmpty = true;\n for (var p in current) {\n isEmpty = false;\n doFlatten(current[p], prop ? prop + '.' + p : p);\n }\n if (isEmpty && prop) result[prop] = {};\n }\n }\n doFlatten(data, '');\n return result;\n};\n", "import { createContext } from 'react';\n\nimport { Store } from './types';\nimport { memoryStore } from './memoryStore';\n\nconst defaultStore = memoryStore();\n\nexport const StoreContext = createContext<Store>(defaultStore);\n", "import * as React from 'react';\nimport { useEffect } from 'react';\nimport { StoreContext } from './StoreContext';\nimport { Store } from './types';\n\nexport const StoreContextProvider = ({\n value: Store,\n children,\n}: StoreContextProviderProps) => {\n useEffect(() => {\n Store.setup();\n return () => {\n Store.teardown();\n };\n }, [Store]);\n\n return (\n <StoreContext.Provider value={Store}>{children}</StoreContext.Provider>\n );\n};\n\nexport interface StoreContextProviderProps {\n value: Store;\n children: React.ReactNode;\n}\n", "import * as React from 'react';\nimport { useEffect, ReactNode } from 'react';\nimport { useStoreContext } from './useStoreContext';\n\n/**\n * A component to set store state for a key on mount declaratively\n *\n * To use it, just wrap any component that need to use the corresponding\n * store item with <StoreSetter name=\"my.key\" value=\"myvalue\">.\n * This wrapping needs to be done to ensure that the corresponding store item\n * is set before rendering the wrapped component.\n *\n * Tip: <StoreSetter> is a great helper for mocking the store in\n * unit tests. Prefer it to calling the Store manually.\n *\n * @example\n *\n * <StoreSetter name=\"list.density\" value=\"small\">\n * <MyStoreDependentComponent />\n * </StoreSetter>\n *\n * @example // Using <StoreSetter> is equivalent to using `useStoreContext` and setting its value directly.\n *\n * const [, setDensity] = useStore('list.density');\n *\n * useEffect(() => {\n * setDensity('small');\n * }, []);\n *\n * @param {Props} props\n * @param {string} props.name Store item key. Required. Separate with dots to namespace, e.g. 'posts.list.columns'\n * @param {any} props.value Store item value. Required.\n * @param {children} props.children Children are rendered as is, on mount\n */\nexport const StoreSetter = ({ value, name, children }: StoreSetterProps) => {\n const { setItem } = useStoreContext();\n\n useEffect(() => {\n setItem(name, value);\n }, [name, setItem, value]);\n\n return <>{children}</>;\n};\n\nexport interface StoreSetterProps {\n name: string;\n value: any;\n children: ReactNode;\n}\n", "import { useContext } from 'react';\n\nimport { StoreContext } from './StoreContext';\n\n/**\n * Get the Store stored in the StoreContext\n */\nexport const useStoreContext = () => useContext(StoreContext);\n", "import { useState, useEffect } from 'react';\nimport isEqual from 'lodash/isEqual';\n\nimport { useEvent } from '../util';\nimport { useStoreContext } from './useStoreContext';\n\n/**\n * Read and write a value from the Store\n *\n * useState-like hook using the global Store for persistence.\n * Each time a store value is changed, all components using this value will be re-rendered.\n *\n * @param {string} key Name of the store key. Separate with dots to namespace, e.g. 'posts.list.columns'.\n * @param {any} defaultValue Default value\n *\n * @return {Object} A value and a setter for the value, in an array - just like for useState()\n *\n * @example\n * import { useStore } from 'react-admin';\n *\n * const PostList = () => {\n * const [density] = useStore('posts.list.density', 'small');\n *\n * return (\n * <List>\n * <Datagrid size={density}>\n * ...\n * </Datagrid>\n * </List>\n * );\n * }\n *\n * // Clicking on this button will trigger a rerender of the PostList!\n * const ChangeDensity: FC<any> = () => {\n * const [density, setDensity] = useStore('posts.list.density', 'small');\n *\n * const changeDensity = (): void => {\n * setDensity(density === 'small' ? 'medium' : 'small');\n * };\n *\n * return (\n * <Button onClick={changeDensity}>\n * {`Change density (current ${density})`}\n * </Button>\n * );\n * };\n */\nexport const useStore = <T = any>(\n key: string,\n defaultValue?: T\n): useStoreResult<T> => {\n const { getItem, setItem, subscribe } = useStoreContext();\n const [value, setValue] = useState(() => getItem(key, defaultValue));\n\n // subscribe to changes on this key, and change the state when they happen\n useEffect(() => {\n const storedValue = getItem(key, defaultValue);\n if (!isEqual(value, storedValue)) {\n setValue(storedValue);\n }\n const unsubscribe = subscribe(key, newValue => {\n setValue(typeof newValue === 'undefined' ? defaultValue : newValue);\n });\n return () => unsubscribe();\n }, [key, subscribe, defaultValue, getItem, value]);\n\n const set = useEvent((valueParam: T, runtimeDefaultValue: T) => {\n const newValue =\n typeof valueParam === 'function' ? valueParam(value) : valueParam;\n // we only set the value in the Store;\n // the value in the local state will be updated\n // by the useEffect during the next render\n setItem(\n key,\n typeof newValue === 'undefined'\n ? typeof runtimeDefaultValue === 'undefined'\n ? defaultValue\n : runtimeDefaultValue\n : newValue\n );\n });\n return [value, set];\n};\n\nexport type useStoreResult<T = any> = [\n T,\n (value: T | ((value: T) => void), defaultValue?: T) => void,\n];\n", "/**\n * Escape special characters in path so that react-router Route does not do any special treatment\n *\n * @see https://github.com/ReactTraining/react-router/blob/v3/docs/guides/RouteMatching.md#path-syntax\n *\n * @example\n *\n * escapePath('/foo(bar)') => 'foo\\(bar\\)'\n */\nexport default url => url.replace(/(\\(|\\))/g, '\\\\$1');\n", "import * as React from 'react';\nimport { memo } from 'react';\n\nimport { useTranslateLabel } from '../i18n';\n\nexport interface FieldTitleProps {\n isRequired?: boolean;\n resource?: string;\n source?: string;\n label?: React.ReactNode;\n}\n\nexport const FieldTitle = (props: FieldTitleProps) => {\n const { source, label, resource, isRequired } = props;\n const translateLabel = useTranslateLabel();\n\n if (label === true) {\n throw new Error(\n 'Label parameter must be a string, a ReactElement or false'\n );\n }\n\n if (label === false || label === '') {\n return null;\n }\n\n if (label && typeof label !== 'string') {\n return label;\n }\n\n return (\n <span>\n {translateLabel({\n label,\n resource,\n source,\n })}\n {isRequired && <span aria-hidden=\"true\">&thinsp;*</span>}\n </span>\n );\n};\n\n// What? TypeScript loses the displayName if we don't set it explicitly\nFieldTitle.displayName = 'FieldTitle';\n\nexport default memo(FieldTitle);\n", "/**\n * Replace tokens by their value in the given string\n *\n * @param {string} template The template with interpolation tokens, e.g. 'Hello, %{name}'\n * @param {object} data The data to interpolate, e.g. { name: 'John' }\n * @returns {string} The interpolated string, e.g. 'Hello, John'\n */\nexport const substituteTokens = (template, data) =>\n template && data\n ? String.prototype.replace.call(\n template,\n defaultTokenRegex,\n function (expression, argument) {\n if (\n !data.hasOwnProperty(argument) ||\n data[argument] == null\n ) {\n return expression;\n }\n return data[argument];\n }\n )\n : template;\n\n// tokens are like 'Hello, %{name}'\nconst defaultTokenRegex = /%\\{(.*?)\\}/g;\n", "import * as React from 'react';\nimport lodashGet from 'lodash/get';\n\nimport { I18nContextProvider } from './I18nContextProvider';\nimport { I18nProvider } from '../types';\n\nexport const TestTranslationProvider = ({\n translate,\n messages,\n children,\n}: any) => (\n <I18nContextProvider value={testI18nProvider({ translate, messages })}>\n {children}\n </I18nContextProvider>\n);\n\nexport interface IMessages\n extends Record<string, string | ((options?: any) => string) | IMessages> {}\n\nexport const testI18nProvider = ({\n translate,\n messages,\n}: {\n translate?: I18nProvider['translate'];\n messages?: IMessages;\n} = {}): I18nProvider => {\n return {\n translate: messages\n ? (key, options) => {\n const message = lodashGet(messages, key);\n return message\n ? typeof message === 'function'\n ? message(options)\n : message\n : options?._ || key;\n }\n : translate || (key => key),\n changeLocale: () => Promise.resolve(),\n getLocale: () => 'en',\n };\n};\n", "import * as React from 'react';\nimport { useEffect, useState, ReactNode } from 'react';\n\nimport { I18nContext } from './I18nContext';\nimport { useStore } from '../store/useStore';\nimport { useNotify } from '../notification';\nimport { I18nProvider } from '../types';\n\n/**\n * Store the i18nProvider in a context, and rerender children when the locale changes\n */\nexport const I18nContextProvider = ({\n value = defaulti18nContext,\n children,\n}: I18nContextProviderProps) => {\n const [locale] = useStore('locale');\n const notify = useNotify();\n const [key, setKey] = useState(0);\n // to avoid blinking effect, delay first render if the user has a non-default locale\n const [isInitialized, setInitialized] = useState(\n locale === value.getLocale()\n );\n\n // watch store for locale changes\n useEffect(() => {\n if (locale && value.getLocale() !== locale) {\n new Promise(resolve => {\n // so we systematically return a Promise for the messages\n // i18nProvider may return a Promise for language changes,\n resolve(value.changeLocale(locale));\n })\n .then(() => {\n // Force full page re-render.\n // This is slow on locale change, but it's a good way\n // to avoid having one subscription to the locale\n // for each call to translate()\n setKey(key => key + 1);\n setInitialized(true);\n })\n .catch(error => {\n setInitialized(true);\n notify('ra.notification.i18n_error', { type: 'error' });\n console.error(error);\n });\n } else {\n setInitialized(true);\n }\n }, [value, locale, notify]);\n\n return isInitialized ? (\n <I18nContext.Provider value={value} key={key}>\n {children}\n </I18nContext.Provider>\n ) : null;\n};\n\nexport interface I18nContextProviderProps {\n value?: I18nProvider;\n children: ReactNode;\n}\n\nconst defaulti18nContext = {\n translate: x => x,\n changeLocale: () => Promise.resolve(),\n getLocale: () => 'en',\n};\n", "import { createContext } from 'react';\nimport { I18nProvider } from '../types';\nimport { substituteTokens } from './substituteTokens';\n\nexport type I18nContextProps = I18nProvider;\n\nconst defaultI18nProvider = {\n translate: (key, options) =>\n options?._\n ? substituteTokens(options._, options)\n : substituteTokens(key, options),\n changeLocale: () => Promise.resolve(),\n getLocale: () => 'en',\n};\n\nexport const I18nContext = createContext<I18nProvider>(defaultI18nProvider);\n\nI18nContext.displayName = 'I18nContext';\n", "import { createContext } from 'react';\n\nimport { NotificationPayload } from './types';\n\nexport const AddNotificationContext = createContext<\n (notification: NotificationPayload) => void\n>(() => {});\n", "import { createContext, Dispatch, SetStateAction } from 'react';\n\nimport { NotificationPayload } from './types';\n\nexport type NotificationContextType = {\n notifications: NotificationPayload[];\n addNotification: (notification: NotificationPayload) => void;\n takeNotification: () => NotificationPayload | void;\n resetNotifications: () => void;\n setNotifications: Dispatch<SetStateAction<NotificationPayload[]>>;\n};\n\n/**\n * Context for the notification state and modifiers\n *\n * @example // display notifications\n * import { useNotificationContext } from 'react-admin';\n *\n * const App = () => {\n * const { notifications } = useNotificationContext();\n * return (\n * <ul>\n * {notifications.map(({ message }) => (\n * <li key={index}>{ message }</li>\n * ))}\n * </ul>\n * );\n * };\n *\n * @example // reset notifications\n * import { useNotificationContext } from 'react-admin';\n *\n * const ResetNotificationsButton = () => {\n * const { resetNotifications } = useNotificationContext();\n * return (\n * <button onClick={() => resetNotifications()}>Reset notifications</button>\n * );\n * };\n */\nexport const NotificationContext = createContext<NotificationContextType>({\n notifications: [],\n addNotification: () => {},\n takeNotification: () => {},\n resetNotifications: () => {},\n setNotifications: () => {},\n});\n", "import * as React from 'react';\nimport { useState, useCallback, useMemo } from 'react';\n\nimport { NotificationPayload } from './types';\nimport { NotificationContext } from './NotificationContext';\nimport { AddNotificationContext } from './AddNotificationContext';\n\nexport const NotificationContextProvider = ({ children }) => {\n const [notifications, setNotifications] = useState<NotificationPayload[]>(\n []\n );\n\n const addNotification = useCallback((notification: NotificationPayload) => {\n setNotifications(notifications => [...notifications, notification]);\n }, []);\n\n const takeNotification = useCallback(() => {\n if (notifications.length === 0) return;\n const [notification, ...rest] = notifications;\n setNotifications(rest);\n return notification;\n }, [notifications]);\n\n const resetNotifications = useCallback(() => {\n setNotifications([]);\n }, []);\n\n const contextValue = useMemo(\n () => ({\n notifications,\n addNotification,\n takeNotification,\n resetNotifications,\n setNotifications,\n }),\n [notifications] // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n // we separate the addNotification context to avoid rerendering all components\n // that depend on useNotify when a notification is dispatched\n return (\n <NotificationContext.Provider value={contextValue}>\n <AddNotificationContext.Provider value={addNotification}>\n {children}\n </AddNotificationContext.Provider>\n </NotificationContext.Provider>\n );\n};\n", "import { useContext } from 'react';\nimport { AddNotificationContext } from './AddNotificationContext';\n\nexport const useAddNotificationContext = () =>\n useContext(AddNotificationContext);\n", "import { useContext } from 'react';\nimport { NotificationContext } from './NotificationContext';\n\nexport const useNotificationContext = () => useContext(NotificationContext);\n", "import { useCallback, ReactNode } from 'react';\n\nimport { useAddNotificationContext } from './useAddNotificationContext';\nimport { NotificationType, NotificationOptions } from './types';\n\n/**\n * Hook for Notification Side Effect\n *\n * @example\n *\n * const notify = useNotify();\n * // simple message (info level)\n * notify('Level complete');\n * // specify level\n * notify('A problem occurred', { type: 'error' })\n * // pass arguments to the translation function\n * notify('Deleted %{count} elements', { type: 'info', messageArgs: { smart_count: 23 } })\n * // show the action as undoable in the notification\n * notify('Post renamed', { type: 'info', undoable: true })\n */\nexport const useNotify = () => {\n const addNotification = useAddNotificationContext();\n return useCallback(\n (\n message: string | ReactNode,\n options: NotificationOptions & { type?: NotificationType } = {}\n ) => {\n const { type: messageType = 'info', ...notificationOptions } =\n options;\n addNotification({\n message,\n type: messageType,\n notificationOptions,\n });\n },\n [addNotification]\n );\n};\n", "import { createContext } from 'react';\n\nexport const TranslatableContext = createContext<\n TranslatableContextValue | undefined\n>(undefined);\n\nexport interface TranslatableContextValue {\n locales: string[];\n selectedLocale: string;\n selectLocale: SelectTranslatableLocale;\n getRecordForLocale: GetRecordForLocale;\n}\n\nexport type SelectTranslatableLocale = (locale: string) => void;\n\n/**\n * Returns a record where translatable fields have their values set to the value of the given locale.\n * This is necessary because the fields rely on the RecordContext to get their values and have no knowledge of the locale.\n *\n * Given the record { title: { en: 'title_en', fr: 'title_fr' } } and the locale 'fr',\n * the record for the locale 'fr' will be { title: 'title_fr' }\n */\nexport type GetRecordForLocale = (record: any, locale: string) => any;\n", "import * as React from 'react';\nimport { ReactElement, ReactNode } from 'react';\nimport {\n TranslatableContext,\n TranslatableContextValue,\n} from './TranslatableContext';\n\nexport const TranslatableContextProvider = ({\n children,\n value,\n}: {\n children: ReactNode;\n value: TranslatableContextValue;\n}): ReactElement => {\n return (\n <TranslatableContext.Provider value={value}>\n {children}\n </TranslatableContext.Provider>\n );\n};\n", "import merge from 'lodash/merge';\nimport { DEFAULT_LOCALE } from './index';\n\ninterface AllNavigatorLanguage extends NavigatorLanguage {\n browserLanguage?: string;\n userLanguage?: string;\n}\n\n/**\n * Resolve the browser locale according to the value of the global window.navigator\n *\n * Use it to determine the <Admin> locale at runtime.\n *\n * @example\n * import * as React from \"react\";\n * import { Admin, Resource, resolveBrowserLocale } from 'react-admin';\n * import polyglotI18nProvider from 'ra-i18n-polyglot';\n * import englishMessages from 'ra-language-english';\n * import frenchMessages from 'ra-language-french';\n *\n * const messages = {\n * fr: frenchMessages,\n * en: englishMessages,\n * };\n * const i18nProvider = polyglotI18nProvider(\n * locale => messages[locale] ? messages[locale] : messages.en,\n * resolveBrowserLocale()\n * );\n *\n * const App = () => (\n * <Admin i18nProvider={i18nProvider}>\n * ...\n * </Admin>\n * );\n *\n * @param {string} defaultLocale Defaults to 'en'\n * @param options\n * @param {boolean} options.fullLocale Defaults to false\n */\nexport const resolveBrowserLocale = (\n defaultLocale?: string,\n options?: { fullLocale?: boolean }\n): string => {\n // from http://blog.ksol.fr/user-locale-detection-browser-javascript/\n // Rely on the window.navigator object to determine user locale\n const { language, browserLanguage, userLanguage } =\n window.navigator as AllNavigatorLanguage;\n\n const locale =\n language ||\n browserLanguage ||\n userLanguage ||\n defaultLocale ||\n DEFAULT_LOCALE;\n\n return options?.fullLocale ? locale : locale.split('-')[0];\n};\n\n/**\n * Compose translations from multiple packages for a single language (eg: 'english').\n *\n * Use it to merge translations from addons with the main react-admin translations.\n *\n * @example\n * import * as React from \"react\";\n * import { Admin, Resource, mergeTranslations } from 'react-admin';\n * import polyglotI18nProvider from 'ra-i18n-polyglot';\n * import englishMessages from 'ra-language-english';\n * import englishTreeMessages from 'ra-tree-language-english';\n *\n * const messages = {\n * en: mergeTranslations(englishMessages, englishTreeMessages),\n * };\n * const i18nProvider = polyglotI18nProvider(\n * locale => messages[locale] ? messages[locale] : messages.en\n * );\n *\n * const App = () => (\n * <Admin i18nProvider={i18nProvider}>\n * ...\n * </Admin>\n * );\n */\nexport const mergeTranslations = (...translationsModules: object[]) =>\n merge({}, ...translationsModules);\n", "import { useMemo } from 'react';\nimport { useI18nProvider } from './useI18nProvider';\nimport { useStore } from '../store/useStore';\n\n/**\n * Get the current locale and the ability to change it\n *\n * @example\n *\n * import { useLocaleState } from 'react-admin';\n *\n * const availableLanguages = {\n * en: 'English',\n * fr: 'Français',\n * }\n * const LocaleSwitcher = () => {\n * const [locale, setLocale] = useLocaleState();\n * return (\n * <div>\n * <div>Language</div>\n * <Button disabled={locale === 'fr'} onClick={() => setLocale('fr')}>\n * English\n * </Button>\n * <Button disabled={locale === 'en'} onClick={() => setLocale('en')}>\n * French\n * </Button>\n * </div>\n * );\n * };\n */\nexport const useLocaleState = () => {\n const i18nProvider = useI18nProvider();\n const defaultLocale = useMemo(\n () => i18nProvider.getLocale(),\n [i18nProvider]\n );\n return useStore<string>('locale', defaultLocale);\n};\n", "import { useContext } from 'react';\n\nimport { I18nContext } from './I18nContext';\n\n/**\n * Get the i18nProvider instance declared in the <Admin> component\n *\n * @example\n *\n * const CurrentLanguage = () => {\n * const i18nProvider = useI18nProvider();\n * const locale = i18nProvider.getLocale();\n * return <span>{locale}</span>;\n * };\n */\nexport const useI18nProvider = () => useContext(I18nContext);\n", "import { useLocaleState } from './useLocaleState';\n\n/**\n * Get the current locale\n *\n * @example\n *\n * import { useLocale } from 'react-admin';\n *\n * const availableLanguages = {\n * en: 'English',\n * fr: 'Français',\n * }\n * const CurrentLanguage = () => {\n * const locale = useLocale();\n * return <span>{availableLanguages[locale]}</span>;\n * }\n */\nexport const useLocale = () => {\n const [locale] = useLocaleState();\n return locale;\n};\n", "import { useMemo } from 'react';\nimport { useI18nProvider } from './useI18nProvider';\n\n/**\n * A hook that gets the available locales from the i18nProvider.\n * @example\n *\n * import { useLocales } from 'react-admin';\n *\n * const LocaleSelector = () => {\n * const locales = useLocales();\n * const [currentLocale, setCurrentLocale] = useLocaleState();\n *\n * return (\n * <select onChange={event => setCurrentLocale(event.target.value)}>\n * {locales.map(locale => (\n * <option key={locale.locale} value={locale.locale}>\n * {locale.name}\n * </option>\n * )}\n * </select>\n * );\n * }\n */\nexport const useLocales = (options?: UseLocalesOptions) => {\n const i18nProvider = useI18nProvider();\n const locales = useMemo(\n () => (i18nProvider?.getLocales ? i18nProvider?.getLocales() : []),\n [i18nProvider]\n );\n return options?.locales ?? locales;\n};\n\nexport interface UseLocalesOptions {\n locales?: { locale: string; name: string }[];\n}\n", "import { useLocaleState } from './useLocaleState';\n\n/**\n * Set the current locale in the I18nContext and re-render the app when the locale changes.\n *\n * @example\n *\n * import { useSetLocale } from 'react-admin';\n *\n * const availableLanguages = {\n * en: 'English',\n * fr: 'Français',\n * }\n * const LanguageSwitcher = () => {\n * const setLocale = useSetLocale();\n * return (\n * <ul>{\n * Object.keys(availableLanguages).map(locale => {\n * <li key={locale} onClick={() => setLocale(locale)}>\n * {availableLanguages[locale]}\n * </li>\n * })\n * }</ul>\n * );\n * }\n */\nexport const useSetLocale = () => {\n const [, setLocale] = useLocaleState();\n return setLocale;\n};\n", "import { useState, useMemo } from 'react';\nimport set from 'lodash/set';\nimport get from 'lodash/get';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { TranslatableContextValue } from './TranslatableContext';\nimport { useLocaleState } from './useLocaleState';\n\n/**\n * Hook supplying the logic to translate a field value in multiple languages.\n *\n * @param options The hook options\n * @param {string} options.defaultLocale The locale of the default selected locale. Defaults to 'en'.\n * @param {string[]} options.locales An array of the supported locales. Each is an object with a locale and a name property. For example { locale: 'en', name: 'English' }.\n *\n * @returns\n * An object with following properties and methods:\n * - selectedLocale: The locale of the currently selected locale\n * - locales: An array of the supported locales\n * - getLabel: A function which returns the translated label for the given field\n * - getSource: A function which returns the source for the given field\n * - selectLocale: A function which set the selected locale\n */\nexport const useTranslatable = (\n options: UseTranslatableOptions\n): TranslatableContextValue => {\n const [localeFromUI] = useLocaleState();\n const { defaultLocale = localeFromUI, locales } = options;\n const [selectedLocale, setSelectedLocale] = useState(defaultLocale);\n\n const context = useMemo<TranslatableContextValue>(\n () => ({\n locales,\n selectedLocale,\n selectLocale: setSelectedLocale,\n getRecordForLocale,\n }),\n [locales, selectedLocale]\n );\n\n return context;\n};\n\nexport type UseTranslatableOptions = {\n defaultLocale?: string;\n locales: string[];\n};\n\n/**\n * Returns a record where translatable fields have their values set to the value of the given locale.\n * This is necessary because the fields rely on the RecordContext to get their values and have no knowledge of the locale.\n *\n * Given the record { title: { en: 'title_en', fr: 'title_fr' } } and the locale 'fr',\n * the record for the locale 'fr' will be { title: 'title_fr' }\n */\nexport const getRecordForLocale = (record: {} | undefined, locale: string) => {\n if (!record) {\n return record;\n }\n // Get all paths of the record\n const paths = getRecordPaths(record);\n\n // For each path, if a path ends with the locale, set the value of the path without the locale\n // to the value of the path with the locale\n const recordForLocale = paths.reduce((acc, path) => {\n if (path.includes(locale)) {\n const pathWithoutLocale = path.slice(0, -1);\n const value = get(record, path);\n return set(acc, pathWithoutLocale, value);\n }\n return acc;\n }, cloneDeep(record));\n\n return recordForLocale;\n};\n\n// Return all the possible paths of the record as an array of arrays\n// For example, given the record\n// {\n// title: { en: 'title_en', fr: 'title_fr' },\n// items: [\n// { description: { en: 'item1_en', fr: 'item1_fr' } },\n// { description: { en: 'item2_en', fr: 'item2_fr' } }\n// ]\n// },\n// the paths will be\n// [\n// ['title'],\n// ['title', 'en'],\n// ['title', 'fr'],\n// ['items'],\n// ['items', '0'],\n// ['items', '0', 'description'],\n// ['items', '0', 'description', 'en'],\n// ['items', '0', 'description', 'fr'],\n// ['items', '1'],\n// ['items', '1', 'description'],\n// ['items', '1', 'description', 'en'],\n// ['items', '1', 'description', 'fr']]\nconst getRecordPaths = (\n record: any = {},\n path: Array<string> = []\n): Array<Array<string>> => {\n return Object.entries(record).reduce((acc, [key, value]) => {\n if (value !== null && typeof value === 'object') {\n return [\n ...acc,\n [...path, key],\n ...getRecordPaths(value, [...path, key]),\n ];\n }\n if (Array.isArray(value)) {\n return value.reduce(\n (acc, item, index) => [\n ...acc,\n ...getRecordPaths(item, [...path, key, `${index}`]),\n ],\n acc\n );\n }\n return [...acc, [...path, key]];\n }, []);\n};\n", "import { useContext } from 'react';\nimport {\n TranslatableContext,\n TranslatableContextValue,\n} from './TranslatableContext';\n\n/**\n * Gives access to the current TranslatableContext.\n *\n * @example\n * <TranslatableFields\n * selector={<MyLanguageSelector />}\n * locales={['en', 'fr']}\n * >\n * <TextField source={getSource('title')} />\n * <TranslatableFields>\n *\n * const MyLanguageSelector = () => {\n * const {\n * locales,\n * selectedLocale,\n * selectLocale,\n * } = useTranslatableContext();\n *\n * return (\n * <select onChange={selectLocale}>\n * {locales.map((locale) => (\n * <option selected={locale.locale === selectedLocale}>\n * {locale.name}\n * </option>\n * ))}\n * </select>\n * );\n * }\n */\nexport const useTranslatableContext = (): TranslatableContextValue => {\n const context = useContext(TranslatableContext);\n\n if (!context) {\n throw new Error(\n 'useTranslatableContext must be used inside a TranslatableContextProvider'\n );\n }\n\n return context;\n};\n", "import { useCallback } from 'react';\n\nimport { Translate } from '../types';\nimport { useI18nProvider } from './useI18nProvider';\n\n/**\n * Translate a string using the current locale and the translations from the i18nProvider\n *\n * @see Polyglot.t()\n * @link https://airbnb.io/polyglot.js/#polyglotprototypetkey-interpolationoptions\n *\n * @return {Function} A translation function, accepting two arguments\n * - a string used as key in the translations\n * - an interpolationOptions object\n *\n * @example\n *\n * import { useTranslate } from 'react-admin';\n *\n * const SettingsMenu = () => {\n * const translate = useTranslate();\n * return <MenuItem>{translate('settings')}</MenuItem>;\n * }\n */\nexport const useTranslate = (): Translate => {\n const i18nProvider = useI18nProvider();\n const translate = useCallback(\n (key: string, options?: any) =>\n i18nProvider.translate(key, options) as string,\n // update the hook each time the locale changes\n [i18nProvider] // eslint-disable-line react-hooks/exhaustive-deps\n );\n return i18nProvider ? translate : identity;\n};\n\nconst identity = key => key;\n", "import { useCallback, ReactNode } from 'react';\n\nimport { useTranslate } from './useTranslate';\nimport { getFieldLabelTranslationArgs } from '../util';\nimport { useResourceContext, useOptionalSourceContext } from '../core';\n\nexport const useTranslateLabel = () => {\n const translate = useTranslate();\n const resourceFromContext = useResourceContext();\n const sourceContext = useOptionalSourceContext();\n\n return useCallback(\n ({\n source,\n label,\n resource,\n }: {\n source?: string;\n label?: ReactNode;\n resource?: string;\n }) => {\n if (label === false || label === '') {\n return null;\n }\n\n if (label && typeof label !== 'string') {\n return label;\n }\n\n return translate(\n ...getFieldLabelTranslationArgs({\n label: label as string,\n defaultLabel: source\n ? sourceContext?.getLabel(source)\n : undefined,\n resource,\n resourceFromContext,\n source,\n })\n );\n },\n [resourceFromContext, translate, sourceContext]\n );\n};\n", "import * as React from 'react';\n\nimport { CoreAdminContext, CoreAdminContextProps } from './CoreAdminContext';\nimport { CoreAdminUI, CoreAdminUIProps } from './CoreAdminUI';\n\n/**\n * Main admin component, entry point to the application.\n *\n * Initializes the various contexts (auth, data, i18n, router)\n * and defines the main routes.\n *\n * Expects a list of resources as children, or a function returning a list of\n * resources based on the permissions.\n *\n * @example\n *\n * // static list of resources\n *\n * import {\n * CoreAdmin,\n * Resource,\n * ListGuesser,\n * useDataProvider,\n * } from 'ra-core';\n *\n * const App = () => (\n * <CoreAdmin dataProvider={myDataProvider}>\n * <Resource name=\"posts\" list={ListGuesser} />\n * </CoreAdmin>\n * );\n *\n * // dynamic list of resources based on permissions\n *\n * import {\n * CoreAdmin,\n * Resource,\n * ListGuesser,\n * useDataProvider,\n * } from 'ra-core';\n *\n * const App = () => (\n * <CoreAdmin dataProvider={myDataProvider}>\n * {permissions => [\n * <Resource name=\"posts\" key=\"posts\" list={ListGuesser} />,\n * ]}\n * </CoreAdmin>\n * );\n *\n * // If you have to build a dynamic list of resources using a side effect,\n * // you can't use <CoreAdmin>. But as it delegates to sub components,\n * // it's relatively straightforward to replace it:\n *\n * import * as React from 'react';\n * import { useEffect, useState } from 'react';\n * import {\n * CoreAdminContext,\n * CoreAdminUI,\n * Resource,\n * ListGuesser,\n * useDataProvider,\n * } from 'ra-core';\n *\n * const App = () => (\n * <CoreAdminContext dataProvider={myDataProvider}>\n * <UI />\n * </CoreAdminContext>\n * );\n *\n * const UI = () => {\n * const [resources, setResources] = useState([]);\n * const dataProvider = useDataProvider();\n * useEffect(() => {\n * dataProvider.introspect().then(r => setResources(r));\n * }, []);\n *\n * return (\n * <CoreAdminUI>\n * {resources.map(resource => (\n * <Resource name={resource.name} key={resource.key} list={ListGuesser} />\n * ))}\n * </CoreAdminUI>\n * );\n * };\n */\nexport const CoreAdmin = (props: CoreAdminProps) => {\n const {\n accessDenied,\n authenticationError,\n authProvider,\n basename,\n catchAll,\n children,\n dashboard,\n dataProvider,\n disableTelemetry,\n error,\n i18nProvider,\n layout,\n loading,\n loginPage,\n queryClient,\n ready,\n requireAuth,\n store,\n title = 'React Admin',\n } = props;\n return (\n <CoreAdminContext\n authProvider={authProvider}\n basename={basename}\n dataProvider={dataProvider}\n i18nProvider={i18nProvider}\n queryClient={queryClient}\n store={store}\n >\n <CoreAdminUI\n accessDenied={accessDenied}\n authenticationError={authenticationError}\n catchAll={catchAll}\n dashboard={dashboard}\n disableTelemetry={disableTelemetry}\n error={error}\n layout={layout}\n loading={loading}\n loginPage={loginPage}\n ready={ready}\n requireAuth={requireAuth}\n title={title}\n >\n {children}\n </CoreAdminUI>\n </CoreAdminContext>\n );\n};\n\nexport type CoreAdminProps = CoreAdminContextProps & CoreAdminUIProps;\n", "import * as React from 'react';\nimport { useMemo } from 'react';\nimport { QueryClientProvider, QueryClient } from '@tanstack/react-query';\n\nimport { AdminRouter } from '../routing';\nimport { AuthContext, convertLegacyAuthProvider } from '../auth';\nimport {\n DataProviderContext,\n UndoableMutationsContextProvider,\n convertLegacyDataProvider,\n defaultDataProvider,\n} from '../dataProvider';\nimport { StoreContextProvider, Store, memoryStore } from '../store';\nimport { PreferencesEditorContextProvider } from '../preferences/PreferencesEditorContextProvider';\nimport { I18nContextProvider } from '../i18n';\nimport { ResourceDefinitionContextProvider } from './ResourceDefinitionContext';\nimport { NotificationContextProvider } from '../notification';\nimport {\n AuthProvider,\n LegacyAuthProvider,\n I18nProvider,\n DataProvider,\n AdminChildren,\n DashboardComponent,\n LegacyDataProvider,\n} from '../types';\n\nconst defaultStore = memoryStore();\n\nexport interface CoreAdminContextProps {\n /**\n * The authentication provider for security and permissions\n *\n * @see https://marmelab.com/react-admin/Authentication.html\n * @example\n * import authProvider from './authProvider';\n *\n * const App = () => (\n * <Admin authProvider={authProvider}>\n * ...\n * </Admin>\n * );\n */\n authProvider?: AuthProvider | LegacyAuthProvider;\n\n /**\n * The base path for all URLs generated by react-admin.\n *\n * @see https://marmelab.com/react-admin/Admin.html#using-react-admin-in-a-sub-path\n * @example\n * import { Admin } from 'react-admin';\n * import { BrowserRouter } from 'react-router-dom';\n * import { dataProvider } from './dataProvider';\n *\n * const App = () => (\n * <BrowserRouter>\n * <Admin basename=\"/admin\" dataProvider={dataProvider}>\n * ...\n * </Admin>\n * </BrowserRouter>\n * );\n */\n basename?: string;\n\n children?: AdminChildren;\n\n /**\n * The component to use for the dashboard page (displayed on the `/` route).\n *\n * @see https://marmelab.com/react-admin/Admin.html#dashboard\n * @example\n * import { Admin } from 'react-admin';\n * import Dashboard from './Dashboard';\n * import { dataProvider } from './dataProvider';\n *\n * const App = () => (\n * <Admin dashboard={Dashboard} dataProvider={dataProvider}>\n * ...\n * </Admin>\n * );\n */\n dashboard?: DashboardComponent;\n\n /**\n * The data provider used to communicate with the API\n *\n * @see https://marmelab.com/react-admin/DataProviders.html\n * @example\n * import { Admin } from 'react-admin';\n * import simpleRestProvider from 'ra-data-simple-rest';\n * const dataProvider = simpleRestProvider('http://path.to.my.api/');\n *\n * const App = () => (\n * <Admin dataProvider={dataProvider}>\n * ...\n * </Admin>\n * );\n */\n dataProvider?: DataProvider | LegacyDataProvider;\n\n /**\n * The adapter for storing user preferences\n *\n * @see https://marmelab.com/react-admin/Admin.html#store\n * @example\n * import { Admin, memoryStore } from 'react-admin';\n *\n * const App = () => (\n * <Admin dataProvider={dataProvider} store={memoryStore()}>\n * ...\n * </Admin>\n * );\n */\n store?: Store;\n\n /**\n * The react-query client\n *\n * @see https://marmelab.com/react-admin/Admin.html#queryclient\n * @example\n * import { Admin } from 'react-admin';\n * import { QueryClient } from '@tanstack/react-query';\n *\n * const queryClient = new QueryClient({\n * defaultOptions: {\n * queries: {\n * retry: false,\n * structuralSharing: false,\n * },\n * mutations: {\n * retryDelay: 10000,\n * },\n * },\n * });\n *\n * const App = () => (\n * <Admin queryClient={queryClient} dataProvider={...}>\n * ...\n * </Admin>\n * );\n */\n queryClient?: QueryClient;\n\n /**\n * The internationalization provider for translations\n *\n * @see https://marmelab.com/react-admin/Translation.html\n * @example\n * // in src/i18nProvider.js\n * import polyglotI18nProvider from 'ra-i18n-polyglot';\n * import fr from 'ra-language-french';\n *\n * export const i18nProvider = polyglotI18nProvider(() => fr, 'fr');\n *\n * // in src/App.js\n * import { Admin } from 'react-admin';\n * import { dataProvider } from './dataProvider';\n * import { i18nProvider } from './i18nProvider';\n *\n * const App = () => (\n * <Admin dataProvider={dataProvider} i18nProvider={i18nProvider}>\n * ...\n * </Admin>\n * );\n */\n i18nProvider?: I18nProvider;\n}\n\nexport const CoreAdminContext = (props: CoreAdminContextProps) => {\n const {\n authProvider,\n basename,\n dataProvider = defaultDataProvider,\n i18nProvider,\n store = defaultStore,\n children,\n queryClient,\n } = props;\n\n if (!dataProvider) {\n throw new Error(`Missing dataProvider prop.\nReact-admin requires a valid dataProvider function to work.`);\n }\n\n const finalQueryClient = useMemo(\n () => queryClient || new QueryClient(),\n [queryClient]\n );\n\n const finalAuthProvider = useMemo(\n () =>\n authProvider instanceof Function\n ? convertLegacyAuthProvider(authProvider)\n : authProvider,\n [authProvider]\n );\n\n const finalDataProvider = useMemo(\n () =>\n dataProvider instanceof Function\n ? convertLegacyDataProvider(dataProvider)\n : dataProvider,\n [dataProvider]\n );\n\n return (\n <AuthContext.Provider value={finalAuthProvider}>\n <DataProviderContext.Provider value={finalDataProvider}>\n <StoreContextProvider value={store}>\n <PreferencesEditorContextProvider>\n <QueryClientProvider client={finalQueryClient}>\n <AdminRouter basename={basename}>\n <I18nContextProvider value={i18nProvider}>\n <NotificationContextProvider>\n <UndoableMutationsContextProvider>\n <ResourceDefinitionContextProvider>\n {children}\n </ResourceDefinitionContextProvider>\n </UndoableMutationsContextProvider>\n </NotificationContextProvider>\n </I18nContextProvider>\n </AdminRouter>\n </QueryClientProvider>\n </PreferencesEditorContextProvider>\n </StoreContextProvider>\n </DataProviderContext.Provider>\n </AuthContext.Provider>\n );\n};\n", "import * as React from 'react';\nimport { ReactNode } from 'react';\nimport {\n useInRouterContext,\n createHashRouter,\n RouterProvider,\n FutureConfig,\n} from 'react-router-dom';\n\nimport { BasenameContextProvider } from './BasenameContextProvider';\n\n/**\n * Creates a react-router Router unless the app is already inside existing router.\n * Also creates a BasenameContext with the basename prop\n */\nexport const AdminRouter = ({ basename = '', children }: AdminRouterProps) => {\n const isInRouter = useInRouterContext();\n const Router = isInRouter ? DummyRouter : InternalRouter;\n\n return (\n <BasenameContextProvider basename={isInRouter ? basename : ''}>\n <Router basename={basename}>{children}</Router>\n </BasenameContextProvider>\n );\n};\n\nexport interface AdminRouterProps {\n basename?: string;\n children: React.ReactNode;\n}\n\nconst DummyRouter = ({\n children,\n}: {\n children: ReactNode;\n basename?: string;\n}) => <>{children}</>;\n\nconst routerProviderFuture: Partial<\n Pick<FutureConfig, 'v7_startTransition' | 'v7_relativeSplatPath'>\n> = { v7_startTransition: false, v7_relativeSplatPath: false };\n\nconst InternalRouter = ({\n children,\n basename,\n}: {\n children: ReactNode;\n basename?: string;\n}) => {\n const router = createHashRouter([{ path: '*', element: <>{children}</> }], {\n basename,\n future: {\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_partialHydration: false,\n v7_relativeSplatPath: false,\n v7_skipActionErrorRevalidation: false,\n },\n });\n return <RouterProvider router={router} future={routerProviderFuture} />;\n};\n", "import * as React from 'react';\nimport { BasenameContext } from './BasenameContext';\n\n/**\n * Set the string to append to all links to the admin app.\n *\n * Useful when the app is mounted on a sub path, e.g. '/admin'.\n * Used internally by the `<Admin>` component.\n *\n * @see useBasename\n */\nexport const BasenameContextProvider = ({ children, basename }) => (\n <BasenameContext.Provider value={basename}>\n {children}\n </BasenameContext.Provider>\n);\n", "import { createContext } from 'react';\n\nexport const BasenameContext = createContext('');\n", "import { useEffect } from 'react';\nimport { useLocation } from 'react-router';\nimport debounce from 'lodash/debounce';\n\nimport { useStore } from '../store';\n\n/**\n * A hook that tracks the scroll position and restores it when the component mounts.\n * @param storeKey The key under which to store the scroll position in the store\n * @param debounceMs The debounce time in milliseconds\n *\n * @example\n * import { useRestoreScrollPosition } from 'ra-core';\n *\n * const MyCustomPage = () => {\n * useRestoreScrollPosition('my-list');\n *\n * return (\n * <div>\n * <h1>My Custom Page</h1>\n * <VeryLongContent />\n * </div>\n * );\n * };\n */\nexport const useRestoreScrollPosition = (\n storeKey: string,\n debounceMs = 250\n) => {\n const [position, setPosition] = useTrackScrollPosition(\n storeKey,\n debounceMs\n );\n const location = useLocation();\n\n useEffect(() => {\n if (position != null && location.state?._scrollToTop !== true) {\n setPosition(undefined);\n window.scrollTo(0, position);\n }\n // We only want to run this effect on mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n};\n\n/**\n * A hook that tracks the scroll position and stores it.\n * @param storeKey The key under which to store the scroll position in the store\n * @param debounceMs The debounce time in milliseconds\n *\n * @example\n * import { useTrackScrollPosition } from 'ra-core';\n *\n * const MyCustomPage = () => {\n * useTrackScrollPosition('my-list');\n *\n * return (\n * <div>\n * <h1>My Custom Page</h1>\n * <VeryLongContent />\n * </div>\n * );\n * };\n */\nexport const useTrackScrollPosition = (storeKey: string, debounceMs = 250) => {\n const [position, setPosition] = useStore(storeKey);\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return;\n }\n const handleScroll = debounce(() => {\n setPosition(window.scrollY);\n }, debounceMs);\n\n window.addEventListener('scroll', handleScroll);\n\n return () => {\n window.removeEventListener('scroll', handleScroll);\n };\n }, [debounceMs, setPosition]);\n\n return [position, setPosition];\n};\n", "import { ReactNode } from 'react';\nimport { useRestoreScrollPosition } from './useRestoreScrollPosition';\n\n/**\n * A component that tracks the scroll position and restores it when the component mounts.\n * @param children The content to render\n * @param key The key under which to store the scroll position in the store\n * @param debounceMs The debounce time in milliseconds\n *\n * @example\n * import { RestoreScrollPosition } from 'ra-core';\n *\n * const MyCustomPage = () => {\n * <RestoreScrollPosition key=\"my-list\">\n * <div>\n * <h1>My Custom Page</h1>\n * <VeryLongContent />\n * </div>\n * </RestoreScrollPosition>\n * };\n */\nexport const RestoreScrollPosition = ({\n children,\n storeKey,\n debounce = 250,\n}: {\n storeKey: string;\n debounce?: number;\n children: ReactNode;\n}) => {\n useRestoreScrollPosition(storeKey, debounce);\n return children;\n};\n", "import { useContext } from 'react';\n\nimport { BasenameContext } from './BasenameContext';\n\n/**\n * Get the string to append to all links to the admin app.\n *\n * Useful when the app is mounted on a sub path, e.g. '/admin'.\n *\n * This hook is used internally by all react-admin components that\n * contain a link, and requires that the basename is set via the\n * `<BasenameContextProvider>` component (or via the `<Admin>` component,\n * which calls BasenameContextProvider internally).\n *\n * @see BasenameContextProvider\n *\n * @example\n * import { useBasename } from 'react-admin';\n *\n * const ArticleLink = ({ title, id }) => {\n * const basename = useBasename();\n * return <a href={`${basename}/articles/${id}`}>{title}</a>;\n * };\n */\nexport const useBasename = () => useContext(BasenameContext);\n", "import { useCallback } from 'react';\n\nimport { HintedString, Identifier } from '../types';\nimport { useBasename } from './useBasename';\n\n/**\n * Get a callback to create a link to a given page in the admin app.\n *\n * The callback expects an object as parameter, containing the following properties:\n * - type: 'list', 'edit', 'show' or 'create'\n * - resource\n * - id (optional), for 'edit' or 'show' pages\n *\n * This is used internally by react-admin to allow default components to work\n * in applications that are mounted on a sub path, e.g. '/admin'. If your app\n * is mounted in the root path, you don't need it, and you can create links by\n * hand, e.g. '/articles/1/show'.\n *\n * @example\n * import { useCreatePath, useRecordContext } from 'react-admin';\n * import { useNavigate } from 'react-router-dom';\n *\n * const PostEditButton = () => {\n * const createPath = useCreatePath();\n * const record = useRecordContext();\n * const navigate = useNavigate();\n *\n * const handleClick = () => {\n * const link = createPath({\n * type: 'edit',\n * resource: 'posts',\n * id: record.id\n * });\n * navigate(link);\n * };\n *\n * return <button onClick={handleClick}>Edit Post</button>;\n * };\n */\nexport const useCreatePath = () => {\n const basename = useBasename();\n return useCallback(\n ({ resource, id, type }: CreatePathParams): string => {\n if (\n ['list', 'create', 'edit', 'show'].includes(type) &&\n !resource\n ) {\n throw new Error(\n 'Cannot create a link without a resource. You must provide the resource name.'\n );\n }\n switch (type) {\n case 'list':\n return removeDoubleSlashes(`${basename}/${resource}`);\n case 'create':\n return removeDoubleSlashes(\n `${basename}/${resource}/create`\n );\n case 'edit': {\n if (id == null) {\n // maybe the id isn't defined yet\n // instead of throwing an error, fallback to list link\n return removeDoubleSlashes(`${basename}/${resource}`);\n }\n return removeDoubleSlashes(\n `${basename}/${resource}/${encodeURIComponent(id)}`\n );\n }\n case 'show': {\n if (id == null) {\n // maybe the id isn't defined yet\n // instead of throwing an error, fallback to list link\n return removeDoubleSlashes(`${basename}/${resource}`);\n }\n return removeDoubleSlashes(\n `${basename}/${resource}/${encodeURIComponent(id)}/show`\n );\n }\n default:\n return type;\n }\n },\n [basename]\n );\n};\n\nexport type CreatePathType = HintedString<'list' | 'edit' | 'show' | 'create'>;\nexport interface CreatePathParams {\n type: CreatePathType;\n resource?: string;\n id?: Identifier;\n}\n\nexport const removeDoubleSlashes = (path: string) => path.replace('//', '/');\n", "import { useState, useEffect } from 'react';\nimport { useResourceContext } from '../core/useResourceContext';\nimport { useRecordContext } from '../controller/record/useRecordContext';\nimport type { RaRecord } from '../types';\nimport type { LinkToType } from './types';\nimport { useCanAccess } from '../auth';\nimport { useResourceDefinition } from '../core';\nimport { useCreatePath } from './useCreatePath';\n\n/**\n * Get a path for a record, based on the current resource and the link type.\n *\n * Accepted link types are 'edit', 'show', a route string, false, or a function returning one of these types.\n *\n * @example\n * // basic usage (leverages RecordContext, ResourceContext and ResourceDefinitionContext)\n * const EditLink = () => {\n * const path = useGetPathForRecord();\n * return path ? <Link to={path}>Edit</Link> : null;\n * };\n *\n * // controlled mode\n * const EditLink = ({ record, resource }) => {\n * const path = useGetPathForRecord({ record, resource, link: 'edit' });\n * return path ? <Link to={path}>Edit</Link> : null;\n * };\n *\n * // the link option can be a function\n * const EditLink = ({ record, resource }) => {\n * const path = useGetPathForRecord({ record, resource, link: (record, resource) => record.canEdit ? 'edit' : false });\n * return path ? <Link to={path}>Edit</Link> : null;\n * };\n *\n * // the link option can be a function returning a promise\n * const EditLink = ({ record, resource }) => {\n * const path = useGetPathForRecord({ record, resource, link: async (record, resource) => {\n * const canEdit = await canEditRecord(record, resource);\n * return canEdit ? 'edit' : false;\n * }});\n * return path ? <Link to={path}>Edit</Link> : null;\n * };\n */\nexport const useGetPathForRecord = <RecordType extends RaRecord = RaRecord>(\n options: UseGetPathForRecordOptions<RecordType> = {}\n): string | false | undefined => {\n const { link } = options || {};\n const record = useRecordContext(options);\n const resource = useResourceContext(options);\n if (!resource) {\n throw new Error(\n 'Cannot generate a link for a record without a resource. You must use useGetPathForRecord within a ResourceContextProvider, or pass a resource prop.'\n );\n }\n const resourceDefinition = useResourceDefinition(options);\n const createPath = useCreatePath();\n const [path, setPath] = useState<string | false>(\n link && typeof link !== 'function' && record != null\n ? createPath({\n resource,\n id: record.id,\n type: link,\n })\n : false\n );\n\n // in preparation for the default value, does the user have access to the show and edit pages?\n // (we can't run hooks conditionally, so we need to run them even though the link is specified)\n const { canAccess: canAccessShow } = useCanAccess({\n action: 'show',\n resource,\n record,\n enabled: link == null && resourceDefinition.hasShow,\n });\n const { canAccess: canAccessEdit } = useCanAccess({\n action: 'edit',\n resource,\n record,\n enabled: link == null && resourceDefinition.hasEdit,\n });\n\n useEffect(() => {\n if (!record) return;\n\n if (link === false) {\n setPath(false);\n return;\n }\n\n // Handle the inferred link type case\n if (link == null) {\n // We must check whether the resource has an edit view because if there is no\n // authProvider, canAccessShow will always be true\n if (resourceDefinition.hasShow && canAccessShow) {\n setPath(\n createPath({\n resource,\n id: record.id,\n type: 'show',\n })\n );\n return;\n }\n // We must check whether the resource has an edit view because if there is no\n // authProvider, canAccessEdit will always be true\n if (resourceDefinition.hasEdit && canAccessEdit) {\n setPath(\n createPath({\n resource,\n id: record.id,\n type: 'edit',\n })\n );\n return;\n }\n }\n\n // Handle the link function case\n if (typeof link === 'function') {\n const linkResult = link(record, resource);\n if (linkResult instanceof Promise) {\n linkResult.then(resolvedPath => setPath(resolvedPath));\n return;\n }\n setPath(\n linkResult\n ? createPath({\n resource,\n id: record.id,\n type: linkResult,\n })\n : false\n );\n return;\n }\n\n // handle string case\n if (link) {\n setPath(\n createPath({\n resource,\n id: record.id,\n type: link,\n })\n );\n }\n }, [\n createPath,\n canAccessShow,\n canAccessEdit,\n link,\n record,\n resource,\n resourceDefinition.hasEdit,\n resourceDefinition.hasShow,\n ]);\n\n return path;\n};\n\nexport interface UseGetPathForRecordOptions<\n RecordType extends RaRecord = RaRecord,\n> {\n resource?: string;\n record?: RecordType;\n link?: LinkToType<RecordType>;\n}\n\nexport type UseGetRouteForRecordOptions<\n RecordType extends RaRecord = RaRecord,\n> = UseGetPathForRecordOptions<RecordType>;\n", "import { useContext } from 'react';\nimport { ResourceContext, ResourceContextValue } from './ResourceContext';\n\n/**\n * Hook to read the resource from the ResourceContext.\n *\n * Must be used within a <ResourceContextProvider> (e.g. as a descendent of <Resource>\n * or any reference related components), or called with a resource prop.\n *\n * @example\n *\n * const ResourceName = (props) => {\n * const resource = useResourceContext(props);\n * const getResourceLabel = useGetResourceLabel();\n * return <>{getResourceLabel(resource, 1)}</>;\n * }\n *\n * // use it in a resource context\n * const MyComponent = () => (\n * <ResourceContextProvider value=\"posts\">\n * <ResourceName />\n * ...\n * </ResourceContextProvider>\n * );\n *\n * // override resource via props\n * const MyComponent = () => (\n * <>\n * <ResourceName resource=\"posts\"/>\n * ...\n * </>\n * );\n *\n * @returns {ResourceContextValue} The resource name, e.g. 'posts'\n */\nexport const useResourceContext = <\n ResourceInformationsType extends Partial<{ resource: string }>,\n>(\n props?: ResourceInformationsType\n): ResourceContextValue => {\n const context = useContext(ResourceContext);\n return (props && props.resource) || context;\n};\n", "import { createContext } from 'react';\n\n/**\n * Context to store the current resource name.\n *\n * Use the useResource() hook to read the context. That's what most components do in react-admin.\n *\n * @example\n *\n * import { useResourceContext, useTranslate } from 'ra-core';\n *\n * const MyCustomEditTitle = props => {\n * const name = useResourceContext(props);\n *\n * return (\n * <h1>{translate(`${name}.name`)}</h1>\n * );\n * };\n */\nexport const ResourceContext = createContext<ResourceContextValue>(undefined);\n\nexport type ResourceContextValue = string | undefined;\n", "import { useContext } from 'react';\nimport { RecordContext } from './RecordContext';\nimport { RaRecord } from '../../types';\n\n/**\n * Hook to read the record from a RecordContext.\n *\n * Must be used within a <RecordContext> such as provided by the <EditContextProvider>\n * (e.g. as a descendent of <Edit> or <EditBase>) or within a <ShowContextProvider>\n * (e.g. as a descendent of <Show> or <ShowBase>)\n *\n * @example // basic usage\n *\n * import { useRecordContext } from 'ra-core';\n *\n * const TitleField = () => {\n * const record = useRecordContext();\n * return <span>{record && record.title}</span>;\n * };\n *\n * @example // allow record override via props\n *\n * import { useRecordContext } from 'ra-core';\n *\n * const TitleField = (props) => {\n * const record = useRecordContext(props);\n * return <span>{record && record.title}</span>;\n * };\n * render(<TextField record={record} />);\n *\n * @returns {RaRecord} A record object\n */\nexport const useRecordContext = <\n RecordType extends RaRecord | Omit<RaRecord, 'id'> = RaRecord,\n>(\n props?: UseRecordContextParams<RecordType>\n): RecordType | undefined => {\n // Can't find a way to specify the RecordType when CreateContext is declared\n // @ts-ignore\n const context = useContext<RecordType | undefined>(RecordContext);\n\n return (props && props.record) || context;\n};\n\nexport interface UseRecordContextParams<\n RecordType extends RaRecord | Omit<RaRecord, 'id'> = RaRecord,\n> {\n record?: RecordType;\n [key: string]: any;\n}\n", "import * as React from 'react';\nimport { createContext, ReactNode } from 'react';\nimport { RaRecord } from '../../types';\n\n/**\n * Context to store a record.\n *\n * @see RecordContextProvider\n * @see useRecordContext\n */\nexport const RecordContext = createContext<\n RaRecord | Omit<RaRecord, 'id'> | undefined\n>(undefined);\n\nRecordContext.displayName = 'RecordContext';\n\n/**\n * Provider for the Record Context, to store a record.\n *\n * Use the useRecordContext() hook to read the context.\n * That's what the Edit and Show components do in react-admin.\n *\n * Many react-admin components read the RecordContext, including all Field\n * components.\n *\n * @example\n *\n * import { useGetOne, RecordContextProvider } from 'ra-core';\n *\n * const Show = ({ resource, id }) => {\n * const { data } = useGetOne(resource, { id });\n * return (\n * <RecordContextProvider value={data}>\n * ...\n * </RecordContextProvider>\n * );\n * };\n */\nexport const RecordContextProvider = <\n RecordType extends RaRecord | Omit<RaRecord, 'id'> = RaRecord,\n>({\n children,\n value,\n}: RecordContextProviderProps<RecordType>) => (\n <RecordContext.Provider value={value}>{children}</RecordContext.Provider>\n);\n\nexport interface RecordContextProviderProps<RecordType> {\n children: ReactNode;\n value?: RecordType;\n}\n", "import { useCallback } from 'react';\nimport { useResourceContext } from '../core/useResourceContext';\nimport { useResourceDefinitions } from '../core/useResourceDefinitions';\nimport { useCanAccessCallback } from '../auth/useCanAccessCallback';\nimport type { RaRecord } from '../types';\nimport { useCreatePath } from './useCreatePath';\nimport { UseGetRouteForRecordOptions } from './useGetPathForRecord';\n\nexport const useGetPathForRecordCallback = <\n RecordType extends RaRecord = RaRecord,\n>(\n options: UseGetPathForRecordCallbackOptions = {}\n) => {\n const resource = useResourceContext(options);\n const resourceDefinitions = useResourceDefinitions();\n const createPath = useCreatePath();\n const canAccess = useCanAccessCallback();\n\n return useCallback(\n async (params: UseGetRouteForRecordOptions<RecordType>) => {\n const { link, record } = params || {};\n const finalResource = params.resource ?? resource;\n if (!finalResource) {\n throw new Error(\n 'Cannot generate a link for a record without a resource. You must use useGetPathForRecordCallback within a ResourceContextProvider, or pass a resource parameter.'\n );\n }\n const resourceDefinition = resourceDefinitions[finalResource] ?? {};\n\n if (record == null || link === false) {\n return false;\n }\n\n // When the link prop is not provided, we infer a default value and check whether users\n // can access it\n if (link == null) {\n // check if the user can access the show and edit pages in parallel\n const [canAccessShow, canAccessEdit] = await Promise.all([\n resourceDefinition.hasShow\n ? canAccess({\n action: 'show',\n resource: finalResource,\n record,\n })\n : Promise.resolve(false),\n resourceDefinition.hasEdit\n ? canAccess({\n action: 'edit',\n resource: finalResource,\n record,\n })\n : Promise.resolve(false),\n ]);\n\n if (canAccessShow) {\n return createPath({\n resource: finalResource,\n id: record.id,\n type: 'show',\n });\n }\n if (canAccessEdit) {\n return createPath({\n resource: finalResource,\n id: record.id,\n type: 'edit',\n });\n }\n return false;\n }\n\n const linkFunc = typeof link === 'function' ? link : () => link;\n const linkResult = linkFunc(record, finalResource);\n if (linkResult === false) {\n return false;\n }\n\n const linkResultIsPromise = isPromise(linkResult);\n\n if (linkResultIsPromise) {\n const resolvedLink = await linkResult;\n if (resolvedLink === false) {\n // already set to false by default\n return;\n }\n return createPath({\n resource: finalResource,\n id: record.id,\n type: resolvedLink,\n });\n }\n\n return createPath({\n resource: finalResource,\n id: record.id,\n type: linkResult,\n });\n },\n [canAccess, createPath, resourceDefinitions, resource]\n );\n};\n\nconst isPromise = (value: any): value is Promise<any> =>\n value && typeof value.then === 'function';\n\nexport interface UseGetPathForRecordCallbackOptions {\n resource?: string;\n}\n", "import { useContext } from 'react';\n\nimport { ResourceDefinitionContext } from './ResourceDefinitionContext';\n\nexport const useResourceDefinitionContext = () =>\n useContext(ResourceDefinitionContext);\n", "import * as React from 'react';\nimport { createContext, useCallback, useState, useMemo } from 'react';\nimport isEqual from 'lodash/isEqual';\n\nimport { AdminChildren, ResourceDefinition, ResourceOptions } from '../types';\n\nexport type ResourceDefinitions<OptionsType extends ResourceOptions = any> = {\n [name: string]: ResourceDefinition<OptionsType>;\n};\n\nexport type ResourceDefinitionContextValue = {\n definitions: ResourceDefinitions;\n register: (config: ResourceDefinition) => void;\n unregister: (config: ResourceDefinition) => void;\n};\n\nexport const ResourceDefinitionContext =\n createContext<ResourceDefinitionContextValue>({\n definitions: {},\n register: () => {},\n unregister: () => {},\n });\n\n/**\n * Context to store the current resource Definition.\n *\n * Use the useResourceDefinition() hook to read the context.\n *\n * @example\n *\n * import { useResourceDefinition, useTranslate } from 'ra-core';\n *\n * const PostMenuItem = () => {\n * const { name, icon } = useResourceDefinition({ resource: 'posts' });\n *\n * return (\n * <MenuItem>\n * <ListItemIcon>{icon}</ListItemIcon>\n * {name}\n * </MenuItem>\n * );\n * };\n */\nexport const ResourceDefinitionContextProvider = ({\n definitions: defaultDefinitions = {},\n children,\n}: {\n definitions?: ResourceDefinitions;\n children: AdminChildren;\n}) => {\n const [definitions, setState] =\n useState<ResourceDefinitions>(defaultDefinitions);\n\n const register = useCallback((config: ResourceDefinition) => {\n setState(prev =>\n isEqual(prev[config.name], config)\n ? prev\n : {\n ...prev,\n [config.name]: config,\n }\n );\n }, []);\n\n const unregister = useCallback((config: ResourceDefinition) => {\n setState(prev => {\n const { [config.name]: _, ...rest } = prev;\n return rest;\n });\n }, []);\n\n const contextValue = useMemo(\n () => ({ definitions, register, unregister }),\n [definitions] // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n return (\n <ResourceDefinitionContext.Provider value={contextValue}>\n {/* Had to cast here because Provider only accepts ReactNode but we might have a render function */}\n {children as React.ReactNode}\n </ResourceDefinitionContext.Provider>\n );\n};\n", "import type { ResourceOptions } from '../types';\nimport type { ResourceDefinitions } from './ResourceDefinitionContext';\nimport { useResourceDefinitionContext } from './useResourceDefinitionContext';\n\n/**\n * Get the definition of the all resources\n *\n * @example\n *\n * const definitions = useResourceDefinitions();\n * console.log(definitions.posts);\n * // {\n * // name: 'posts',\n * // hasList: true,\n * // hasEdit: true,\n * // hasShow: true,\n * // hasCreate: true,\n * // options: {},\n * // icon: PostIcon,\n * // recordRepresentation: 'title',\n * // }\n */\nexport const useResourceDefinitions = <\n OptionsType extends ResourceOptions = any,\n>(): ResourceDefinitions<OptionsType> =>\n useResourceDefinitionContext().definitions;\n", "import {\n UseMutateAsyncFunction,\n useMutation,\n UseMutationOptions,\n} from '@tanstack/react-query';\nimport useAuthProvider from './useAuthProvider';\nimport { HintedString } from '../types';\n\n/**\n * A hook that returns a function you can call to determine whether user has access to the given resource\n *\n * @example\n * import { Datagrid, List, TextField, useCanAccessCallback } from 'react-admin';\n *\n * const UserList = () => {\n * const checkAccess = useCanAccessCallback();\n *\n * const handleRowClick = (id: Identifier, resource: string, record: Record) => {\n * try {\n * const canAccess = checkAccess({ resource: 'users', action: 'edit', record });\n * return canAccess ? \"edit\" : \"show\";\n * } catch (error) {\n * console.error(error);\n * }\n * };\n *\n * return (\n * <List>\n * <Datagrid onClick={handleRowClick}>\n * <TextField source=\"id\" />\n * <TextField source=\"name\" />\n * <TextField source=\"email\" />\n * </Datagrid>\n * </List>\n * );\n * };\n */\nexport const useCanAccessCallback = <\n RecordType extends Record<string, any> = Record<string, any>,\n ErrorType = Error,\n>(\n options: Omit<\n UseMutationOptions<\n UseCanAccessCallbackResult,\n ErrorType,\n UseCanAccessCallbackOptions<RecordType>\n >,\n 'mutationFn'\n > = {}\n) => {\n const authProvider = useAuthProvider();\n\n const { mutateAsync } = useMutation<\n UseCanAccessCallbackResult,\n ErrorType,\n UseCanAccessCallbackOptions\n >({\n mutationFn: async (\n params: UseCanAccessCallbackOptions\n ): Promise<UseCanAccessCallbackResult> => {\n if (!authProvider || !authProvider.canAccess) {\n return true;\n }\n return authProvider.canAccess(params);\n },\n retry: false,\n ...options,\n });\n\n return mutateAsync;\n};\n\nexport type UseCanAccessCallback<\n RecordType extends Record<string, any> = Record<string, any>,\n ErrorType = Error,\n> = UseMutateAsyncFunction<\n UseCanAccessCallbackResult,\n ErrorType,\n UseCanAccessCallbackOptions<RecordType>,\n unknown\n>;\n\nexport type UseCanAccessCallbackOptions<\n RecordType extends Record<string, any> = Record<string, any>,\n> = {\n resource: string;\n action: HintedString<'list' | 'create' | 'edit' | 'show' | 'delete'>;\n record?: RecordType;\n};\n\nexport type UseCanAccessCallbackResult = boolean;\n", "import { useCallback } from 'react';\nimport { useNavigate, To } from 'react-router-dom';\nimport { Identifier, RaRecord } from '../types';\n\nimport { useBasename } from './useBasename';\nimport { CreatePathType, useCreatePath } from './useCreatePath';\n\ntype RedirectToFunction = (\n resource?: string,\n id?: Identifier,\n data?: Partial<RaRecord>,\n state?: object\n) => To;\n\nexport type RedirectionSideEffect = CreatePathType | false | RedirectToFunction;\n\n/**\n * Hook for Redirection Side Effect\n *\n * @example\n *\n * const redirect = useRedirect();\n * // redirect to list view\n * redirect('list', 'posts');\n * // redirect to edit view\n * redirect('edit', 'posts', 123);\n * // redirect to edit view with state data\n * redirect('edit', 'comments', 123, {}, { record: { post_id: record.id } });\n * // do not redirect\n * redirect(false);\n * // redirect to the result of a function\n * redirect((resource, id, data) => ...)\n */\nexport const useRedirect = () => {\n const navigate = useNavigate();\n const basename = useBasename();\n const createPath = useCreatePath();\n\n return useCallback(\n (\n redirectTo: RedirectionSideEffect,\n resource: string = '',\n id?: Identifier,\n data?: Partial<RaRecord>,\n state: object = {}\n ) => {\n if (!redirectTo) {\n return;\n } else if (typeof redirectTo === 'function') {\n const target: To = redirectTo(resource, id, data);\n const absoluteTarget =\n typeof target === 'string'\n ? `${basename}${target.startsWith('/') ? '' : '/'}${target}`\n : {\n pathname: `${basename}${target.pathname?.startsWith('/') ? '' : '/'}${target.pathname}`,\n ...target,\n };\n navigate(absoluteTarget, {\n state: { _scrollToTop: true, ...state },\n });\n return;\n } else if (\n typeof redirectTo === 'string' &&\n redirectTo.startsWith('http') &&\n window\n ) {\n // redirection to an absolute url\n // history doesn't handle that case, so we handle it by hand\n window.location.href = redirectTo;\n return;\n } else {\n // redirection to an internal link\n navigate(createPath({ resource, id, type: redirectTo }), {\n state:\n // We force the scrollToTop except when navigating to a list\n // where this is already done by <RestoreScrollPosition> in <Resource>\n redirectTo === 'list'\n ? state\n : { _scrollToTop: true, ...state },\n });\n return;\n }\n },\n [navigate, basename, createPath]\n );\n};\n", "import { useEffect, useRef } from 'react';\nimport { useLocation } from 'react-router';\n\n/**\n * A hook to use inside the component passed to FallbackComponent\n * of react-error-boundary. It resets the error boundary state whenever\n * the location changes\n * @param {Function} resetErrorBoundary\n */\nexport const useResetErrorBoundaryOnLocationChange = (\n resetErrorBoundary: () => void\n) => {\n const { pathname } = useLocation();\n const originalPathname = useRef(pathname);\n\n useEffect(() => {\n if (pathname !== originalPathname.current) {\n resetErrorBoundary();\n }\n }, [pathname, resetErrorBoundary]);\n};\n", "import { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\n\n/**\n * Scroll the window to top when the target location contains the _scrollToTop state\n *\n * @see CoreAdminRouter where it's enabled by default\n *\n * @example // usage in buttons\n * import { Link } from 'react-router-dom';\n * import { Button } from '@mui/material';\n *\n * const FooButton = () => (\n * <Button\n * component={Link}\n * to={{\n * pathname: '/foo',\n * state: { _scrollToTop: true },\n * }}\n * >\n * Go to foo\n * </Button>\n * );\n */\nexport const useScrollToTop = () => {\n const location = useLocation();\n useEffect(() => {\n if (\n (location.state as any)?._scrollToTop &&\n typeof window != 'undefined' &&\n typeof window.scrollTo === 'function'\n ) {\n window.scrollTo(0, 0);\n }\n }, [location]);\n};\n", "import * as React from 'react';\nimport {\n createMemoryRouter,\n RouterProvider,\n useLocation,\n Location,\n useNavigate,\n NavigateFunction,\n} from 'react-router-dom';\nimport type { InitialEntry } from '@remix-run/router';\n\nconst UseLocation = ({\n locationCallback,\n}: {\n locationCallback: (l: Location) => void;\n}) => {\n const location = useLocation();\n locationCallback(location);\n return null;\n};\n\nconst UseNavigate = ({\n navigateCallback,\n}: {\n navigateCallback: (n: NavigateFunction) => void;\n}) => {\n const navigate = useNavigate();\n navigateCallback(navigate);\n return null;\n};\n\n/**\n * Wrapper around react-router's `createMemoryRouter` to be used in test components.\n *\n * It is similar to `MemoryRouter` but it supports\n * [data APIs](https://reactrouter.com/en/main/routers/picking-a-router#data-apis).\n *\n * Additionally, it provides\n * - a `locationCallback` prop to get the location in the test\n * - a `navigateCallback` prop to be able to navigate in the test\n */\nexport const TestMemoryRouter = ({\n children,\n locationCallback,\n navigateCallback,\n ...rest\n}: {\n children: React.ReactNode;\n locationCallback?: (l: Location) => void;\n navigateCallback?: (n: NavigateFunction) => void;\n basename?: string;\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n}) => {\n const router = createMemoryRouter(\n [\n {\n path: '*',\n element: (\n <>\n {children}\n {locationCallback && (\n <UseLocation locationCallback={locationCallback} />\n )}\n {navigateCallback && (\n <UseNavigate navigateCallback={navigateCallback} />\n )}\n </>\n ),\n },\n ],\n {\n future: {\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_partialHydration: false,\n v7_relativeSplatPath: false,\n v7_skipActionErrorRevalidation: false,\n },\n ...rest,\n }\n );\n return (\n <RouterProvider\n router={router}\n // @ts-expect-error react-router types are not up-to-date\n future={{ v7_startTransition: false, v7_relativeSplatPath: false }}\n />\n );\n};\n", "import { useLocation, useParams } from 'react-router-dom';\n\n/**\n * Utility hook to get the base path of a splat path.\n * Compatible both with react-router v6 and v7.\n *\n * Example:\n * If a splat path is defined as `/posts/:id/show/*`,\n * and the current location is `/posts/12/show/3`,\n * this hook will return `/posts/12/show`.\n *\n * Solution inspired by\n * https://github.com/remix-run/react-router/issues/11052#issuecomment-1828470203\n */\nexport const useSplatPathBase = () => {\n const location = useLocation();\n const params = useParams();\n const splatPathRelativePart = params['*'];\n const splatPathBase = location.pathname.replace(\n new RegExp(`/${splatPathRelativePart}$`),\n ''\n );\n return splatPathBase;\n};\n", "export const GET_LIST = 'GET_LIST';\nexport const GET_ONE = 'GET_ONE';\nexport const GET_MANY = 'GET_MANY';\nexport const GET_MANY_REFERENCE = 'GET_MANY_REFERENCE';\nexport const CREATE = 'CREATE';\nexport const UPDATE = 'UPDATE';\nexport const UPDATE_MANY = 'UPDATE_MANY';\nexport const DELETE = 'DELETE';\nexport const DELETE_MANY = 'DELETE_MANY';\n\nexport const fetchActionsWithRecordResponse = ['getOne', 'create', 'update'];\nexport const fetchActionsWithArrayOfIdentifiedRecordsResponse = [\n 'getList',\n 'getMany',\n 'getManyReference',\n];\nexport const fetchActionsWithArrayOfRecordsResponse = [\n ...fetchActionsWithArrayOfIdentifiedRecordsResponse,\n 'updateMany',\n 'deleteMany',\n];\nexport const fetchActionsWithTotalResponse = ['getList', 'getManyReference'];\n\nexport const reactAdminFetchActions = [\n ...fetchActionsWithRecordResponse,\n ...fetchActionsWithArrayOfRecordsResponse,\n];\n\nexport const sanitizeFetchType = (fetchType: string) => {\n switch (fetchType) {\n case GET_LIST:\n return 'getList';\n case GET_ONE:\n return 'getOne';\n case GET_MANY:\n return 'getMany';\n case GET_MANY_REFERENCE:\n return 'getManyReference';\n case CREATE:\n return 'create';\n case UPDATE:\n return 'update';\n case UPDATE_MANY:\n return 'updateMany';\n case DELETE:\n return 'delete';\n case DELETE_MANY:\n return 'deleteMany';\n default:\n return fetchType;\n }\n};\n", "import {\n CreateResult,\n DataProvider,\n DeleteResult,\n GetOneResult,\n UpdateResult,\n} from '../types';\n\n// avoids adding a context in tests\nexport const defaultDataProvider: DataProvider = {\n create: () => Promise.resolve<CreateResult>({ data: null }),\n delete: () => Promise.resolve<DeleteResult>({ data: null }),\n deleteMany: () => Promise.resolve({ data: [] }),\n getList: () => Promise.resolve({ data: [], total: 0 }),\n getMany: () => Promise.resolve({ data: [] }),\n getManyReference: () => Promise.resolve({ data: [], total: 0 }),\n getOne: () => Promise.resolve<GetOneResult>({ data: null }),\n update: () => Promise.resolve<UpdateResult>({ data: null }),\n updateMany: () => Promise.resolve({ data: [] }),\n};\n", "import {\n CREATE,\n DELETE,\n DELETE_MANY,\n GET_LIST,\n GET_MANY,\n GET_MANY_REFERENCE,\n GET_ONE,\n UPDATE,\n UPDATE_MANY,\n} from './dataFetchActions';\nimport { LegacyDataProvider, DataProvider } from '../types';\nimport { defaultDataProvider } from './defaultDataProvider';\n\nconst fetchMap = {\n create: CREATE,\n delete: DELETE,\n deleteMany: DELETE_MANY,\n getList: GET_LIST,\n getMany: GET_MANY,\n getManyReference: GET_MANY_REFERENCE,\n getOne: GET_ONE,\n update: UPDATE,\n updateMany: UPDATE_MANY,\n};\n\n/**\n * Turn a function-based dataProvider to an object-based one\n *\n * Allows using legacy dataProviders transparently.\n *\n * @param {Function} legacyDataProvider A legacy dataProvider (type, resource, params) => Promise<any>\n *\n * @returns {Object} A dataProvider that react-admin can use\n */\nconst convertLegacyDataProvider = (\n legacyDataProvider: LegacyDataProvider\n): DataProvider => {\n const proxy = new Proxy(defaultDataProvider, {\n get(_, name) {\n return (resource, params) => {\n if (Object.keys(fetchMap).includes(name.toString())) {\n const fetchType = fetchMap[name.toString()];\n return legacyDataProvider(fetchType, resource, params);\n }\n\n return legacyDataProvider(name.toString(), resource, params);\n };\n },\n apply(_, __, args) {\n return legacyDataProvider.apply(legacyDataProvider, args);\n },\n });\n\n return proxy;\n};\n\nexport default convertLegacyDataProvider;\n", "import { createContext } from 'react';\n\nimport { DataProvider } from '../types';\n\nconst DataProviderContext = createContext<DataProvider | null>(null);\n\nDataProviderContext.displayName = 'DataProviderContext';\n\nexport default DataProviderContext;\n", "class HttpError extends Error {\n constructor(\n public readonly message,\n public readonly status,\n public readonly body: any = null\n ) {\n super(message);\n Object.setPrototypeOf(this, HttpError.prototype);\n this.name = this.constructor.name;\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = new Error(message).stack;\n }\n this.stack = new Error().stack;\n }\n}\n\nexport default HttpError;\n", "import HttpError from './HttpError';\nimport { stringify } from 'query-string';\n\nexport interface Options extends RequestInit {\n user?: {\n authenticated?: boolean;\n token?: string;\n };\n}\n\nexport const createHeadersFromOptions = (options: Options): Headers => {\n const requestHeaders = (options.headers ||\n new Headers({\n Accept: 'application/json',\n })) as Headers;\n const hasBody = options && options.body;\n const isContentTypeSet = requestHeaders.has('Content-Type');\n const isGetMethod = !options?.method || options?.method === 'GET';\n const isFormData = options?.body instanceof FormData;\n\n const shouldSetContentType =\n hasBody && !isContentTypeSet && !isGetMethod && !isFormData;\n if (shouldSetContentType) {\n requestHeaders.set('Content-Type', 'application/json');\n }\n\n if (options.user && options.user.authenticated && options.user.token) {\n requestHeaders.set('Authorization', options.user.token);\n }\n\n return requestHeaders;\n};\n\n/**\n * Utility function to make HTTP calls. It's similar to the HTML5 `fetch()`, except it handles JSON decoding and HTTP error codes automatically.\n *\n * @param url the URL to call\n * @param options the options to pass to the HTTP call\n * @param options.user the user object, used for the Authorization header\n * @param options.user.token the token to pass as the Authorization header\n * @param options.user.authenticated whether the user is authenticated or not (the Authorization header will be set only if this is true)\n * @param options.headers the headers to pass to the HTTP call\n *\n * @returns {Promise} the Promise for a response object containing the following properties:\n * - status: the HTTP status code\n * - headers: the HTTP headers\n * - body: the response body\n * - json: the response body parsed as JSON\n */\nexport const fetchJson = (url, options: Options = {}) => {\n const requestHeaders = createHeadersFromOptions(options);\n\n return fetch(url, { ...options, headers: requestHeaders })\n .then(response =>\n response.text().then(text => ({\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n body: text,\n }))\n )\n .then(({ status, statusText, headers, body }) => {\n let json;\n try {\n json = JSON.parse(body);\n } catch (e) {\n // not json, no big deal\n }\n if (status < 200 || status >= 300) {\n return Promise.reject(\n new HttpError(\n (json && json.message) || statusText,\n status,\n json\n )\n );\n }\n return Promise.resolve({ status, headers, body, json });\n });\n};\n\nexport const queryParameters = stringify;\n\nconst isValidObject = value => {\n if (!value) {\n return false;\n }\n\n const isArray = Array.isArray(value);\n const isBuffer = typeof Buffer !== 'undefined' && Buffer.isBuffer(value);\n const isObject =\n Object.prototype.toString.call(value) === '[object Object]';\n const hasKeys = !!Object.keys(value).length;\n\n return !isArray && !isBuffer && isObject && hasKeys;\n};\n\nexport const flattenObject = (value: any, path: string[] = []) => {\n if (isValidObject(value)) {\n return Object.assign(\n {},\n ...Object.keys(value).map(key =>\n flattenObject(value[key], path.concat([key]))\n )\n );\n } else {\n return path.length ? { [path.join('.')]: value } : value;\n }\n};\n", "import EventEmitter from './index.js'\n\nexport { EventEmitter }\nexport default EventEmitter\n", "import EventEmitter from 'eventemitter3';\n\nexport default new EventEmitter();\n", "import { DataProvider } from '../types';\nimport { defaultDataProvider } from './defaultDataProvider';\n\nexport type DataProviderMatcher = (resource: string) => DataProvider;\n\n/**\n * Combine multiple data providers into one.\n *\n * @param dataProviderMatcher A function that returns a data provider for a given resource.\n *\n * @example\n * const dataProvider = combineDataProviders(resource => {\n * switch(resource) {\n * case 'posts':\n * case 'comments':\n * return dataProvider1;\n * case 'users':\n * return dataProvider2;\n * default:\n * throw new Error('Unknown resource');\n * }\n * });\n */\nexport const combineDataProviders = (\n dataProviderMatcher: DataProviderMatcher\n): DataProvider =>\n new Proxy(defaultDataProvider, {\n get: (target, name) => {\n if (name === 'then') {\n return null;\n }\n return (resource, ...params) => {\n if (typeof name === 'symbol') {\n return;\n }\n return dataProviderMatcher(resource)[name](resource, ...params);\n };\n },\n });\n", "import { DataProvider } from '../types';\n\n/**\n * A dataProvider meant to be used in tests only. You can override any of its methods by passing a partial dataProvider.\n *\n * @example\n * const dataProvider = testDataProvider({\n * getOne: async () => ({ data: { id: 123, title: 'foo' }})\n * })\n */\n\nconst defaultTestDataProvider: DataProvider = {\n create: async () => {\n throw new Error('create is not implemented');\n },\n delete: async () => {\n throw new Error('delete not implemented');\n },\n deleteMany: async () => {\n throw new Error('deleteMany is not implemented');\n },\n getList: async () => {\n throw new Error('getList is not implemented');\n },\n getMany: async () => {\n throw new Error('getMany is not implemented');\n },\n getManyReference: async () => {\n throw new Error('getManyReference is not implemented');\n },\n getOne: async () => {\n throw new Error('getOne is not implemented');\n },\n update: async () => {\n throw new Error('update not implemented');\n },\n updateMany: async () => {\n throw new Error('updateMany not implemented');\n },\n};\nexport const testDataProvider = (\n overrides?: Partial<DataProvider>\n): DataProvider => ({\n ...defaultTestDataProvider,\n ...overrides,\n});\n", "import {\n CreateParams,\n CreateResult,\n DataProvider,\n DeleteManyParams,\n DeleteManyResult,\n DeleteParams,\n DeleteResult,\n GetListParams,\n GetListResult,\n GetManyParams,\n GetManyReferenceParams,\n GetManyReferenceResult,\n GetManyResult,\n GetOneParams,\n GetOneResult,\n RaRecord,\n UpdateManyParams,\n UpdateManyResult,\n UpdateParams,\n UpdateResult,\n} from '../types';\n\n/**\n * Extend a dataProvider to execute callbacks before and after read and write calls.\n *\n * @param {DataProvider} dataProvider The dataProvider to wrap\n * @param {ResourceCallbacks[]} handlers An array of ResourceCallbacks\n *\n * @typedef {Object} ResourceCallbacks\n * @property {string} resource The resource name\n * @property {AfterCreate} [afterCreate] A callback (or array of callbacks) executed after create\n * @property {AfterDelete} [afterDelete] A callback (or array of callbacks) executed after delete\n * @property {AfterDeleteMany} [afterDeleteMany] A callback (or array of callbacks) executed after deleteMany\n * @property {AfterGetList} [afterGetList] A callback (or array of callbacks) executed after getList\n * @property {AfterGetMany} [afterGetMany] A callback (or array of callbacks) executed after getMany\n * @property {AfterGetManyReference} [afterGetManyReference] A callback (or array of callbacks) executed after getManyReference\n * @property {AfterGetOne} [afterGetOne] A callback (or array of callbacks) executed after getOne\n * @property {AfterRead} [afterRead] A callback (or array of callbacks) executed after read (getList, getMany, getManyReference, getOne)\n * @property {AfterSave} [afterSave] A callback (or array of callbacks) executed after save (create, update, updateMany)\n * @property {AfterUpdate} [afterUpdate] A callback (or array of callbacks) executed after update\n * @property {AfterUpdateMany} [afterUpdateMany] A callback (or array of callbacks) executed after updateMany\n * @property {BeforeCreate} [beforeCreate] A callback (or array of callbacks) executed before create\n * @property {BeforeDelete} [beforeDelete] A callback (or array of callbacks) executed before delete\n * @property {BeforeDeleteMany} [beforeDeleteMany] A callback (or array of callbacks) executed before deleteMany\n * @property {BeforeGetList} [beforeGetList] A callback (or array of callbacks) executed before getList\n * @property {BeforeGetMany} [beforeGetMany] A callback (or array of callbacks) executed before getMany\n * @property {BeforeGetManyReference} [beforeGetManyReference] A callback (or array of callbacks) executed before getManyReference\n * @property {BeforeGetOne} [beforeGetOne] A callback (or array of callbacks) executed before getOne\n * @property {BeforeSave} [beforeSave] A callback (or array of callbacks) executed before save (create, update, updateMany)\n * @property {BeforeUpdate} [beforeUpdate] A callback (or array of callbacks) executed before update\n * @property {BeforeUpdateMany} [beforeUpdateMany] A callback (or array of callbacks) executed before updateMany\n *\n * Warnings:\n * - As queries issued in the callbacks are not done through react-query,\n * any change in the data will not be automatically reflected in the UI.\n * - The callbacks are not executed in a transaction. In case of error,\n * the backend may be left in an inconsistent state.\n * - When calling the API directly using fetch or another client,\n * the callbacks will not be executed, leaving the backend in a possibly inconsistent state.\n * - If a callback triggers the query it's listening to, this will lead to a infinite loop.\n *\n * @example\n *\n * const dataProvider = withLifecycleCallbacks(\n * jsonServerProvider(\"http://localhost:3000\"),\n * [\n * {\n * resource: \"posts\",\n * afterRead: async (data, dataProvider, resource) => {\n * // rename field to the record\n * data.user_id = data.userId;\n * return data;\n * },\n * // executed after create, update and updateMany\n * afterSave: async (record, dataProvider, resource) => {\n * // update the author's nb_posts\n * const { total } = await dataProvider.getList(\"users\", {\n * filter: { id: record.user_id },\n * pagination: { page: 1, perPage: 1 },\n * });\n * await dataProvider.update(\"users\", {\n * id: user.id,\n * data: { nb_posts: total },\n * previousData: user,\n * });\n * return record;\n * },\n * beforeDelete: async (params, dataProvider, resource) => {\n * // delete all comments linked to the post\n * const { data: comments } = await dataProvider.getManyReference(\n * \"comments\",\n * {\n * target: \"post_id\",\n * id: params.id,\n * }\n * );\n * if (comments.length > 0) {\n * await dataProvider.deleteMany(\"comments\", {\n * ids: comments.map((comment) => comment.id),\n * });\n * }\n * // update the author's nb_posts\n * const { data: post } = await dataProvider.getOne(\"posts\", {\n * id: params.id,\n * });\n * const { total } = await dataProvider.getList(\"users\", {\n * filter: { id: post.user_id },\n * pagination: { page: 1, perPage: 1 },\n * });\n * await dataProvider.update(\"users\", {\n * id: user.id,\n * data: { nb_posts: total - 1 },\n * previousData: user,\n * });\n * return params;\n * },\n * },\n * ]\n * );\n */\nexport const withLifecycleCallbacks = (\n dataProvider: DataProvider,\n handlers: ResourceCallbacks[]\n): DataProvider => {\n return {\n ...dataProvider,\n\n getList: async function <RecordType extends RaRecord = any>(\n resource: string,\n params: GetListParams\n ) {\n let newParams = params;\n\n newParams = await applyCallbacks({\n name: 'beforeGetList',\n params: newParams,\n dataProvider,\n handlers,\n resource,\n });\n let result = await dataProvider.getList<RecordType>(\n resource,\n newParams\n );\n result = await applyCallbacks({\n name: 'afterGetList',\n params: result,\n dataProvider,\n handlers,\n resource,\n });\n result.data = await Promise.all(\n result.data.map(record =>\n applyCallbacks({\n name: 'afterRead',\n params: record,\n dataProvider,\n handlers,\n resource,\n })\n )\n );\n\n return result;\n },\n\n getOne: async function <RecordType extends RaRecord = any>(\n resource: string,\n params: GetOneParams<RecordType>\n ) {\n let newParams = params;\n\n newParams = await applyCallbacks({\n name: 'beforeGetOne',\n params: newParams,\n dataProvider,\n handlers,\n resource,\n });\n let result = await dataProvider.getOne<RecordType>(\n resource,\n newParams\n );\n result = await applyCallbacks({\n name: 'afterGetOne',\n params: result,\n dataProvider,\n handlers,\n resource,\n });\n result.data = await applyCallbacks({\n name: 'afterRead',\n params: result.data,\n dataProvider,\n handlers,\n resource,\n });\n\n return result;\n },\n\n getMany: async function <RecordType extends RaRecord = any>(\n resource: string,\n params: GetManyParams<RecordType>\n ) {\n let newParams = params;\n\n newParams = await applyCallbacks({\n name: 'beforeGetMany',\n params: newParams,\n dataProvider,\n handlers,\n resource,\n });\n let result = await dataProvider.getMany<RecordType>(\n resource,\n newParams\n );\n result = await applyCallbacks({\n name: 'afterGetMany',\n params: result,\n dataProvider,\n handlers,\n resource,\n });\n result.data = await Promise.all(\n result.data.map(record =>\n applyCallbacks({\n name: 'afterRead',\n params: record,\n dataProvider,\n handlers,\n resource,\n })\n )\n );\n\n return result;\n },\n\n getManyReference: async function <RecordType extends RaRecord = any>(\n resource: string,\n params: GetManyReferenceParams\n ) {\n let newParams = params;\n\n newParams = await applyCallbacks({\n name: 'beforeGetManyReference',\n params: newParams,\n dataProvider,\n handlers,\n resource,\n });\n let result = await dataProvider.getManyReference<RecordType>(\n resource,\n newParams\n );\n result = await applyCallbacks({\n name: 'afterGetManyReference',\n params: result,\n dataProvider,\n handlers,\n resource,\n });\n result.data = await Promise.all(\n result.data.map(record =>\n applyCallbacks({\n name: 'afterRead',\n params: record,\n dataProvider,\n handlers,\n resource,\n })\n )\n );\n return result;\n },\n\n update: async function <RecordType extends RaRecord = any>(\n resource: string,\n params: UpdateParams<RecordType>\n ) {\n let newParams = params;\n\n newParams = await applyCallbacks({\n name: 'beforeUpdate',\n params: newParams,\n dataProvider,\n handlers,\n resource,\n });\n newParams.data = await applyCallbacks({\n name: 'beforeSave',\n params: newParams.data,\n dataProvider,\n handlers,\n resource,\n });\n let result = await dataProvider.update<RecordType>(\n resource,\n newParams\n );\n result = await applyCallbacks({\n name: 'afterUpdate',\n params: result,\n dataProvider,\n handlers,\n resource,\n });\n result.data = await applyCallbacks({\n name: 'afterSave',\n params: result.data,\n dataProvider,\n handlers,\n resource,\n });\n\n return result;\n },\n\n create: async function <RecordType extends RaRecord = any>(\n resource: string,\n params: CreateParams<RecordType>\n ) {\n let newParams = params;\n\n newParams = await applyCallbacks({\n name: 'beforeCreate',\n params: newParams,\n dataProvider,\n handlers,\n resource,\n });\n newParams.data = await applyCallbacks({\n name: 'beforeSave',\n params: newParams.data,\n dataProvider,\n handlers,\n resource,\n });\n let result = await dataProvider.create<RecordType>(\n resource,\n newParams\n );\n result = await applyCallbacks({\n name: 'afterCreate',\n params: result,\n dataProvider,\n handlers,\n resource,\n });\n result.data = await applyCallbacks({\n name: 'afterSave',\n params: result.data,\n dataProvider,\n handlers,\n resource,\n });\n\n return result;\n },\n\n delete: async function <RecordType extends RaRecord = any>(\n resource: string,\n params: DeleteParams<RecordType>\n ) {\n let newParams = params;\n\n newParams = await applyCallbacks({\n name: 'beforeDelete',\n params: newParams,\n dataProvider,\n handlers,\n resource,\n });\n let result = await dataProvider.delete<RecordType>(\n resource,\n newParams\n );\n result = await applyCallbacks({\n name: 'afterDelete',\n params: result,\n dataProvider,\n handlers,\n resource,\n });\n\n return result;\n },\n\n updateMany: async function <RecordType extends RaRecord = any>(\n resource: string,\n params: UpdateManyParams<RecordType>\n ) {\n let newParams = params;\n\n newParams = await applyCallbacks({\n name: 'beforeUpdateMany',\n params: newParams,\n dataProvider,\n handlers,\n resource,\n });\n\n newParams.data = await applyCallbacks({\n name: 'beforeSave',\n params: newParams.data,\n dataProvider,\n handlers,\n resource,\n });\n\n let result = await dataProvider.updateMany<RecordType>(\n resource,\n newParams\n );\n result = await applyCallbacks({\n name: 'afterUpdateMany',\n params: result,\n dataProvider,\n handlers,\n resource,\n });\n\n const afterSaveHandlers = handlers.filter(\n h =>\n (h.resource === resource || h.resource === '*') &&\n h.afterSave\n );\n\n if (afterSaveHandlers.length > 0) {\n const { data: records } = await dataProvider.getMany(resource, {\n //@ts-ignore\n ids: result.data,\n });\n await Promise.all(\n records.map(record =>\n applyCallbacks({\n name: 'afterSave',\n params: record,\n dataProvider,\n handlers,\n resource,\n })\n )\n );\n }\n\n return result;\n },\n\n deleteMany: async function <RecordType extends RaRecord = any>(\n resource: string,\n params: DeleteManyParams<RecordType>\n ) {\n let newParams = params;\n\n newParams = await applyCallbacks({\n name: 'beforeDeleteMany',\n params: newParams,\n dataProvider,\n handlers,\n resource,\n });\n let result = await dataProvider.deleteMany<RecordType>(\n resource,\n newParams\n );\n result = await applyCallbacks({\n name: 'afterDeleteMany',\n params: result,\n dataProvider,\n handlers,\n resource,\n });\n\n return result;\n },\n };\n};\n\n/**\n * Apply callbacks to the params for the given resource and hook\n * @param {DataProvider} dataProvider The dataProvider\n * @param {ResourceCallbacks[]} handlers An array of ResourceCallbacks\n * @param {string} resource The resource name\n * @param {string} hook The hook name (beforeGetList, afterGetOne, etc.)\n * @param {U} params The params / result to pass to the callbacks\n * @returns {Promise<U>} The params / result after the callbacks have been applied\n */\nexport const applyCallbacks = async function <U>({\n name,\n params,\n dataProvider,\n handlers,\n resource,\n}: {\n name: string;\n params: U;\n dataProvider: DataProvider;\n handlers: ResourceCallbacks[];\n resource: string;\n}): Promise<U> {\n let newParams = params;\n const handlersToApply = handlers.filter(\n h => (h.resource === resource || h.resource === '*') && h[name]\n );\n for (let handler of handlersToApply) {\n const callbacksValue: ResourceCallbacksValue<any> = handler[name];\n if (Array.isArray(callbacksValue)) {\n for (let callback of callbacksValue ?? []) {\n newParams = await callback(newParams, dataProvider, resource);\n }\n } else {\n newParams = await callbacksValue(newParams, dataProvider, resource);\n }\n }\n return newParams;\n};\n\nexport type ResourceCallback<U> = {\n (params: U, dataProvider: DataProvider, resource: string): Promise<U>;\n};\n\nexport type ResourceCallbacksValue<V> =\n | ResourceCallback<V>\n | ResourceCallback<V>[];\n\nexport type ResourceCallbacks<T extends RaRecord = any> = {\n resource: string;\n afterCreate?: ResourceCallbacksValue<CreateResult<T>>;\n afterDelete?: ResourceCallbacksValue<DeleteResult<T>>;\n afterDeleteMany?: ResourceCallbacksValue<DeleteManyResult<T>>;\n afterGetList?: ResourceCallbacksValue<GetListResult<T>>;\n afterGetMany?: ResourceCallbacksValue<GetManyResult<T>>;\n afterGetManyReference?: ResourceCallbacksValue<GetManyReferenceResult<T>>;\n afterGetOne?: ResourceCallbacksValue<GetOneResult<T>>;\n afterUpdate?: ResourceCallbacksValue<UpdateResult<T>>;\n afterUpdateMany?: ResourceCallbacksValue<UpdateManyResult<T>>;\n beforeCreate?: ResourceCallbacksValue<CreateParams<T>>;\n beforeDelete?: ResourceCallbacksValue<DeleteParams<T>>;\n beforeDeleteMany?: ResourceCallbacksValue<DeleteManyParams<T>>;\n beforeGetList?: ResourceCallbacksValue<GetListParams>;\n beforeGetMany?: ResourceCallbacksValue<GetManyParams>;\n beforeGetManyReference?: ResourceCallbacksValue<GetManyReferenceParams>;\n beforeGetOne?: ResourceCallbacksValue<GetOneParams<T>>;\n beforeUpdate?: ResourceCallbacksValue<UpdateParams<T>>;\n beforeUpdateMany?: ResourceCallbacksValue<UpdateManyParams<T>>;\n\n // The following hooks don't match a dataProvider method\n\n /**\n * Modify the data before it is sent to the dataProvider.\n *\n * Used in create, update, and updateMany\n *\n * Note: This callback doesn't modify the record itself, but the data argument\n * (which may be a diff, especially when called with updateMany).\n */\n beforeSave?: ResourceCallbacksValue<T>;\n /**\n * Update a record after it has been read from the dataProvider\n *\n * Used in getOne, getList, getMany, and getManyReference\n */\n afterRead?: ResourceCallbacksValue<T>;\n /**\n * Use the record after it is returned by the dataProvider.\n *\n * Used in create, update, and updateMany\n */\n afterSave?: ResourceCallbacksValue<T>;\n};\n", "import { useContext, useMemo } from 'react';\nimport { useQueryClient } from '@tanstack/react-query';\n\nimport DataProviderContext from './DataProviderContext';\nimport { defaultDataProvider } from './defaultDataProvider';\nimport validateResponseFormat from './validateResponseFormat';\nimport { DataProvider } from '../types';\nimport useLogoutIfAccessDenied from '../auth/useLogoutIfAccessDenied';\nimport { reactAdminFetchActions } from './dataFetchActions';\nimport { populateQueryCache } from './populateQueryCache';\n\n/**\n * Hook for getting a dataProvider\n *\n * Gets a dataProvider object, which behaves just like the real dataProvider\n * (same methods returning a Promise). But it's actually a Proxy object,\n * which validates the response format, and logs the user out upon error\n * if authProvider.checkError() rejects.\n *\n * @return dataProvider\n *\n * @example Basic usage\n *\n * import * as React from 'react';\n * import { useState } from 'react';\n * import { useDataProvider } from 'react-admin';\n *\n * const PostList = () => {\n * const [posts, setPosts] = useState([])\n * const dataProvider = useDataProvider();\n * useEffect(() => {\n * dataProvider.getList('posts', { filter: { status: 'pending' }})\n * .then(({ data }) => setPosts(data));\n * }, [])\n *\n * return (\n * <Fragment>\n * {posts.map((post, key) => <PostDetail post={post} key={key} />)}\n * </Fragment>\n * );\n * }\n *\n * @example Handling all states (loading, error, success)\n *\n * import { useState, useEffect } from 'react';\n * import { useDataProvider } from 'react-admin';\n *\n * const UserProfile = ({ userId }) => {\n * const dataProvider = useDataProvider();\n * const [user, setUser] = useState();\n * const [loading, setLoading] = useState(true);\n * const [error, setError] = useState();\n * useEffect(() => {\n * dataProvider.getOne('users', { id: userId })\n * .then(({ data }) => {\n * setUser(data);\n * setLoading(false);\n * })\n * .catch(error => {\n * setError(error);\n * setLoading(false);\n * })\n * }, []);\n *\n * if (loading) return <Loading />;\n * if (error) return <Error />\n * if (!user) return null;\n *\n * return (\n * <ul>\n * <li>Name: {user.name}</li>\n * <li>Email: {user.email}</li>\n * </ul>\n * )\n * }\n */\n\nconst arrayReturnTypes = ['getList', 'getMany', 'getManyReference'];\n\nexport const useDataProvider = <\n TDataProvider extends DataProvider = DataProvider,\n>(): TDataProvider => {\n const dataProvider = (useContext(DataProviderContext) ||\n defaultDataProvider) as unknown as TDataProvider;\n const queryClient = useQueryClient();\n\n const logoutIfAccessDenied = useLogoutIfAccessDenied();\n\n const dataProviderProxy = useMemo(() => {\n return new Proxy(dataProvider, {\n get: (_, name) => {\n if (typeof name === 'symbol' || name === 'then') {\n return;\n }\n if (name === 'supportAbortSignal') {\n return dataProvider.supportAbortSignal;\n }\n return (...args) => {\n const type = name.toString();\n\n if (typeof dataProvider[type] !== 'function') {\n throw new Error(\n `Unknown dataProvider function: ${type}`\n );\n }\n\n try {\n return dataProvider[type]\n .apply(dataProvider, args)\n .then(response => {\n if (\n process.env.NODE_ENV === 'development' &&\n reactAdminFetchActions.includes(type)\n ) {\n validateResponseFormat(response, type);\n }\n if (response?.meta?.prefetched) {\n populateQueryCache({\n data: response?.meta.prefetched,\n queryClient,\n });\n }\n return response;\n })\n .catch(error => {\n if (\n process.env.NODE_ENV !== 'production' &&\n // do not log AbortErrors\n !isAbortError(error)\n ) {\n console.error(error);\n }\n return logoutIfAccessDenied(error).then(\n loggedOut => {\n if (loggedOut)\n return {\n data: arrayReturnTypes.includes(\n type\n )\n ? []\n : {},\n };\n throw error;\n }\n );\n });\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n console.error(e);\n }\n throw new Error(\n 'The dataProvider threw an error. It should return a rejected Promise instead.'\n );\n }\n };\n },\n });\n }, [dataProvider, logoutIfAccessDenied, queryClient]);\n\n return dataProviderProxy;\n};\n\nconst isAbortError = error =>\n error instanceof DOMException &&\n (error as DOMException).name === 'AbortError';\n", "import {\n fetchActionsWithRecordResponse,\n fetchActionsWithArrayOfIdentifiedRecordsResponse,\n fetchActionsWithArrayOfRecordsResponse,\n fetchActionsWithTotalResponse,\n} from './dataFetchActions';\n\nfunction validateResponseFormat(\n response,\n type,\n logger = console.error // eslint-disable-line no-console\n) {\n if (!response) {\n logger(`The dataProvider returned an empty response for '${type}'.`);\n throw new Error('ra.notification.data_provider_error');\n }\n if (!response.hasOwnProperty('data')) {\n logger(\n `The response to '${type}' must be like { data: ... }, but the received response does not have a 'data' key. The dataProvider is probably wrong for '${type}'.`\n );\n throw new Error('ra.notification.data_provider_error');\n }\n if (\n fetchActionsWithArrayOfRecordsResponse.includes(type) &&\n !Array.isArray(response.data)\n ) {\n logger(\n `The response to '${type}' must be like { data : [...] }, but the received data is not an array. The dataProvider is probably wrong for '${type}'`\n );\n throw new Error('ra.notification.data_provider_error');\n }\n if (\n fetchActionsWithArrayOfIdentifiedRecordsResponse.includes(type) &&\n Array.isArray(response.data) &&\n response.data.length > 0 &&\n !response.data[0].hasOwnProperty('id')\n ) {\n logger(\n `The response to '${type}' must be like { data : [{ id: 123, ...}, ...] }, but the received data items do not have an 'id' key. The dataProvider is probably wrong for '${type}'`\n );\n throw new Error('ra.notification.data_provider_error');\n }\n if (\n fetchActionsWithRecordResponse.includes(type) &&\n !response.data.hasOwnProperty('id')\n ) {\n logger(\n `The response to '${type}' must be like { data: { id: 123, ... } }, but the received data does not have an 'id' key. The dataProvider is probably wrong for '${type}'`\n );\n throw new Error('ra.notification.data_provider_error');\n }\n if (\n fetchActionsWithTotalResponse.includes(type) &&\n !response.hasOwnProperty('total') &&\n !response.hasOwnProperty('pageInfo')\n ) {\n logger(\n `The response to '${type}' must be like { data: [...], total: 123 } or { data: [...], pageInfo: {...} }, but the received response has neither a 'total' nor a 'pageInfo' key. The dataProvider is probably wrong for '${type}'`\n );\n throw new Error('ra.notification.data_provider_error');\n }\n}\n\nexport default validateResponseFormat;\n", "import { useCallback } from 'react';\n\nimport useAuthProvider from './useAuthProvider';\nimport useLogout from './useLogout';\nimport { useNotify } from '../notification';\nimport { useNavigate } from 'react-router';\n\nlet timer;\n\n/**\n * Returns a callback used to call the authProvider.checkError() method\n * and an error from the dataProvider. If the authProvider rejects the call,\n * the hook logs the user out and shows a logged out notification.\n *\n * Used in the useDataProvider hook to check for access denied responses\n * (e.g. 401 or 403 responses) and trigger a logout.\n *\n * @see useLogout\n * @see useDataProvider\n *\n * @returns {Function} logoutIfAccessDenied callback\n *\n * @example\n *\n * import { useLogoutIfAccessDenied, useNotify, DataProviderContext } from 'react-admin';\n *\n * const FetchRestrictedResource = () => {\n * const dataProvider = useContext(DataProviderContext);\n * const logoutIfAccessDenied = useLogoutIfAccessDenied();\n * const notify = useNotify()\n * useEffect(() => {\n * dataProvider.getOne('secret', { id: 123 })\n * .catch(error => {\n * logoutIfAccessDenied(error);\n * notify('server error', { type: 'error' });\n * })\n * }, []);\n * // ...\n * }\n */\nconst useLogoutIfAccessDenied = (): LogoutIfAccessDenied => {\n const authProvider = useAuthProvider();\n const logout = useLogout();\n const notify = useNotify();\n const navigate = useNavigate();\n const logoutIfAccessDenied = useCallback(\n (error?: any) => {\n if (!authProvider) {\n return logoutIfAccessDeniedWithoutProvider();\n }\n return authProvider\n .checkError(error)\n .then(() => false)\n .catch(async e => {\n const logoutUser = e?.logoutUser ?? true;\n //manual debounce\n if (timer) {\n // side effects already triggered in this tick, exit\n return true;\n }\n timer = setTimeout(() => {\n timer = undefined;\n }, 0);\n\n const redirectTo =\n e && e.redirectTo != null\n ? e.redirectTo\n : error && error.redirectTo\n ? error.redirectTo\n : undefined;\n\n const shouldNotify = !(\n (e && e.message === false) ||\n (error && error.message === false) ||\n redirectTo?.startsWith('http')\n );\n if (shouldNotify) {\n // notify only if not yet logged out\n authProvider\n .checkAuth({})\n .then(() => {\n if (logoutUser) {\n notify(\n getErrorMessage(\n e,\n 'ra.notification.logged_out'\n ),\n { type: 'error' }\n );\n } else {\n notify(\n getErrorMessage(\n e,\n 'ra.notification.not_authorized'\n ),\n { type: 'error' }\n );\n }\n })\n .catch(() => {});\n }\n\n if (logoutUser) {\n logout({}, redirectTo);\n } else {\n if (redirectTo.startsWith('http')) {\n // absolute link (e.g. https://my.oidc.server/login)\n window.location.href = redirectTo;\n } else {\n // internal location\n navigate(redirectTo);\n }\n }\n\n return true;\n });\n },\n [authProvider, logout, notify, navigate]\n );\n return logoutIfAccessDenied;\n};\n\nconst logoutIfAccessDeniedWithoutProvider = () => Promise.resolve(false);\n\n/**\n * Call the authProvider.authError() method, using the error passed as argument.\n * If the authProvider rejects the call, logs the user out and shows a logged out notification.\n *\n * @param {Error} error An Error object (usually returned by the dataProvider)\n *\n * @return {Promise} Resolved to true if there was a logout, false otherwise\n */\ntype LogoutIfAccessDenied = (error?: any) => Promise<boolean>;\n\nconst getErrorMessage = (error, defaultMessage) =>\n typeof error === 'string'\n ? error\n : typeof error === 'undefined' || !error.message\n ? defaultMessage\n : error.message;\n\nexport default useLogoutIfAccessDenied;\n", "import type { QueryClient } from '@tanstack/react-query';\n\nexport type PopulateQueryCacheOptions = {\n data: Record<string, any[]>;\n queryClient: QueryClient;\n staleTime?: number;\n};\n\n/**\n * Populate react-query's query cache with a data dictionary\n *\n * @example\n * const data = {\n * posts: [{ id: 1, title: 'Hello, world' }, { id: 2, title: 'FooBar' }],\n * comments: [{ id: 1, post_id: 1, body: 'Nice post!' }],\n * };\n * populateQueryCache({ data, queryClient });\n * // setQueryData(['posts', 'getOne', { id: '1' }], { id: 1, title: 'Hello, world' });\n * // setQueryData(['posts', 'getOne', { id: '2' }], { id: 2, title: 'FooBar' });\n * // setQueryData(['posts', 'getMany', { ids: ['1', '2'] }], [{ id: 1, title: 'Hello, world' }, { id: 2, title: 'FooBar' }]);\n * // setQueryData(['comments', 'getOne', { id: '1' }], { id: 1, post_id: 1, body: 'Nice post!' });\n * // setQueryData(['comments', 'getMany', { ids: ['1'] }], [{ id: 1, post_id: 1, body: 'Nice post!' });\n */\nexport const populateQueryCache = ({\n data,\n queryClient,\n staleTime = 1000, // ms\n}: PopulateQueryCacheOptions) => {\n // setQueryData doesn't accept a stale time option\n // So we set an updatedAt in the future to make sure the data isn't considered stale\n const updatedAt = Date.now() + staleTime;\n Object.keys(data).forEach(resource => {\n data[resource].forEach(record => {\n if (!record || record.id == null) return;\n queryClient.setQueryData(\n [resource, 'getOne', { id: String(record.id) }],\n record,\n { updatedAt }\n );\n });\n const recordIds = data[resource].map(record => String(record.id));\n queryClient.setQueryData(\n [resource, 'getMany', { ids: recordIds }],\n data[resource],\n { updatedAt }\n );\n });\n};\n", "import { useEffect, useState } from 'react';\nimport { useQueryClient, QueryObserver } from '@tanstack/react-query';\n\n/**\n * Check if react-query has already fetched data for a query key.\n *\n * This hook is reactive.\n *\n * @example\n * const isCustomerLoaded = useIsDataLoaded(['customers', 'getOne', { id: customerId }]);\n *\n * @returns {boolean} true if the data is loaded, false otherwise\n */\nexport const useIsDataLoaded = (\n queryKey: any,\n options: { enabled?: boolean } = {}\n) => {\n const { enabled = true } = options;\n const queryClient = useQueryClient();\n const [isDataLoaded, setDataLoaded] = useState<boolean>(() => {\n if (!enabled) {\n return false;\n }\n return queryClient.getQueryData(queryKey) !== undefined;\n });\n\n useEffect(() => {\n if (!enabled) return;\n if (queryClient.getQueryData(queryKey) === undefined) {\n const observer = new QueryObserver(queryClient, { queryKey });\n const unsubscribe = observer.subscribe(result => {\n setDataLoaded(!result.isPending);\n unsubscribe();\n });\n return unsubscribe;\n }\n }, [enabled, queryKey, queryClient]);\n\n return isDataLoaded;\n};\n", "import React from 'react';\n\nimport { notifyManager, useQueryClient } from '@tanstack/react-query';\n\n/**\n * Get the state of the dataProvider connection.\n *\n * Returns true if a query or a mutation is pending.\n *\n * Custom implementation because react-query's useIsFetching and useIsMutating\n * render each time the number of active queries changes, which is too often.\n *\n * @see useIsFetching\n * @see useIsMutating\n */\nexport const useLoading = (): boolean => {\n const client = useQueryClient();\n const mountedRef = React.useRef(false);\n const isFetchingRef = React.useRef(client.isFetching() > 0);\n const isMutatingRef = React.useRef(client.isMutating() > 0);\n\n const [isLoading, setIsLoading] = React.useState<boolean>(\n isFetchingRef.current || isMutatingRef.current\n );\n\n React.useEffect(() => {\n mountedRef.current = true;\n\n const unsubscribeQueryCache = client.getQueryCache().subscribe(\n notifyManager.batchCalls(() => {\n if (mountedRef.current) {\n isFetchingRef.current = client.isFetching() > 0;\n setIsLoading(\n isFetchingRef.current || isMutatingRef.current\n );\n }\n })\n );\n\n const unsubscribeMutationCache = client.getMutationCache().subscribe(\n notifyManager.batchCalls(() => {\n if (mountedRef.current) {\n isMutatingRef.current = client.isMutating() > 0;\n setIsLoading(\n isFetchingRef.current || isMutatingRef.current\n );\n }\n })\n );\n\n return () => {\n mountedRef.current = false;\n unsubscribeQueryCache();\n unsubscribeMutationCache();\n };\n }, [client]);\n\n return isLoading;\n};\n", "import { useCallback } from 'react';\nimport { useQueryClient } from '@tanstack/react-query';\n\n/**\n * Hook for triggering a page refresh. Returns a callback function.\n *\n * The callback invalidates all queries and refetches the active ones.\n * Any component depending on react-query data will be re-rendered.\n *\n * @example\n *\n * const refresh = useRefresh();\n * const handleClick = () => {\n * refresh();\n * };\n */\nexport const useRefresh = () => {\n const queryClient = useQueryClient();\n return useCallback(() => {\n queryClient.invalidateQueries();\n }, [queryClient]);\n};\n", "import { RaRecord, GetOneParams, GetOneResult } from '../types';\nimport {\n useQuery,\n UseQueryOptions,\n UseQueryResult,\n} from '@tanstack/react-query';\nimport { useDataProvider } from './useDataProvider';\nimport { useEffect } from 'react';\nimport { useEvent } from '../util';\n\n/**\n * Call the dataProvider.getOne() method and return the resolved value\n * as well as the loading state.\n *\n * The return value updates according to the request state:\n *\n * - start: { isPending: true, isFetching: true, refetch }\n * - success: { data: [data from response], isPending: false, refetch }\n * - error: { error: [error from response], isPending: false, refetch }\n *\n * This hook will return the cached result when called a second time\n * with the same parameters, until the response arrives.\n *\n * @param resource The resource name, e.g. 'posts'\n * @param {Params} params The getOne parameters { id, meta }, e.g. { id: 123 }\n * @param {Options} options Options object to pass to the react-query queryClient.\n *\n * @typedef Params\n * @prop id a resource identifier, e.g. 123\n *\n * @typedef Options\n * @prop enabled Flag to conditionally run the query. If it's false, the query will not run\n * @prop onSuccess Side effect function to be executed upon success, e.g. { onSuccess: { refresh: true } }\n * @prop onError Side effect function to be executed upon failure, e.g. { onError: error => notify(error.message) }\n *\n * @returns The current request state. Destructure as { data, error, isPending, refetch }.\n *\n * @example\n *\n * import { useGetOne, useRecordContext } from 'react-admin';\n *\n * const UserProfile = () => {\n * const record = useRecordContext();\n * const { data, isPending, error } = useGetOne('users', { id: record.id });\n * if (isPending) { return <Loading />; }\n * if (error) { return <p>ERROR</p>; }\n * return <div>User {data.username}</div>;\n * };\n */\nexport const useGetOne = <RecordType extends RaRecord = any, ErrorType = Error>(\n resource: string,\n { id, meta }: Partial<GetOneParams<RecordType>>,\n options: UseGetOneOptions<RecordType, ErrorType> = {}\n): UseGetOneHookValue<RecordType, ErrorType> => {\n const dataProvider = useDataProvider();\n const {\n onError = noop,\n onSuccess = noop,\n onSettled = noop,\n enabled,\n ...queryOptions\n } = options;\n const onSuccessEvent = useEvent(onSuccess);\n const onErrorEvent = useEvent(onError);\n const onSettledEvent = useEvent(onSettled);\n\n const result = useQuery<RecordType, ErrorType>({\n // Sometimes the id comes as a string (e.g. when read from the URL in a Show view).\n // Sometimes the id comes as a number (e.g. when read from a Record in useGetList response).\n // As the react-query cache is type-sensitive, we always stringify the identifier to get a match\n queryKey: [resource, 'getOne', { id: String(id), meta }],\n queryFn: queryParams =>\n id == null\n ? new Promise(() => {})\n : dataProvider\n .getOne<RecordType>(resource, {\n id,\n meta,\n signal:\n dataProvider.supportAbortSignal === true\n ? queryParams.signal\n : undefined,\n })\n .then(({ data }) => data),\n enabled: enabled ?? id != null,\n ...queryOptions,\n });\n\n useEffect(() => {\n if (\n result.data === undefined ||\n result.error != null ||\n result.isFetching\n )\n return;\n onSuccessEvent(result.data);\n }, [onSuccessEvent, result.data, result.error, result.isFetching]);\n\n useEffect(() => {\n if (result.error == null || result.isFetching) return;\n onErrorEvent(result.error);\n }, [onErrorEvent, result.error, result.isFetching]);\n\n useEffect(() => {\n if (result.status === 'pending' || result.isFetching) return;\n onSettledEvent(result.data, result.error);\n }, [\n onSettledEvent,\n result.data,\n result.error,\n result.status,\n result.isFetching,\n ]);\n\n return result;\n};\n\nconst noop = () => undefined;\n\nexport type UseGetOneOptions<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> = Omit<\n UseQueryOptions<GetOneResult<RecordType>['data'], ErrorType>,\n 'queryKey' | 'queryFn'\n> & {\n onSuccess?: (data: GetOneResult<RecordType>['data']) => void;\n onError?: (error: ErrorType) => void;\n onSettled?: (\n data?: GetOneResult<RecordType>['data'],\n error?: ErrorType | null\n ) => void;\n};\n\nexport type UseGetOneHookValue<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> = UseQueryResult<GetOneResult<RecordType>['data'], ErrorType>;\n", "import { useEffect, useMemo, useRef } from 'react';\nimport {\n useQuery,\n UseQueryOptions,\n UseQueryResult,\n useQueryClient,\n} from '@tanstack/react-query';\n\nimport { RaRecord, GetListParams, GetListResult } from '../types';\nimport { useDataProvider } from './useDataProvider';\nimport { useEvent } from '../util';\n\nconst MAX_DATA_LENGTH_TO_CACHE = 100;\n\n/**\n * Call the dataProvider.getList() method and return the resolved result\n * as well as the loading state.\n *\n * The return value updates according to the request state:\n *\n * - start: { isPending: true, refetch }\n * - success: { data: [data from store], total: [total from response], isPending: false, refetch }\n * - error: { error: [error from response], isPending: false, refetch }\n *\n * This hook will return the cached result when called a second time\n * with the same parameters, until the response arrives.\n *\n * @param {string} resource The resource name, e.g. 'posts'\n * @param {Params} params The getList parameters { pagination, sort, filter, meta }\n * @param {Object} options Options object to pass to the queryClient.\n * May include side effects to be executed upon success or failure, e.g. { onSuccess: () => { refresh(); } }\n *\n * @typedef Params\n * @prop params.pagination The request pagination { page, perPage }, e.g. { page: 1, perPage: 10 }\n * @prop params.sort The request sort { field, order }, e.g. { field: 'id', order: 'DESC' }\n * @prop params.filter The request filters, e.g. { title: 'hello, world' }\n * @prop params.meta Optional meta parameters\n *\n * @returns The current request state. Destructure as { data, total, error, isPending, refetch }.\n *\n * @example\n *\n * import { useGetList } from 'react-admin';\n *\n * const LatestNews = () => {\n * const { data, total, isPending, error } = useGetList(\n * 'posts',\n * { pagination: { page: 1, perPage: 10 }, sort: { field: 'published_at', order: 'DESC' } }\n * );\n * if (isPending) { return <Loading />; }\n * if (error) { return <p>ERROR</p>; }\n * return <ul>{data.map(item =>\n * <li key={item.id}>{item.title}</li>\n * )}</ul>;\n * };\n */\nexport const useGetList = <\n RecordType extends RaRecord = any,\n ErrorType = Error,\n>(\n resource: string,\n params: Partial<GetListParams> = {},\n options: UseGetListOptions<RecordType, ErrorType> = {}\n): UseGetListHookValue<RecordType> => {\n const {\n pagination = { page: 1, perPage: 25 },\n sort = { field: 'id', order: 'DESC' },\n filter = {},\n meta,\n } = params;\n const dataProvider = useDataProvider();\n const queryClient = useQueryClient();\n const {\n onError = noop,\n onSuccess = noop,\n onSettled = noop,\n ...queryOptions\n } = options;\n const onSuccessEvent = useEvent(onSuccess);\n const onErrorEvent = useEvent(onError);\n const onSettledEvent = useEvent(onSettled);\n\n const result = useQuery<\n GetListResult<RecordType>,\n ErrorType,\n GetListResult<RecordType>\n >({\n queryKey: [resource, 'getList', { pagination, sort, filter, meta }],\n queryFn: queryParams =>\n dataProvider\n .getList<RecordType>(resource, {\n pagination,\n sort,\n filter,\n meta,\n signal:\n dataProvider.supportAbortSignal === true\n ? queryParams.signal\n : undefined,\n })\n .then(({ data, total, pageInfo, meta }) => ({\n data,\n total,\n pageInfo,\n meta,\n })),\n ...queryOptions,\n });\n\n const metaValue = useRef(meta);\n const resourceValue = useRef(resource);\n\n useEffect(() => {\n metaValue.current = meta;\n }, [meta]);\n\n useEffect(() => {\n resourceValue.current = resource;\n }, [resource]);\n\n useEffect(() => {\n if (\n result.data === undefined ||\n result.error != null ||\n result.isFetching\n )\n return;\n\n // optimistically populate the getOne cache\n if (\n result.data?.data &&\n result.data.data.length <= MAX_DATA_LENGTH_TO_CACHE\n ) {\n result.data.data.forEach(record => {\n queryClient.setQueryData(\n [\n resourceValue.current,\n 'getOne',\n { id: String(record.id), meta: metaValue.current },\n ],\n oldRecord => oldRecord ?? record\n );\n });\n }\n onSuccessEvent(result.data);\n }, [\n onSuccessEvent,\n queryClient,\n result.data,\n result.error,\n result.isFetching,\n ]);\n\n useEffect(() => {\n if (result.error == null || result.isFetching) return;\n onErrorEvent(result.error);\n }, [onErrorEvent, result.error, result.isFetching]);\n\n useEffect(() => {\n if (result.status === 'pending' || result.isFetching) return;\n onSettledEvent(result.data, result.error);\n }, [\n onSettledEvent,\n result.data,\n result.error,\n result.status,\n result.isFetching,\n ]);\n\n return useMemo(\n () =>\n result.data\n ? {\n ...result,\n ...result.data,\n }\n : result,\n [result]\n ) as UseQueryResult<RecordType[], Error> & {\n total?: number;\n pageInfo?: {\n hasNextPage?: boolean;\n hasPreviousPage?: boolean;\n };\n meta?: any;\n };\n};\n\nconst noop = () => undefined;\n\nexport type UseGetListOptions<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> = Omit<\n UseQueryOptions<GetListResult<RecordType>, ErrorType>,\n 'queryKey' | 'queryFn'\n> & {\n onSuccess?: (value: GetListResult<RecordType>) => void;\n onError?: (error: ErrorType) => void;\n onSettled?: (\n data?: GetListResult<RecordType>,\n error?: ErrorType | null\n ) => void;\n};\n\nexport type UseGetListHookValue<RecordType extends RaRecord = any> =\n UseQueryResult<RecordType[], Error> & {\n total?: number;\n pageInfo?: {\n hasNextPage?: boolean;\n hasPreviousPage?: boolean;\n };\n meta?: any;\n };\n", "import { useEffect, useRef } from 'react';\nimport {\n useQuery,\n UseQueryOptions,\n UseQueryResult,\n useQueryClient,\n} from '@tanstack/react-query';\n\nimport { RaRecord, GetManyParams } from '../types';\nimport { useDataProvider } from './useDataProvider';\nimport { useEvent } from '../util';\n\n/**\n * Call the dataProvider.getMany() method and return the resolved result\n * as well as the loading state.\n *\n * The return value updates according to the request state:\n *\n * - start: { isPending: true, refetch }\n * - success: { data: [data from store], isPending: false, refetch }\n * - error: { error: [error from response], isPending: false, refetch }\n *\n * This hook will return the cached result when called a second time\n * with the same parameters, until the response arrives.\n *\n * @param {string} resource The resource name, e.g. 'posts'\n * @param {Params} params The getMany parameters { ids, meta }\n * @param {Object} options Options object to pass to the queryClient.\n * May include side effects to be executed upon success or failure, e.g. { onSuccess: () => { refresh(); } }\n *\n * @typedef Params\n * @prop params.ids The ids to get, e.g. [123, 456, 789]\n * @prop params.meta Optional meta parameters\n *\n * @returns The current request state. Destructure as { data, error, isPending, refetch }.\n *\n * @example\n *\n * import { useGetMany } from 'react-admin';\n *\n * const PostTags = ({ post }) => {\n * const { data, isPending, error } = useGetMany(\n * 'tags',\n * { ids: post.tags },\n * );\n * if (isPending) { return <Loading />; }\n * if (error) { return <p>ERROR</p>; }\n * return <ul>{data.map(tag =>\n * <li key={tag.id}>{tag.name}</li>\n * )}</ul>;\n * };\n */\nexport const useGetMany = <\n RecordType extends RaRecord = any,\n ErrorType = Error,\n>(\n resource: string,\n params: Partial<GetManyParams<RecordType>>,\n options: UseGetManyOptions<RecordType, ErrorType> = {}\n): UseGetManyHookValue<RecordType, ErrorType> => {\n const { ids, meta } = params;\n const dataProvider = useDataProvider();\n const queryClient = useQueryClient();\n const {\n onError = noop,\n onSuccess = noop,\n onSettled = noop,\n enabled,\n ...queryOptions\n } = options;\n const onSuccessEvent = useEvent(onSuccess);\n const onErrorEvent = useEvent(onError);\n const onSettledEvent = useEvent(onSettled);\n\n const result = useQuery<RecordType[], ErrorType, RecordType[]>({\n queryKey: [\n resource,\n 'getMany',\n {\n ids: !ids || ids.length === 0 ? [] : ids.map(id => String(id)),\n meta,\n },\n ],\n queryFn: queryParams => {\n if (!ids || ids.length === 0) {\n // no need to call the dataProvider\n return Promise.resolve([]);\n }\n return dataProvider\n .getMany<RecordType>(resource, {\n ids,\n meta,\n signal:\n dataProvider.supportAbortSignal === true\n ? queryParams.signal\n : undefined,\n })\n .then(({ data }) => data);\n },\n placeholderData: () => {\n const records =\n !ids || ids.length === 0\n ? []\n : ids.map(id =>\n queryClient.getQueryData<RecordType>([\n resource,\n 'getOne',\n { id: String(id), meta },\n ])\n );\n if (records.some(record => record === undefined)) {\n return undefined;\n } else {\n return records as RecordType[];\n }\n },\n retry: false,\n enabled: enabled ?? ids != null,\n ...queryOptions,\n });\n\n const metaValue = useRef(meta);\n const resourceValue = useRef(resource);\n\n useEffect(() => {\n metaValue.current = meta;\n }, [meta]);\n\n useEffect(() => {\n resourceValue.current = resource;\n }, [resource]);\n\n useEffect(() => {\n if (\n result.data === undefined ||\n result.error != null ||\n result.isFetching\n )\n return;\n // optimistically populate the getOne cache\n result.data.forEach(record => {\n queryClient.setQueryData(\n [\n resourceValue.current,\n 'getOne',\n { id: String(record.id), meta: metaValue.current },\n ],\n oldRecord => oldRecord ?? record\n );\n });\n\n onSuccessEvent(result.data);\n }, [\n queryClient,\n onSuccessEvent,\n result.data,\n result.error,\n result.isFetching,\n ]);\n\n useEffect(() => {\n if (result.error == null || result.isFetching) return;\n onErrorEvent(result.error);\n }, [onErrorEvent, result.error, result.isFetching]);\n\n useEffect(() => {\n if (result.status === 'pending' || result.isFetching) return;\n onSettledEvent(result.data, result.error);\n }, [\n onSettledEvent,\n result.data,\n result.error,\n result.status,\n result.isFetching,\n ]);\n\n return result;\n};\n\nconst noop = () => undefined;\n\nexport type UseGetManyOptions<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> = Omit<UseQueryOptions<RecordType[], ErrorType>, 'queryKey' | 'queryFn'> & {\n onSuccess?: (data: RecordType[]) => void;\n onError?: (error: ErrorType) => void;\n onSettled?: (data?: RecordType[], error?: ErrorType | null) => void;\n};\n\nexport type UseGetManyHookValue<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> = UseQueryResult<RecordType[], ErrorType>;\n", "import { useEffect, useMemo, useRef } from 'react';\nimport {\n QueryClient,\n useQueryClient,\n useQuery,\n UseQueryOptions,\n} from '@tanstack/react-query';\nimport union from 'lodash/union';\n\nimport { UseGetManyHookValue } from './useGetMany';\nimport { Identifier, RaRecord, GetManyParams, DataProvider } from '../types';\nimport { useDataProvider } from './useDataProvider';\nimport { useEvent } from '../util';\n\n/**\n * Call the dataProvider.getMany() method and return the resolved result\n * as well as the loading state.\n *\n * The return value updates according to the request state:\n *\n * - start: { isPending: true, isFetching: true, refetch }\n * - success: { data: [data from response], isPending: false, isFetching: false, refetch }\n * - error: { error: [error from response], isPending: false, isFetching: false, refetch }\n *\n * This hook will return the cached result when called a second time\n * with the same parameters, until the response arrives.\n *\n * This hook aggregates and deduplicates calls to the same resource, so for instance, if an app calls:\n *\n * useGetManyAggregate('tags', [1, 2, 3]);\n * useGetManyAggregate('tags', [3, 4]);\n *\n * during the same tick, the hook will only call the dataProvider once with the following parameters:\n *\n * dataProvider.getMany('tags', [1, 2, 3, 4])\n *\n * @param resource The resource name, e.g. 'posts'\n * @param {Params} params The getMany parameters { ids, meta }\n * @param {Object} options Options object to pass to the dataProvider.\n * @param {boolean} options.enabled Flag to conditionally run the query. If it's false, the query will not run\n * @param {Function} options.onSuccess Side effect function to be executed upon success, e.g. { onSuccess: { refresh: true } }\n * @param {Function} options.onError Side effect function to be executed upon failure, e.g. { onError: error => notify(error.message) }\n *\n * @typedef Params\n * @prop params.ids The ids to get, e.g. [123, 456, 789]\n * @prop params.meta Optional meta parameters\n\n * @returns The current request state. Destructure as { data, error, isPending, isFetching, refetch }.\n *\n * @example\n *\n * import { useGetManyAggregate, useRecordContext } from 'react-admin';\n *\n * const PostTags = () => {\n * const record = useRecordContext();\n * const { data, isPending, error } = useGetManyAggregate('tags', { ids: record.tagIds });\n * if (isPending) { return <Loading />; }\n * if (error) { return <p>ERROR</p>; }\n * return (\n * <ul>\n * {data.map(tag => (\n * <li key={tag.id}>{tag.name}</li>\n * ))}\n * </ul>\n * );\n * };\n */\nexport const useGetManyAggregate = <\n RecordType extends RaRecord = any,\n ErrorType = Error,\n>(\n resource: string,\n params: Partial<GetManyParams<RecordType>>,\n options: UseGetManyAggregateOptions<RecordType, ErrorType> = {}\n): UseGetManyHookValue<RecordType, ErrorType> => {\n const dataProvider = useDataProvider();\n const queryClient = useQueryClient();\n const {\n onError = noop,\n onSuccess = noop,\n onSettled = noop,\n enabled,\n ...queryOptions\n } = options;\n const onSuccessEvent = useEvent(onSuccess);\n const onErrorEvent = useEvent(onError);\n const onSettledEvent = useEvent(onSettled);\n\n const { ids, meta } = params;\n const placeholderData = useMemo(() => {\n const records = (Array.isArray(ids) ? ids : [ids]).map(id =>\n queryClient.getQueryData<RecordType>([\n resource,\n 'getOne',\n { id: String(id), meta },\n ])\n );\n if (records.some(record => record === undefined)) {\n return undefined;\n } else {\n return records as RecordType[];\n }\n }, [ids, queryClient, resource, meta]);\n\n const result = useQuery<RecordType[], ErrorType, RecordType[]>({\n queryKey: [\n resource,\n 'getMany',\n {\n ids: (Array.isArray(ids) ? ids : [ids]).map(id => String(id)),\n meta,\n },\n ],\n queryFn: queryParams =>\n new Promise((resolve, reject) => {\n if (!ids || ids.length === 0) {\n // no need to call the dataProvider\n return resolve([]);\n }\n\n // debounced / batched fetch\n return callGetManyQueries({\n resource,\n ids,\n meta,\n resolve,\n reject,\n dataProvider,\n queryClient,\n signal:\n dataProvider.supportAbortSignal === true\n ? queryParams.signal\n : undefined,\n });\n }),\n placeholderData,\n enabled: enabled ?? ids != null,\n retry: false,\n ...queryOptions,\n });\n\n const metaValue = useRef(meta);\n const resourceValue = useRef(resource);\n\n useEffect(() => {\n metaValue.current = meta;\n }, [meta]);\n\n useEffect(() => {\n resourceValue.current = resource;\n }, [resource]);\n\n useEffect(() => {\n if (\n result.data === undefined ||\n result.error != null ||\n result.isFetching\n )\n return;\n\n // optimistically populate the getOne cache\n (result.data ?? []).forEach(record => {\n queryClient.setQueryData(\n [\n resourceValue.current,\n 'getOne',\n { id: String(record.id), meta: metaValue.current },\n ],\n oldRecord => oldRecord ?? record\n );\n });\n\n onSuccessEvent(result.data);\n }, [\n queryClient,\n onSuccessEvent,\n result.data,\n result.error,\n result.isFetching,\n ]);\n\n useEffect(() => {\n if (result.error == null || result.isFetching) return;\n onErrorEvent(result.error);\n }, [onErrorEvent, result.error, result.isFetching]);\n\n useEffect(() => {\n if (result.status === 'pending' || result.isFetching) return;\n onSettledEvent(result.data, result.error);\n }, [\n onSettledEvent,\n result.data,\n result.error,\n result.status,\n result.isFetching,\n ]);\n\n return result;\n};\n\n/**\n * Batch all calls to a function into one single call with the arguments of all the calls.\n *\n * @example\n * let sum = 0;\n * const add = (args) => { sum = args.reduce((arg, total) => total + arg, 0); };\n * const addBatched = batch(add);\n * addBatched(2);\n * addBatched(8);\n * // add will be called once with arguments [2, 8]\n * // and sum will be equal to 10\n */\nconst batch = fn => {\n let capturedArgs: any[] = [];\n let timeout: ReturnType<typeof setTimeout> | null = null;\n return (arg: any) => {\n capturedArgs.push(arg);\n if (timeout) clearTimeout(timeout);\n timeout = setTimeout(() => {\n timeout = null;\n fn([...capturedArgs]);\n capturedArgs = [];\n }, 0);\n };\n};\n\ninterface GetManyCallArgs {\n resource: string;\n ids: Identifier[];\n meta?: any;\n resolve: (data: any[]) => void;\n reject: (error?: any) => void;\n dataProvider: DataProvider;\n queryClient: QueryClient;\n signal?: AbortSignal;\n}\n\n/**\n * Group and execute all calls to the dataProvider.getMany() method for the current tick\n *\n * Thanks to batch(), this function executes at most once per tick,\n * whatever the number of calls to useGetManyAggregate().\n */\nconst callGetManyQueries = batch((calls: GetManyCallArgs[]) => {\n const dataProvider = calls[0].dataProvider;\n const queryClient = calls[0].queryClient;\n\n /**\n * Aggregate calls by resource\n *\n * callsByResource will look like:\n * {\n * posts: [{ resource, ids, resolve, reject, dataProvider, queryClient }, ...],\n * tags: [{ resource, ids, resolve, reject, dataProvider, queryClient }, ...],\n * }\n */\n const callsByResource = calls.reduce(\n (acc, callArgs) => {\n if (!acc[callArgs.resource]) {\n acc[callArgs.resource] = [];\n }\n acc[callArgs.resource].push(callArgs);\n return acc;\n },\n {} as { [resource: string]: GetManyCallArgs[] }\n );\n\n /**\n * For each resource, aggregate ids and call dataProvider.getMany() once\n */\n Object.keys(callsByResource).forEach(resource => {\n const callsForResource = callsByResource[resource];\n\n /**\n * Extract ids from queries, aggregate and deduplicate them\n *\n * @example from [[1, 2], [2, null, 3], [4, null]] to [1, 2, 3, 4]\n */\n const aggregatedIds = callsForResource\n .reduce((acc, { ids }) => union(acc, ids), []) // concat + unique\n .filter(v => v != null && v !== ''); // remove null values\n\n const uniqueMeta = callsForResource.reduce(\n (acc, { meta }) => meta || acc,\n undefined\n );\n\n if (aggregatedIds.length === 0) {\n // no need to call the data provider if all the ids are null\n callsForResource.forEach(({ resolve }) => {\n resolve([]);\n });\n return;\n }\n\n const callThatHasAllAggregatedIds = callsForResource.find(\n ({ ids, signal }) =>\n JSON.stringify(ids) === JSON.stringify(aggregatedIds) &&\n !signal?.aborted\n );\n if (callThatHasAllAggregatedIds) {\n // There is only one call (no aggregation), or one of the calls has the same ids as the sum of all calls.\n // Either way, we can't trigger a new fetchQuery with the same signature, as it's already pending.\n // Therefore, we reply with the dataProvider\n const { dataProvider, resource, ids, meta, signal } =\n callThatHasAllAggregatedIds;\n\n dataProvider\n .getMany<any>(resource, { ids, meta, signal })\n .then(({ data }) => data)\n .then(\n data => {\n // We must then resolve all the pending calls with the data they requested\n callsForResource.forEach(({ ids, resolve }) => {\n resolve(\n data.filter(record =>\n ids\n .map(id => String(id))\n .includes(String(record.id))\n )\n );\n });\n },\n error => {\n // All pending calls must also receive the error\n callsForResource.forEach(({ reject }) => {\n reject(error);\n });\n }\n );\n return;\n }\n\n /**\n * Call dataProvider.getMany() with the aggregatedIds,\n * and resolve each of the promises using the results\n */\n queryClient\n .fetchQuery<any[], Error, any[]>({\n queryKey: [\n resource,\n 'getMany',\n {\n ids: aggregatedIds.map(id => String(id)),\n meta: uniqueMeta,\n },\n ],\n queryFn: queryParams =>\n dataProvider\n .getMany<any>(resource, {\n ids: aggregatedIds,\n meta: uniqueMeta,\n signal:\n dataProvider.supportAbortSignal === true\n ? queryParams.signal\n : undefined,\n })\n .then(({ data }) => data),\n })\n .then(data => {\n callsForResource.forEach(({ ids, resolve }) => {\n resolve(\n data.filter(record =>\n ids\n .map(id => String(id))\n .includes(String(record.id))\n )\n );\n });\n })\n .catch(error =>\n callsForResource.forEach(({ reject }) => reject(error))\n );\n });\n});\n\nconst noop = () => undefined;\n\nexport type UseGetManyAggregateOptions<\n RecordType extends RaRecord,\n ErrorType = Error,\n> = Omit<UseQueryOptions<RecordType[], ErrorType>, 'queryKey' | 'queryFn'> & {\n onSuccess?: (data: RecordType[]) => void;\n onError?: (error: ErrorType) => void;\n onSettled?: (data?: RecordType[], error?: ErrorType | null) => void;\n};\n", "import { useEffect, useMemo } from 'react';\nimport {\n useQuery,\n UseQueryOptions,\n UseQueryResult,\n useQueryClient,\n} from '@tanstack/react-query';\n\nimport {\n RaRecord,\n GetManyReferenceParams,\n GetManyReferenceResult,\n} from '../types';\nimport { useDataProvider } from './useDataProvider';\nimport { useEvent } from '../util';\n\n/**\n * Call the dataProvider.getManyReference() method and return the resolved result\n * as well as the loading state.\n *\n * The return value updates according to the request state:\n *\n * - start: { isPending: true, refetch }\n * - success: { data: [data from store], total: [total from response], isPending: false, refetch }\n * - error: { error: [error from response], isPending: false, refetch }\n *\n * This hook will return the cached result when called a second time\n * with the same parameters, until the response arrives.\n *\n * @param {string} resource The resource name, e.g. 'posts'\n * @param {Params} params The getManyReference parameters { target, id, pagination, sort, filter, meta }\n * @param {Object} options Options object to pass to the queryClient.\n * May include side effects to be executed upon success or failure, e.g. { onSuccess: () => { refresh(); } }\n *\n * @typedef Params\n * @prop params.target The target resource key, e.g. 'post_id'\n * @prop params.id The identifier of the record to look for in target, e.g. '123'\n * @prop params.pagination The request pagination { page, perPage }, e.g. { page: 1, perPage: 10 }\n * @prop params.sort The request sort { field, order }, e.g. { field: 'id', order: 'DESC' }\n * @prop params.filter The request filters, e.g. { title: 'hello, world' }\n * @prop params.meta Optional meta parameters\n *\n * @returns The current request state. Destructure as { data, total, error, isPending, refetch }.\n *\n * @example\n *\n * import { useGetManyReference, useRecordContext } from 'react-admin';\n *\n * const PostComments = () => {\n * const record = useRecordContext();\n * // fetch all comments related to the current record\n * const { data, isPending, error } = useGetManyReference(\n * 'comments',\n * { target: 'post_id', id: record.id, pagination: { page: 1, perPage: 10 }, sort: { field: 'published_at', order: 'DESC' } }\n * );\n * if (isPending) { return <Loading />; }\n * if (error) { return <p>ERROR</p>; }\n * return <ul>{data.map(comment =>\n * <li key={comment.id}>{comment.body}</li>\n * )}</ul>;\n * };\n */\nexport const useGetManyReference = <\n RecordType extends RaRecord = any,\n ErrorType = Error,\n>(\n resource: string,\n params: Partial<GetManyReferenceParams> = {},\n options: UseGetManyReferenceHookOptions<RecordType, ErrorType> = {}\n): UseGetManyReferenceHookValue<RecordType, ErrorType> => {\n const {\n target,\n id,\n pagination = { page: 1, perPage: 25 },\n sort = { field: 'id', order: 'DESC' },\n filter = {},\n meta,\n } = params;\n const dataProvider = useDataProvider();\n const queryClient = useQueryClient();\n const {\n onError = noop,\n onSuccess = noop,\n onSettled = noop,\n ...queryOptions\n } = options;\n const onSuccessEvent = useEvent(onSuccess);\n const onErrorEvent = useEvent(onError);\n const onSettledEvent = useEvent(onSettled);\n\n const result = useQuery<GetManyReferenceResult<RecordType>, ErrorType>({\n queryKey: [\n resource,\n 'getManyReference',\n { target, id, pagination, sort, filter, meta },\n ],\n queryFn: queryParams => {\n if (!target || id == null) {\n // check at runtime to support partial parameters with the enabled option\n return Promise.reject(new Error('target and id are required'));\n }\n\n return dataProvider\n .getManyReference<RecordType>(resource, {\n target,\n id,\n pagination,\n sort,\n filter,\n meta,\n signal:\n dataProvider.supportAbortSignal === true\n ? queryParams.signal\n : undefined,\n })\n .then(({ data, total, pageInfo, meta }) => ({\n data,\n total,\n pageInfo,\n meta,\n }));\n },\n ...queryOptions,\n });\n\n useEffect(() => {\n if (result.data === undefined) return;\n // optimistically populate the getOne cache\n result.data?.data?.forEach(record => {\n queryClient.setQueryData(\n [resource, 'getOne', { id: String(record.id), meta }],\n oldRecord => oldRecord ?? record\n );\n });\n\n onSuccessEvent(result.data);\n }, [queryClient, meta, onSuccessEvent, resource, result.data]);\n\n useEffect(() => {\n if (result.error == null) return;\n onErrorEvent(result.error);\n }, [onErrorEvent, result.error]);\n\n useEffect(() => {\n if (result.status === 'pending') return;\n onSettledEvent(result.data, result.error);\n }, [onSettledEvent, result.data, result.error, result.status]);\n\n return useMemo(\n () =>\n result.data\n ? {\n ...result,\n ...result.data,\n }\n : result,\n [result]\n ) as UseQueryResult<RecordType[], ErrorType> & {\n total?: number;\n pageInfo?: {\n hasNextPage?: boolean;\n hasPreviousPage?: boolean;\n };\n meta?: any;\n };\n};\n\nexport type UseGetManyReferenceHookOptions<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> = Omit<\n UseQueryOptions<GetManyReferenceResult<RecordType>, ErrorType>,\n 'queryKey' | 'queryFn'\n> & {\n onSuccess?: (data: GetManyReferenceResult<RecordType>) => void;\n onError?: (error: ErrorType) => void;\n onSettled?: (\n data?: GetManyReferenceResult<RecordType>,\n error?: ErrorType | null\n ) => void;\n};\n\nexport type UseGetManyReferenceHookValue<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> = UseQueryResult<RecordType[], ErrorType> & {\n total?: number;\n pageInfo?: {\n hasNextPage?: boolean;\n hasPreviousPage?: boolean;\n };\n meta?: any;\n};\n\nconst noop = () => undefined;\n", "import { useEffect, useRef, useCallback, useState } from 'react';\nimport debounce from 'lodash/debounce';\nimport isEqual from 'lodash/isEqual';\n\nimport { FilterPayload } from '../types';\n\ninterface UseFilterStateOptions {\n filterToQuery?: (v: string) => FilterPayload;\n permanentFilter?: FilterPayload;\n debounceTime?: number;\n}\n\n/**\n * @typedef UseFilterStateProps\n * @property {Object} filter: The filter object.\n * @property {setFilter} setFilter: Update the filter with the given string\n */\ninterface UseFilterStateProps {\n filter: FilterPayload;\n setFilter: (v: string) => void;\n}\n\nconst defaultFilter = {};\nconst defaultFilterToQuery = (v: string) => ({ q: v });\n\n/**\n * Hooks to provide filter state and setFilter which updates the query part of the filter\n *\n * @example\n *\n * const { filter, setFilter } = useFilter({\n * filterToQuery: v => ({ query: v }),\n * permanentFilter: { foo: 'bar' },\n * debounceTime: 500,\n * });\n * // filter initial value:\n * {\n * query: '',\n * foo: 'bar'\n * }\n * // after updating filter\n * setFilter('needle');\n * {\n * query: 'needle',\n * foo: 'bar'\n * }\n *\n * @param {Object} option\n * @param {Function} option.filterToQuery Function to convert the filter string to a filter object. Defaults to v => ({ q: v }).\n * @param {Object} option.permanentFilter Permanent filter to be merged with the filter string. Defaults to {}.\n * @param {number} option.debounceTime Time in ms between filter updates - used to debounce the search. Defaults to 500ms.\n *\n * @returns {UseFilterStateOptions} The filter props\n */\nexport default ({\n filterToQuery = defaultFilterToQuery,\n permanentFilter = {},\n debounceTime = 500,\n}: UseFilterStateOptions): UseFilterStateProps => {\n const permanentFilterProp = useRef(permanentFilter);\n const latestValue = useRef<string>();\n const [filter, setFilterValue] = useState<FilterPayload>({\n ...permanentFilter,\n ...filterToQuery(''),\n });\n // Developers often pass an object literal as permanent filter\n // e.g. <ReferenceInput source=\"book_id\" reference=\"books\" filter={{ is_published: true }}>\n // The effect should execute again when the parent component updates the filter value,\n // but not when the object literal describes the same values. Therefore,\n // we use JSON.stringify(permanentFilter) in the `useEffect` and `useCallback`\n // dependencies instead of permanentFilter.\n const permanentFilterSignature = JSON.stringify(permanentFilter);\n\n useEffect(() => {\n if (!isEqual(permanentFilterProp.current, permanentFilter)) {\n permanentFilterProp.current = permanentFilter;\n setFilterValue({\n ...permanentFilter,\n ...filterToQuery(latestValue.current || ''),\n });\n }\n }, [permanentFilterSignature, permanentFilterProp, filterToQuery]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const setFilter = useCallback(\n debounce((value: string) => {\n setFilterValue({\n ...permanentFilter,\n ...filterToQuery(value),\n });\n latestValue.current = value;\n }, debounceTime),\n [permanentFilterSignature] // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n return {\n filter: filter ?? defaultFilter,\n setFilter,\n };\n};\n", "import { useReducer, useEffect, useRef, useCallback } from 'react';\n\nimport { SORT_ASC, SORT_DESC } from './list/queryReducer';\nimport { SortPayload } from '../types';\n\nexport interface SortProps {\n setSortField: (field: SortPayload['field']) => void;\n setSortOrder: (order: SortPayload['order']) => void;\n setSort: (sort: SortPayload) => void;\n sort: SortPayload;\n}\n\ntype Action =\n | { type: 'SET_SORT'; payload: SortPayload }\n | { type: 'SET_SORT_FIELD'; payload: SortPayload['field'] }\n | { type: 'SET_SORT_ORDER'; payload: SortPayload['order'] };\n\nconst sortReducer = (state: SortPayload, action: Action): SortPayload => {\n switch (action.type) {\n case 'SET_SORT':\n return action.payload;\n case 'SET_SORT_FIELD': {\n const field = action.payload;\n const order =\n state.field === field\n ? state.order === SORT_ASC\n ? SORT_DESC\n : SORT_ASC\n : SORT_ASC;\n return { field, order };\n }\n case 'SET_SORT_ORDER': {\n const order = action.payload;\n if (!state.field) {\n throw new Error(\n 'cannot change the order on an undefined sort field'\n );\n }\n return {\n field: state.field,\n order,\n };\n }\n default:\n return state;\n }\n};\n\nexport const defaultSort = { field: '', order: 'ASC' } as const;\n\n/**\n * Set the sort { field, order }\n * @name setSort\n * @function\n * @param {SortPayload} sort the sort object\n */\n\n/**\n * Set the sort field, swap the order if the field is the same\n * @name setSortField\n * @function\n * @param {string} field the sort field\n */\n\n/**\n * Set the sort order\n * @name setSortOrder\n * @function\n * @param {string} order The sort order, either ASC or DESC\n */\n\n/**\n * @typedef SortProps\n * @type {Object}\n * @property {Object} sort: the sort object.\n * @property {string} sort.field: the sort object.\n * @property {'ASC' | 'DESC'} sort.order: the sort object.\n * @property {setSort} setSort\n * @property {setSortField} setSortField\n * @property {setSortOrder} setSortOrder\n */\n\n/**\n * Hooks to provide sort state\n *\n * @example\n *\n * const { sort, setSort, setSortField, setSortOrder } = useSort({\n * field: 'name',\n * order: 'ASC',\n * });\n *\n * setSort({ field: 'name', order: 'ASC' });\n * // is the same as\n * setSortField('name');\n * setSortOrder('ASC');\n *\n * @param {Object} initialSort\n * @param {string} initialSort.field The initial sort field\n * @param {string} initialSort.order The initial sort order\n * @returns {SortProps} The sort props\n */\nconst useSortState = (initialSort: SortPayload = defaultSort): SortProps => {\n const [sort, dispatch] = useReducer(sortReducer, initialSort);\n const isFirstRender = useRef(true);\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n dispatch({ type: 'SET_SORT', payload: initialSort });\n }, [initialSort.field, initialSort.order]); // eslint-disable-line react-hooks/exhaustive-deps\n\n return {\n setSort: useCallback(\n (sort: SortPayload) =>\n dispatch({ type: 'SET_SORT', payload: sort }),\n [dispatch]\n ),\n setSortField: useCallback(\n (field: string) =>\n dispatch({ type: 'SET_SORT_FIELD', payload: field }),\n [dispatch]\n ),\n setSortOrder: useCallback(\n (order: 'ASC' | 'DESC') =>\n dispatch({ type: 'SET_SORT_ORDER', payload: order }),\n [dispatch]\n ),\n sort,\n };\n};\n\nexport default useSortState;\n", "import { Reducer } from 'react';\nimport set from 'lodash/set';\n\nimport removeEmpty from '../../util/removeEmpty';\nimport removeKey from '../../util/removeKey';\nimport { ListParams } from './useListParams';\n\nexport const SET_SORT = 'SET_SORT';\nexport const SORT_ASC = 'ASC';\nexport const SORT_DESC = 'DESC';\n\nexport const SET_PAGE = 'SET_PAGE';\nexport const SET_PER_PAGE = 'SET_PER_PAGE';\n\nexport const SET_FILTER = 'SET_FILTER';\nexport const SHOW_FILTER = 'SHOW_FILTER';\nexport const HIDE_FILTER = 'HIDE_FILTER';\n\nconst oppositeOrder = direction =>\n direction === SORT_DESC ? SORT_ASC : SORT_DESC;\n\ntype ActionTypes =\n | {\n type: typeof SET_SORT;\n payload: {\n field: string;\n order?: typeof SORT_ASC | typeof SORT_DESC;\n };\n }\n | {\n type: typeof SET_PAGE;\n payload: number;\n }\n | {\n type: typeof SET_PER_PAGE;\n payload: number;\n }\n | {\n type: typeof SET_FILTER;\n payload: {\n filter: any;\n displayedFilters?: { [key: string]: boolean };\n };\n }\n | {\n type: typeof SHOW_FILTER;\n payload: { filterName: string; defaultValue?: any };\n }\n | {\n type: typeof HIDE_FILTER;\n payload: string;\n };\n\n/**\n * This reducer is for the react-router query string.\n */\nexport const queryReducer: Reducer<ListParams, ActionTypes> = (\n previousState,\n action\n) => {\n switch (action.type) {\n case SET_SORT:\n if (action.payload.field === previousState.sort) {\n return {\n ...previousState,\n order:\n action.payload.order ??\n oppositeOrder(previousState.order),\n page: 1,\n };\n }\n\n return {\n ...previousState,\n sort: action.payload.field,\n order: action.payload.order || SORT_ASC,\n page: 1,\n };\n\n case SET_PAGE:\n return { ...previousState, page: action.payload };\n\n case SET_PER_PAGE:\n return { ...previousState, page: 1, perPage: action.payload };\n\n case SET_FILTER: {\n return {\n ...previousState,\n page: 1,\n filter: action.payload.filter,\n displayedFilters: action.payload.displayedFilters\n ? action.payload.displayedFilters\n : previousState.displayedFilters,\n };\n }\n\n case SHOW_FILTER: {\n if (\n previousState.displayedFilters &&\n previousState.displayedFilters[action.payload.filterName]\n ) {\n // the filter is already shown\n return previousState;\n }\n return {\n ...previousState,\n filter:\n typeof action.payload.defaultValue !== 'undefined'\n ? set(\n previousState.filter,\n action.payload.filterName,\n action.payload.defaultValue\n )\n : previousState.filter,\n // we don't use lodash.set() for displayed filters\n // to avoid problems with compound filter names (e.g. 'author.name')\n displayedFilters: {\n ...previousState.displayedFilters,\n [action.payload.filterName]: true,\n },\n };\n }\n\n case HIDE_FILTER: {\n return {\n ...previousState,\n filter: removeEmpty(\n removeKey(previousState.filter, action.payload)\n ),\n // we don't use lodash.set() for displayed filters\n // to avoid problems with compound filter names (e.g. 'author.name')\n displayedFilters: previousState.displayedFilters\n ? Object.keys(previousState.displayedFilters).reduce(\n (filters, filter) => {\n return filter !== action.payload\n ? { ...filters, [filter]: true }\n : filters;\n },\n {}\n )\n : previousState.displayedFilters,\n };\n }\n\n default:\n return previousState;\n }\n};\n\nexport default queryReducer;\n", "function is(x: unknown, y: unknown) {\n if (x === y) {\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n // eslint-disable-next-line no-self-compare\n return x !== x && y !== y;\n }\n}\n\nexport const shallowEqual = (objA: any, objB: any) => {\n if (is(objA, objB)) return true;\n\n if (\n typeof objA !== 'object' ||\n objA === null ||\n typeof objB !== 'object' ||\n objB === null\n ) {\n return false;\n }\n\n const keysA = Object.keys(objA);\n const keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) return false;\n\n for (let i = 0; i < keysA.length; i++) {\n if (\n !Object.prototype.hasOwnProperty.call(objB, keysA[i]) ||\n !is(objA[keysA[i]], objB[keysA[i]])\n ) {\n return false;\n }\n }\n\n return true;\n};\n", "import { shallowEqual } from './shallowEqual';\n\nconst isObject = obj =>\n obj && Object.prototype.toString.call(obj) === '[object Object]';\n\nconst isEmpty = obj =>\n obj instanceof Date\n ? false\n : obj === '' ||\n obj === null ||\n obj === undefined ||\n shallowEqual(obj, {});\n\nconst removeEmpty = object =>\n Object.keys(object).reduce((acc, key) => {\n let child = object[key];\n\n if (isObject(object[key])) {\n child = removeEmpty(object[key]);\n }\n\n return isEmpty(child) ? acc : { ...acc, [key]: child };\n }, {});\n\nexport default removeEmpty;\n", "const removeKey = (target, path) =>\n Object.keys(target).reduce((acc, key) => {\n if (key !== path) {\n return Object.assign({}, acc, { [key]: target[key] });\n }\n\n return acc;\n }, {});\n\nconst deepRemoveKey = (target, path) => {\n const paths = path.split('.');\n\n if (paths.length === 1) {\n return removeKey(target, path);\n }\n\n const deepKey = paths[0];\n if (target[deepKey] === undefined) {\n return target;\n }\n const deep = deepRemoveKey(target[deepKey], paths.slice(1).join('.'));\n\n if (Object.keys(deep).length === 0) {\n return removeKey(target, deepKey);\n }\n\n return Object.assign({}, target, { [deepKey]: deep });\n};\n\nexport default deepRemoveKey;\n", "import { useEffect, useReducer, useCallback, useRef } from 'react';\nimport { PaginationPayload } from '../types';\n\n/**\n * @typedef PaginationProps\n * @type {Object}\n * @property {number} page: The page number.\n * @property {number} perPage: The number of item per page.\n * @property {Function} setPage: Set the page number\n * @property {Function} setPerPage: Set the per page number\n * @property {Function} setPagination: Set page and perPage pagination numbers\n */\nexport interface PaginationHookResult {\n page: number;\n perPage: number;\n pagination: PaginationPayload;\n setPage: (page: number) => void;\n setPerPage: (perPage: number) => void;\n setPagination: (pagination: PaginationPayload) => void;\n}\n\nconst paginationReducer = (\n prevState: PaginationPayload,\n nextState: Partial<PaginationPayload>\n): PaginationPayload => {\n return {\n ...prevState,\n ...nextState,\n };\n};\n\nconst defaultPagination = {\n page: 1,\n perPage: 25,\n};\n\n/**\n * Hooks to provide pagination state (page and perPage)\n *\n * @example\n *\n * const { page, setPage, perPage, setPerPage } = usePagination(initialPerPage);\n *\n * @param {number} initialPagination the initial value per page\n * @returns {PaginationHookResult} The pagination props\n */\nexport default (\n initialPagination: { perPage?: number; page?: number } = {}\n): PaginationHookResult => {\n const [pagination, setPagination] = useReducer(paginationReducer, {\n ...defaultPagination,\n ...initialPagination,\n });\n const isFirstRender = useRef(true);\n\n const setPerPage = useCallback(\n perPage => setPagination({ perPage, page: 1 }),\n []\n );\n const setPage = useCallback(page => setPagination({ page }), []);\n\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n setPerPage(initialPagination.perPage || 25);\n }, [initialPagination.perPage, setPerPage]);\n\n return {\n page: pagination.page,\n perPage: pagination.perPage,\n pagination,\n setPage,\n setPerPage,\n setPagination,\n };\n};\n", "import * as React from 'react';\nimport { ComponentType } from 'react';\n\nconst checkMinimumRequiredProps =\n (displayName: string, requiredProps: string[]) =>\n (WrappedComponent: ComponentType) =>\n (props: any) => {\n useCheckMinimumRequiredProps(displayName, requiredProps, props);\n return <WrappedComponent {...props} />;\n };\n\nexport default checkMinimumRequiredProps;\n\n// Not a hook but named that way to avoid conflicts with the old one\nexport const useCheckMinimumRequiredProps = (\n displayName: string,\n requiredProps: string[],\n props: any\n): void => {\n const propNames = Object.keys(props);\n const missingProps = requiredProps.filter(\n prop => !propNames.includes(prop)\n );\n\n if (missingProps.length > 0) {\n throw new Error(\n `<${displayName}> component is not properly configured, some essential props are missing.\nBe sure to pass the props from the parent. Example:\n\nconst My${displayName} = props => (\n <${displayName} {...props}></${displayName}>\n);\n\nThe missing props are: ${missingProps.join(', ')}`\n );\n }\n};\n", "import { useCallback, ReactEventHandler } from 'react';\nimport { UseMutationOptions } from '@tanstack/react-query';\n\nimport { useDelete } from '../../dataProvider';\nimport { useUnselect } from '../../controller';\nimport { useRedirect, RedirectionSideEffect } from '../../routing';\nimport { useNotify } from '../../notification';\nimport { RaRecord, DeleteParams } from '../../types';\nimport { useResourceContext } from '../../core';\nimport { useTranslate } from '../../i18n';\n\n/**\n * Prepare callback for a Delete button with undo support\n *\n * @example\n *\n * import React from 'react';\n * import ActionDelete from '@mui/icons-material/Delete';\n * import { Button, useDeleteWithUndoController } from 'react-admin';\n *\n * const DeleteButton = ({\n * resource,\n * record,\n * redirect,\n * onClick,\n * ...rest\n * }) => {\n * const { isPending, handleDelete } = useDeleteWithUndoController({\n * resource,\n * record,\n * redirect,\n * onClick,\n * });\n *\n * return (\n * <Button\n * onClick={handleDelete}\n * disabled={isPending}\n * label=\"ra.action.delete\"\n * {...rest}\n * >\n * <ActionDelete />\n * </Button>\n * );\n * };\n */\nconst useDeleteWithUndoController = <\n RecordType extends RaRecord = any,\n ErrorType = Error,\n>(\n props: UseDeleteWithUndoControllerParams<RecordType, ErrorType>\n): UseDeleteWithUndoControllerReturn => {\n const {\n record,\n redirect: redirectTo = 'list',\n onClick,\n mutationOptions = {},\n successMessage,\n } = props;\n const { meta: mutationMeta, ...otherMutationOptions } = mutationOptions;\n const resource = useResourceContext(props);\n const notify = useNotify();\n const unselect = useUnselect(resource);\n const redirect = useRedirect();\n const translate = useTranslate();\n const [deleteOne, { isPending }] = useDelete<RecordType, ErrorType>(\n resource,\n undefined,\n {\n onSuccess: () => {\n notify(\n successMessage ??\n `resources.${resource}.notifications.deleted`,\n {\n type: 'info',\n messageArgs: {\n smart_count: 1,\n _: translate('ra.notification.deleted', {\n smart_count: 1,\n }),\n },\n undoable: true,\n }\n );\n record && unselect([record.id]);\n redirect(redirectTo, resource);\n },\n onError: error => {\n notify(\n typeof error === 'string'\n ? error\n : (error as Error)?.message ||\n 'ra.notification.http_error',\n {\n type: 'error',\n messageArgs: {\n _:\n typeof error === 'string'\n ? error\n : (error as Error)?.message\n ? (error as Error).message\n : undefined,\n },\n }\n );\n },\n }\n );\n\n const handleDelete = useCallback(\n event => {\n event.stopPropagation();\n if (!record) {\n throw new Error(\n 'The record cannot be deleted because no record has been passed'\n );\n }\n deleteOne(\n resource,\n {\n id: record.id,\n previousData: record,\n meta: mutationMeta,\n },\n {\n mutationMode: 'undoable',\n ...otherMutationOptions,\n }\n );\n if (typeof onClick === 'function') {\n onClick(event);\n }\n },\n [\n deleteOne,\n mutationMeta,\n otherMutationOptions,\n onClick,\n record,\n resource,\n ]\n );\n\n return { isPending, isLoading: isPending, handleDelete };\n};\n\nexport interface UseDeleteWithUndoControllerParams<\n RecordType extends RaRecord = any,\n MutationOptionsError = unknown,\n> {\n record?: RecordType;\n redirect?: RedirectionSideEffect;\n resource?: string;\n onClick?: ReactEventHandler<any>;\n mutationOptions?: UseMutationOptions<\n RecordType,\n MutationOptionsError,\n DeleteParams<RecordType>\n >;\n successMessage?: string;\n}\n\nexport interface UseDeleteWithUndoControllerReturn {\n isPending: boolean;\n isLoading: boolean;\n handleDelete: ReactEventHandler<any>;\n}\n\nexport default useDeleteWithUndoController;\n", "import {\n useState,\n useCallback,\n ReactEventHandler,\n SyntheticEvent,\n} from 'react';\nimport { UseMutationOptions } from '@tanstack/react-query';\n\nimport { useDelete } from '../../dataProvider';\nimport { useUnselect } from '../../controller';\nimport { useRedirect, RedirectionSideEffect } from '../../routing';\nimport { useNotify } from '../../notification';\nimport { RaRecord, MutationMode, DeleteParams } from '../../types';\nimport { useResourceContext } from '../../core';\nimport { useTranslate } from '../../i18n';\n\n/**\n * Prepare a set of callbacks for a delete button guarded by confirmation dialog\n *\n * @example\n *\n * const DeleteButton = ({\n * resource,\n * record,\n * redirect,\n * onClick,\n * ...rest\n * }) => {\n * const {\n * open,\n * isPending,\n * handleDialogOpen,\n * handleDialogClose,\n * handleDelete,\n * } = useDeleteWithConfirmController({\n * resource,\n * record,\n * redirect,\n * onClick,\n * });\n *\n * return (\n * <Fragment>\n * <Button\n * onClick={handleDialogOpen}\n * label=\"ra.action.delete\"\n * {...rest}\n * >\n * {icon}\n * </Button>\n * <Confirm\n * isOpen={open}\n * loading={isPending}\n * title=\"ra.message.delete_title\"\n * content=\"ra.message.delete_content\"\n * translateOptions={{\n * name: resource,\n * id: record.id,\n * }}\n * onConfirm={handleDelete}\n * onClose={handleDialogClose}\n * />\n * </Fragment>\n * );\n * };\n */\nconst useDeleteWithConfirmController = <\n RecordType extends RaRecord = any,\n ErrorType = Error,\n>(\n props: UseDeleteWithConfirmControllerParams<RecordType, ErrorType>\n): UseDeleteWithConfirmControllerReturn => {\n const {\n record,\n redirect: redirectTo = 'list',\n mutationMode,\n onClick,\n mutationOptions = {},\n successMessage,\n } = props;\n const { meta: mutationMeta, ...otherMutationOptions } = mutationOptions;\n const resource = useResourceContext(props);\n const [open, setOpen] = useState(false);\n const notify = useNotify();\n const unselect = useUnselect(resource);\n const redirect = useRedirect();\n const translate = useTranslate();\n\n const [deleteOne, { isPending }] = useDelete<RecordType, ErrorType>(\n resource,\n undefined,\n {\n onSuccess: () => {\n setOpen(false);\n notify(\n successMessage ??\n `resources.${resource}.notifications.deleted`,\n {\n type: 'info',\n messageArgs: {\n smart_count: 1,\n _: translate('ra.notification.deleted', {\n smart_count: 1,\n }),\n },\n undoable: mutationMode === 'undoable',\n }\n );\n record && unselect([record.id]);\n redirect(redirectTo, resource);\n },\n onError: error => {\n setOpen(false);\n\n notify(\n typeof error === 'string'\n ? error\n : (error as Error)?.message ||\n 'ra.notification.http_error',\n {\n type: 'error',\n messageArgs: {\n _:\n typeof error === 'string'\n ? error\n : (error as Error)?.message\n ? (error as Error).message\n : undefined,\n },\n }\n );\n },\n }\n );\n\n const handleDialogOpen = e => {\n setOpen(true);\n e.stopPropagation();\n };\n\n const handleDialogClose = e => {\n setOpen(false);\n e.stopPropagation();\n };\n\n const handleDelete = useCallback(\n event => {\n event.stopPropagation();\n if (!record) {\n throw new Error(\n 'The record cannot be deleted because no record has been passed'\n );\n }\n deleteOne(\n resource,\n {\n id: record.id,\n previousData: record,\n meta: mutationMeta,\n },\n {\n mutationMode,\n ...otherMutationOptions,\n }\n );\n if (typeof onClick === 'function') {\n onClick(event);\n }\n },\n [\n deleteOne,\n mutationMeta,\n mutationMode,\n otherMutationOptions,\n onClick,\n record,\n resource,\n ]\n );\n\n return {\n open,\n isPending,\n isLoading: isPending,\n handleDialogOpen,\n handleDialogClose,\n handleDelete,\n };\n};\n\nexport interface UseDeleteWithConfirmControllerParams<\n RecordType extends RaRecord = any,\n MutationOptionsError = unknown,\n> {\n mutationMode?: MutationMode;\n record?: RecordType;\n redirect?: RedirectionSideEffect;\n resource?: string;\n onClick?: ReactEventHandler<any>;\n mutationOptions?: UseMutationOptions<\n RecordType,\n MutationOptionsError,\n DeleteParams<RecordType>\n >;\n successMessage?: string;\n}\n\nexport interface UseDeleteWithConfirmControllerReturn {\n open: boolean;\n isLoading: boolean;\n isPending: boolean;\n handleDialogOpen: (e: SyntheticEvent) => void;\n handleDialogClose: (e: SyntheticEvent) => void;\n handleDelete: ReactEventHandler<any>;\n}\n\nexport default useDeleteWithConfirmController;\n", "import * as React from 'react';\nimport { ReactNode } from 'react';\nimport {\n useCreateController,\n CreateControllerProps,\n} from './useCreateController';\nimport { CreateContextProvider } from './CreateContextProvider';\nimport { Identifier, RaRecord } from '../../types';\nimport { OptionalResourceContextProvider } from '../../core';\nimport { useIsAuthPending } from '../../auth';\n\n/**\n * Call useCreateController and put the value in a CreateContext\n *\n * Base class for <Create> components, without UI.\n *\n * Accepts any props accepted by useCreateController:\n * - id: The record identifier\n * - resource: The resource\n *\n * @example // Custom edit layout\n *\n * const PostCreate = () => (\n * <CreateBase>\n * <Grid container>\n * <Grid item xs={8}>\n * <SimpleForm>\n * ...\n * </SimpleForm>\n * </Grid>\n * <Grid item xs={4}>\n * Create instructions...\n * </Grid>\n * </Grid>\n * <div>\n * Post related links...\n * </div>\n * </CreateBase>\n * );\n */\nexport const CreateBase = <\n RecordType extends Omit<RaRecord, 'id'> = any,\n ResultRecordType extends RaRecord = RecordType & { id: Identifier },\n MutationOptionsError = Error,\n>({\n children,\n loading = null,\n ...props\n}: CreateBaseProps<RecordType, ResultRecordType, MutationOptionsError>) => {\n const controllerProps = useCreateController<\n RecordType,\n MutationOptionsError,\n ResultRecordType\n >(props);\n\n const isAuthPending = useIsAuthPending({\n resource: controllerProps.resource,\n action: 'create',\n });\n\n if (isAuthPending && !props.disableAuthentication) {\n return loading;\n }\n\n return (\n // We pass props.resource here as we don't need to create a new ResourceContext if the props is not provided\n <OptionalResourceContextProvider value={props.resource}>\n <CreateContextProvider value={controllerProps}>\n {children}\n </CreateContextProvider>\n </OptionalResourceContextProvider>\n );\n};\n\nexport interface CreateBaseProps<\n RecordType extends Omit<RaRecord, 'id'> = any,\n ResultRecordType extends RaRecord = RecordType & { id: Identifier },\n MutationOptionsError = Error,\n> extends CreateControllerProps<\n RecordType,\n MutationOptionsError,\n ResultRecordType\n > {\n children: ReactNode;\n loading?: ReactNode;\n}\n", "import { useCallback } from 'react';\nimport { UseMutationOptions } from '@tanstack/react-query';\n\nimport { useAuthenticated, useRequireAccess } from '../../auth';\nimport {\n HttpError,\n useCreate,\n UseCreateMutateParams,\n} from '../../dataProvider';\nimport { useRedirect, RedirectionSideEffect } from '../../routing';\nimport { useNotify } from '../../notification';\nimport {\n SaveContextValue,\n SaveHandlerCallbacks,\n useMutationMiddlewares,\n} from '../saveContext';\nimport { useTranslate } from '../../i18n';\nimport { Identifier, RaRecord, TransformData } from '../../types';\nimport {\n useResourceContext,\n useResourceDefinition,\n useGetResourceLabel,\n} from '../../core';\n\n/**\n * Prepare data for the Create view\n *\n * @param {Object} props The props passed to the Create component.\n *\n * @return {Object} controllerProps Fetched data and callbacks for the Create view\n *\n * @example\n *\n * import { useCreateController } from 'react-admin';\n * import CreateView from './CreateView';\n *\n * const MyCreate = props => {\n * const controllerProps = useCreateController(props);\n * return <CreateView {...controllerProps} {...props} />;\n * }\n */\nexport const useCreateController = <\n RecordType extends Omit<RaRecord, 'id'> = any,\n MutationOptionsError = Error,\n ResultRecordType extends RaRecord = RecordType & { id: Identifier },\n>(\n props: CreateControllerProps<\n RecordType,\n MutationOptionsError,\n ResultRecordType\n > = {}\n): CreateControllerResult<RecordType> => {\n const {\n disableAuthentication,\n record,\n redirect: redirectTo,\n transform,\n mutationOptions = {},\n } = props;\n\n const resource = useResourceContext(props);\n if (!resource) {\n throw new Error(\n 'useCreateController requires a non-empty resource prop or context'\n );\n }\n const { isPending: isPendingAuthenticated } = useAuthenticated({\n enabled: !disableAuthentication,\n });\n const { isPending: isPendingCanAccess } = useRequireAccess<RecordType>({\n action: 'create',\n resource,\n // If disableAuthentication is true then isPendingAuthenticated will always be true so this hook is disabled\n enabled: !isPendingAuthenticated,\n });\n const { hasEdit, hasShow } = useResourceDefinition(props);\n const finalRedirectTo =\n redirectTo ?? getDefaultRedirectRoute(hasShow, hasEdit);\n const translate = useTranslate();\n const notify = useNotify();\n const redirect = useRedirect();\n const { onSuccess, onError, meta, ...otherMutationOptions } =\n mutationOptions;\n const {\n registerMutationMiddleware,\n getMutateWithMiddlewares,\n unregisterMutationMiddleware,\n } = useMutationMiddlewares();\n\n const [create, { isPending: saving }] = useCreate<\n RecordType,\n MutationOptionsError,\n ResultRecordType\n >(resource, undefined, {\n onSuccess: async (data, variables, context) => {\n if (onSuccess) {\n return onSuccess(data, variables, context);\n }\n\n notify(`resources.${resource}.notifications.created`, {\n type: 'info',\n messageArgs: {\n smart_count: 1,\n _: translate(`ra.notification.created`, {\n smart_count: 1,\n }),\n },\n });\n redirect(finalRedirectTo, resource, data.id, data);\n },\n onError: (error: MutationOptionsError, variables, context) => {\n if (onError) {\n return onError(error, variables, context);\n }\n // Don't trigger a notification if this is a validation error\n // (notification will be handled by the useNotifyIsFormInvalid hook)\n const validationErrors = (error as HttpError)?.body?.errors;\n const hasValidationErrors =\n !!validationErrors && Object.keys(validationErrors).length > 0;\n if (!hasValidationErrors) {\n notify(\n typeof error === 'string'\n ? error\n : (error as Error).message ||\n 'ra.notification.http_error',\n {\n type: 'error',\n messageArgs: {\n _:\n typeof error === 'string'\n ? error\n : error instanceof Error ||\n (typeof error === 'object' &&\n error !== null &&\n error.hasOwnProperty('message'))\n ? // @ts-ignore\n error.message\n : undefined,\n },\n }\n );\n }\n },\n ...otherMutationOptions,\n returnPromise: true,\n getMutateWithMiddlewares,\n });\n\n const save = useCallback(\n (\n data: Partial<RecordType>,\n {\n transform: transformFromSave,\n meta: metaFromSave,\n ...callTimeOptions\n } = {} as SaveHandlerCallbacks\n ) =>\n Promise.resolve(\n transformFromSave\n ? transformFromSave(data)\n : transform\n ? transform(data)\n : data\n ).then(async (data: Partial<RecordType>) => {\n try {\n await create(\n resource,\n { data, meta: metaFromSave ?? meta },\n callTimeOptions\n );\n } catch (error) {\n if (\n (error instanceof HttpError ||\n (typeof error === 'object' &&\n error !== null &&\n error.hasOwnProperty('body'))) &&\n error.body?.errors != null\n ) {\n return error.body.errors;\n }\n }\n }),\n [create, meta, resource, transform]\n );\n\n const getResourceLabel = useGetResourceLabel();\n const defaultTitle = translate('ra.page.create', {\n name: getResourceLabel(resource, 1),\n });\n\n return {\n isFetching: false,\n isLoading: false,\n isPending: disableAuthentication ? false : isPendingCanAccess,\n saving,\n defaultTitle,\n save,\n record,\n resource,\n redirect: finalRedirectTo,\n registerMutationMiddleware,\n unregisterMutationMiddleware,\n };\n};\n\nexport interface CreateControllerProps<\n RecordType extends Omit<RaRecord, 'id'> = any,\n MutationOptionsError = Error,\n ResultRecordType extends RaRecord = RecordType & { id: Identifier },\n> {\n disableAuthentication?: boolean;\n hasEdit?: boolean;\n hasShow?: boolean;\n record?: Partial<RecordType>;\n redirect?: RedirectionSideEffect;\n resource?: string;\n mutationOptions?: UseMutationOptions<\n ResultRecordType,\n MutationOptionsError,\n UseCreateMutateParams<RecordType>\n > & { meta?: any };\n transform?: TransformData;\n}\n\nexport interface CreateControllerResult<\n RecordType extends Omit<RaRecord, 'id'> = any,\n> extends SaveContextValue {\n defaultTitle?: string;\n isFetching: boolean;\n isPending: boolean;\n isLoading: boolean;\n record?: Partial<RecordType>;\n redirect: RedirectionSideEffect;\n resource: string;\n saving: boolean;\n}\n\nconst getDefaultRedirectRoute = (hasShow, hasEdit) => {\n if (hasEdit) {\n return 'edit';\n }\n if (hasShow) {\n return 'show';\n }\n return 'list';\n};\n", "import { createContext } from 'react';\nimport {\n RaRecord,\n OnError,\n OnSuccess,\n TransformData,\n MutationMode,\n} from '../../types';\nimport { Middleware } from './useMutationMiddlewares';\n\nexport interface SaveContextValue<\n RecordType extends RaRecord = any,\n MutateFunc extends (...args: any[]) => any = (...args: any[]) => any,\n> {\n save?: SaveHandler<RecordType>;\n /**\n * @deprecated. Rely on the form isSubmitting value instead\n */\n saving?: boolean;\n mutationMode?: MutationMode;\n registerMutationMiddleware?: (callback: Middleware<MutateFunc>) => void;\n unregisterMutationMiddleware?: (callback: Middleware<MutateFunc>) => void;\n}\n\nexport type SaveHandler<RecordType> = (\n record: Partial<RecordType>,\n callbacks?: SaveHandlerCallbacks\n) => Promise<void | RecordType> | Record<string, string>;\n\nexport type SaveHandlerCallbacks = {\n onSuccess?: OnSuccess;\n onError?: OnError;\n transform?: TransformData;\n meta?: any;\n};\nexport const SaveContext = createContext<SaveContextValue>({});\n", "import * as React from 'react';\nimport { SaveContext } from './SaveContext';\n\nexport const SaveContextProvider = ({ children, value }) => (\n <SaveContext.Provider value={value}>{children}</SaveContext.Provider>\n);\n", "import { useMemo } from 'react';\nimport pick from 'lodash/pick';\nimport { SaveContextValue } from './SaveContext';\n\n/**\n * This hook extracts the `save`, `saving` and mutationMode properties from either the `CreateContext` or `EditContext`. This ensures the `SaveContext` doesn't rerender when those two contexts have other properties changes.\n */\nexport const usePickSaveContext = <\n ContextType extends SaveContextValue = SaveContextValue,\n>(\n context: ContextType\n): SaveContextValue => {\n const value = useMemo(\n () =>\n pick(context, [\n 'save',\n 'saving',\n 'mutationMode',\n 'registerMutationMiddleware',\n 'unregisterMutationMiddleware',\n ]),\n /* eslint-disable react-hooks/exhaustive-deps */\n [\n context.save,\n context.saving,\n context.mutationMode,\n context.registerMutationMiddleware,\n context.unregisterMutationMiddleware,\n ]\n /* eslint-enable react-hooks/exhaustive-deps */\n );\n\n return value;\n};\n", "import { useContext } from 'react';\nimport { SaveContext, SaveContextValue } from './SaveContext';\n/**\n * Get the save() function and its status\n *\n * Used in forms.\n *\n * @example\n *\n * const {\n * save,\n * saving\n * } = useSaveContext();\n */\nexport const useSaveContext = <\n PropsType extends SaveContextValue = SaveContextValue,\n>(\n _props?: PropsType\n): SaveContextValue => {\n return useContext(SaveContext);\n};\n", "import { useCallback, useMemo, useRef } from 'react';\n\n/**\n * Internal hook used to handle mutation middlewares.\n *\n * @example\n * // We have a form creating an order for a new customer.\n * // The form contains the customer fields in addition to the order fields\n * // but they should be saved as a new customer resource record\n * // and the order should only reference this new customer\n * type Order = { id: string; reference: string };\n * type OrderCreateFormData = { id: string; reference: string; customer: Customer };\n * type Customer = { id: string; email: string; firstName: string; lastName: string };\n *\n * const CustomerForm = props => {\n * const [createCustomer] = useCreate<Customer>();\n * const middleware: Middleware<UseCreateResult<OrderCreateFormData>[0]> = useCallback(async (resource, params, next) => {\n * const { data } = params;\n * const { user, ...orderData } = data;\n * const { data = newCustomer } = await createCustomer('customers', { data: user });\n * const orderDataWithCustomer = { ...orderData, customerId: newCustomer.id };\n * next(resource, { data: orderDataWithCustomer });\n * }, [createCustomer]);\n * useRegisterMutationMiddleware(middleware);\n *\n * return (\n * <>\n * <TextInput source=\"user.email\" />\n * <TextInput source=\"user.firstName\" />\n * <TextInput source=\"user.lastName\" />\n * </>\n * );\n * }\n */\nexport const useMutationMiddlewares = <\n MutateFunc extends (...args: any[]) => any = (...args: any[]) => any,\n>(): UseMutationMiddlewaresResult<MutateFunc> => {\n const callbacks = useRef<Middleware<MutateFunc>[]>([]);\n\n const registerMutationMiddleware = useCallback(\n (callback: Middleware<MutateFunc>) => {\n callbacks.current.push(callback);\n },\n []\n );\n\n const unregisterMutationMiddleware = useCallback(\n (callback: Middleware<MutateFunc>) => {\n callbacks.current = callbacks.current.filter(cb => cb !== callback);\n },\n []\n );\n\n const getMutateWithMiddlewares = useCallback((fn: MutateFunc) => {\n // Stores the current callbacks in a closure to avoid losing them if the calling component is unmounted\n const currentCallbacks = [...callbacks.current];\n return (...args: Parameters<MutateFunc>): ReturnType<MutateFunc> => {\n let index = currentCallbacks.length - 1;\n\n // Called by middlewares to call the next middleware function\n // Should take the same arguments as the original mutation function\n const next = (...newArgs: any) => {\n // Decrement the middlewares counter so that when next is called again, we\n // call the next middleware\n index--;\n\n // If there are no more middlewares, we call the original mutation function\n if (index >= 0) {\n return currentCallbacks[index](...newArgs, next);\n } else {\n return fn(...newArgs);\n }\n };\n\n if (currentCallbacks.length > 0) {\n // Call the first middleware with the same args as the original mutation function\n // with an additional next function\n return currentCallbacks[index](...args, next);\n }\n\n return fn(...args);\n };\n }, []);\n\n const functions = useMemo<UseMutationMiddlewaresResult<MutateFunc>>(\n () => ({\n registerMutationMiddleware,\n getMutateWithMiddlewares,\n unregisterMutationMiddleware,\n }),\n [\n registerMutationMiddleware,\n getMutateWithMiddlewares,\n unregisterMutationMiddleware,\n ]\n );\n\n return functions;\n};\n\nexport interface UseMutationMiddlewaresResult<\n MutateFunc extends (...args: any[]) => any = (...args: any[]) => any,\n> {\n registerMutationMiddleware: (callback: Middleware<MutateFunc>) => void;\n getMutateWithMiddlewares: (\n mutate: MutateFunc\n ) => (...args: Parameters<MutateFunc>) => ReturnType<MutateFunc>;\n unregisterMutationMiddleware: (callback: Middleware<MutateFunc>) => void;\n}\n\nexport type Middleware<MutateFunc = (...args: any[]) => any> =\n MutateFunc extends (...a: any[]) => infer R\n ? (...a: [...U: Parameters<MutateFunc>, next: MutateFunc]) => R\n : never;\n", "import { useEffect } from 'react';\nimport { Middleware } from './useMutationMiddlewares';\nimport { useSaveContext } from './useSaveContext';\n\n/**\n * Internal hook that registers a middleware for the save function in the current SaveContext.\n * @param callback The middleware function.\n */\nexport const useRegisterMutationMiddleware = <\n MutateFunc extends (...args: any[]) => any = (...args: any[]) => any,\n>(\n callback: Middleware<MutateFunc>\n) => {\n const { registerMutationMiddleware, unregisterMutationMiddleware } =\n useSaveContext();\n\n useEffect(() => {\n if (!registerMutationMiddleware || !unregisterMutationMiddleware) {\n return;\n }\n registerMutationMiddleware(callback);\n return () => {\n unregisterMutationMiddleware(callback);\n };\n }, [callback, registerMutationMiddleware, unregisterMutationMiddleware]);\n};\n", "import * as React from 'react';\nimport { ReactNode } from 'react';\n\nimport { RaRecord } from '../../types';\nimport { RecordContextProvider } from '../record/RecordContext';\nimport { CreateContext } from './CreateContext';\nimport { CreateControllerResult } from './useCreateController';\nimport { SaveContextProvider, usePickSaveContext } from '../saveContext';\n\n/**\n * Create a Create Context.\n *\n * @example\n *\n * const MyCreate = (props) => {\n * const controllerProps = useCreateController(props);\n * return (\n * <CreateContextProvider value={controllerProps}>\n * <MyCreateView>\n * </CreateContextProvider>\n * );\n * };\n *\n * const MyCreateView = () => {\n * const record = useRecordContext();\n * // or, to rerender only when the save operation change but not data\n * const { saving } = useCreateContext();\n * }\n *\n * @see CreateContext\n * @see RecordContext\n */\nexport const CreateContextProvider = ({\n children,\n value,\n}: {\n children: ReactNode;\n value: CreateControllerResult;\n}) => (\n <CreateContext.Provider value={value}>\n <SaveContextProvider\n value={{\n ...usePickSaveContext(value),\n mutationMode: 'pessimistic',\n }}\n >\n <RecordContextProvider<Partial<RaRecord>>\n value={value && value.record}\n >\n {children}\n </RecordContextProvider>\n </SaveContextProvider>\n </CreateContext.Provider>\n);\n", "import { createContext } from 'react';\nimport { CreateControllerResult } from './useCreateController';\n\n/**\n * Context to store the result of the useCreateController() hook.\n *\n * Use the useCreateContext() hook to read the context. That's what the Create components do in react-admin.\n *\n * @example\n *\n * import { useCreateController, CreateContextProvider } from 'ra-core';\n *\n * const Create = props => {\n * const controllerProps = useCreateController(props);\n * return (\n * <CreateContextProvider value={controllerProps}>\n * ...\n * </CreateContextProvider>\n * );\n * };\n */\nexport const CreateContext = createContext<CreateControllerResult | null>(null);\n\nCreateContext.displayName = 'CreateContext';\n", "import { ReactNode } from 'react';\nimport {\n useCreateController,\n CreateControllerProps,\n CreateControllerResult,\n} from './useCreateController';\nimport { RaRecord } from '../../types';\n\n/**\n * Render prop version of the useCreateController hook\n *\n * @see useCreateController\n * @example\n *\n * const CreateView = () => <div>...</div>\n * const MyCreate = props => (\n * <CreateController {...props}>\n * {controllerProps => <CreateView {...controllerProps} {...props} />}\n * </CreateController>\n * );\n */\nexport const CreateController = <\n RecordType extends Omit<RaRecord, 'id'> = any,\n MutationOptionsError = Error,\n>({\n children,\n ...props\n}: {\n children: (params: CreateControllerResult<RecordType>) => ReactNode;\n} & CreateControllerProps<RecordType, MutationOptionsError>) => {\n const controllerProps = useCreateController<\n RecordType,\n MutationOptionsError\n >(props);\n return children(controllerProps);\n};\n", "import { useContext } from 'react';\n\nimport { RaRecord } from '../../types';\nimport { CreateContext } from './CreateContext';\nimport { CreateControllerResult } from './useCreateController';\n\n/**\n * Hook to read the create controller props from the CreateContext.\n *\n * Used within a <CreateContextProvider> (e.g. as a descendent of <Create>).\n *\n * @returns {CreateControllerResult} create controller props\n *\n * @see useCreateController for how it is filled\n */\nexport const useCreateContext = <\n RecordType extends RaRecord = RaRecord,\n>(): CreateControllerResult<RecordType> => {\n const context = useContext(CreateContext);\n if (!context) {\n throw new Error(\n 'useCreateContext must be used inside a CreateContextProvider'\n );\n }\n return context;\n};\n", "import * as React from 'react';\nimport { ReactNode } from 'react';\n\nimport { RaRecord } from '../../types';\nimport { useEditController, EditControllerProps } from './useEditController';\nimport { EditContextProvider } from './EditContextProvider';\nimport { OptionalResourceContextProvider } from '../../core';\nimport { useIsAuthPending } from '../../auth';\n\n/**\n * Call useEditController and put the value in a EditContext\n *\n * Base class for <Edit> components, without UI.\n *\n * Accepts any props accepted by useEditController:\n * - id: The record identifier\n * - resource: The resource\n *\n * @example // Custom edit layout\n *\n * const PostEdit = () => (\n * <EditBase resource=\"posts\">\n * <Grid container>\n * <Grid item xs={8}>\n * <SimpleForm>\n * ...\n * </SimpleForm>\n * </Grid>\n * <Grid item xs={4}>\n * Edit instructions...\n * </Grid>\n * </Grid>\n * <div>\n * Post related links...\n * </div>\n * </EditBase>\n * );\n */\nexport const EditBase = <RecordType extends RaRecord = any, ErrorType = Error>({\n children,\n loading = null,\n ...props\n}: EditBaseProps<RecordType, ErrorType>) => {\n const controllerProps = useEditController<RecordType, ErrorType>(props);\n\n const isAuthPending = useIsAuthPending({\n resource: controllerProps.resource,\n action: 'edit',\n });\n\n if (isAuthPending && !props.disableAuthentication) {\n return loading;\n }\n\n return (\n // We pass props.resource here as we don't need to create a new ResourceContext if the props is not provided\n <OptionalResourceContextProvider value={props.resource}>\n <EditContextProvider value={controllerProps}>\n {children}\n </EditContextProvider>\n </OptionalResourceContextProvider>\n );\n};\n\nexport interface EditBaseProps<\n RecordType extends RaRecord = RaRecord,\n ErrorType = Error,\n> extends EditControllerProps<RecordType, ErrorType> {\n children: ReactNode;\n loading?: ReactNode;\n}\n", "import { useCallback } from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { useAuthenticated, useRequireAccess } from '../../auth';\nimport { RaRecord, MutationMode, TransformData } from '../../types';\nimport { useRedirect, RedirectionSideEffect } from '../../routing';\nimport { useNotify } from '../../notification';\nimport {\n useGetOne,\n useUpdate,\n useRefresh,\n UseGetOneHookValue,\n HttpError,\n UseGetOneOptions,\n UseUpdateOptions,\n} from '../../dataProvider';\nimport { useTranslate } from '../../i18n';\nimport {\n useResourceContext,\n useGetResourceLabel,\n useGetRecordRepresentation,\n} from '../../core';\nimport {\n SaveContextValue,\n SaveHandlerCallbacks,\n useMutationMiddlewares,\n} from '../saveContext';\n\n/**\n * Prepare data for the Edit view.\n *\n * useEditController does a few things:\n * - it grabs the id from the URL and the resource name from the ResourceContext,\n * - it fetches the record via useGetOne,\n * - it prepares the page title.\n *\n * @param {Object} props The props passed to the Edit component.\n *\n * @return {Object} controllerProps Fetched data and callbacks for the Edit view\n *\n * @example\n *\n * import { useEditController } from 'react-admin';\n * import EditView from './EditView';\n *\n * const MyEdit = () => {\n * const controllerProps = useEditController({ resource: 'posts', id: 123 });\n * return <EditView {...controllerProps} {...props} />;\n * }\n */\nexport const useEditController = <\n RecordType extends RaRecord = any,\n ErrorType = Error,\n>(\n props: EditControllerProps<RecordType, ErrorType> = {}\n): EditControllerResult<RecordType, ErrorType> => {\n const {\n disableAuthentication = false,\n id: propsId,\n mutationMode = 'undoable',\n mutationOptions = {},\n queryOptions = {},\n redirect: redirectTo = DefaultRedirect,\n transform,\n } = props;\n const resource = useResourceContext(props);\n if (!resource) {\n throw new Error(\n 'useEditController requires a non-empty resource prop or context'\n );\n }\n const { isPending: isPendingAuthenticated } = useAuthenticated({\n enabled: !disableAuthentication,\n });\n\n const { isPending: isPendingCanAccess } = useRequireAccess<RecordType>({\n action: 'edit',\n resource,\n // If disableAuthentication is true then isPendingAuthenticated will always be true so this hook is disabled\n enabled: !isPendingAuthenticated,\n });\n\n const getRecordRepresentation = useGetRecordRepresentation(resource);\n const translate = useTranslate();\n const notify = useNotify();\n const redirect = useRedirect();\n const refresh = useRefresh();\n const { id: routeId } = useParams<'id'>();\n if (!routeId && !propsId) {\n throw new Error(\n 'useEditController requires an id prop or a route with an /:id? parameter.'\n );\n }\n const id = propsId ?? routeId;\n const { meta: queryMeta, ...otherQueryOptions } = queryOptions;\n const {\n meta: mutationMeta,\n onSuccess,\n onError,\n ...otherMutationOptions\n } = mutationOptions;\n const {\n registerMutationMiddleware,\n getMutateWithMiddlewares,\n unregisterMutationMiddleware,\n } = useMutationMiddlewares();\n const {\n data: record,\n error,\n isLoading,\n isFetching,\n isPending,\n refetch,\n } = useGetOne<RecordType, ErrorType>(\n resource,\n { id, meta: queryMeta },\n {\n enabled:\n (!isPendingAuthenticated && !isPendingCanAccess) ||\n disableAuthentication,\n onError: () => {\n notify('ra.notification.item_doesnt_exist', {\n type: 'error',\n });\n redirect('list', resource);\n refresh();\n },\n refetchOnReconnect: false,\n refetchOnWindowFocus: false,\n retry: false,\n ...otherQueryOptions,\n }\n );\n\n // eslint-disable-next-line eqeqeq\n if (record && record.id && record.id != id) {\n throw new Error(\n `useEditController: Fetched record's id attribute (${record.id}) must match the requested 'id' (${id})`\n );\n }\n\n const getResourceLabel = useGetResourceLabel();\n const recordRepresentation = getRecordRepresentation(record);\n const defaultTitle = translate('ra.page.edit', {\n name: getResourceLabel(resource, 1),\n id,\n record,\n recordRepresentation:\n typeof recordRepresentation === 'string'\n ? recordRepresentation\n : '',\n });\n\n const recordCached = { id, previousData: record };\n\n const [update, { isPending: saving }] = useUpdate<RecordType, ErrorType>(\n resource,\n recordCached,\n {\n onSuccess: async (data, variables, context) => {\n if (onSuccess) {\n return onSuccess(data, variables, context);\n }\n notify(`resources.${resource}.notifications.updated`, {\n type: 'info',\n messageArgs: {\n smart_count: 1,\n _: translate('ra.notification.updated', {\n smart_count: 1,\n }),\n },\n undoable: mutationMode === 'undoable',\n });\n redirect(redirectTo, resource, data.id, data);\n },\n onError: (error, variables, context) => {\n if (onError) {\n return onError(error, variables, context);\n }\n // Don't trigger a notification if this is a validation error\n // (notification will be handled by the useNotifyIsFormInvalid hook)\n const validationErrors = (error as HttpError)?.body?.errors;\n const hasValidationErrors =\n !!validationErrors &&\n Object.keys(validationErrors).length > 0;\n if (!hasValidationErrors || mutationMode !== 'pessimistic') {\n notify(\n typeof error === 'string'\n ? error\n : (error as Error).message ||\n 'ra.notification.http_error',\n {\n type: 'error',\n messageArgs: {\n _:\n typeof error === 'string'\n ? error\n : error instanceof Error ||\n (typeof error === 'object' &&\n error !== null &&\n error.hasOwnProperty('message'))\n ? // @ts-ignore\n error.message\n : undefined,\n },\n }\n );\n }\n },\n ...otherMutationOptions,\n mutationMode,\n returnPromise: mutationMode === 'pessimistic',\n getMutateWithMiddlewares,\n }\n );\n\n const save = useCallback(\n (\n data: Partial<RecordType>,\n {\n onSuccess: onSuccessFromSave,\n onError: onErrorFromSave,\n transform: transformFromSave,\n meta: metaFromSave,\n } = {} as SaveHandlerCallbacks\n ) =>\n Promise.resolve(\n transformFromSave\n ? transformFromSave(data, {\n previousData: recordCached.previousData,\n })\n : transform\n ? transform(data, {\n previousData: recordCached.previousData,\n })\n : data\n ).then(async (data: Partial<RecordType>) => {\n try {\n await update(\n resource,\n {\n id,\n data,\n meta: metaFromSave ?? mutationMeta,\n },\n {\n onError: onErrorFromSave,\n onSuccess: onSuccessFromSave,\n }\n );\n } catch (error) {\n if ((error as HttpError).body?.errors != null) {\n return (error as HttpError).body.errors;\n }\n }\n }),\n [\n id,\n mutationMeta,\n resource,\n transform,\n update,\n recordCached.previousData,\n ]\n );\n\n return {\n defaultTitle,\n error,\n isFetching,\n isLoading,\n isPending,\n mutationMode,\n record,\n redirect: redirectTo,\n refetch,\n registerMutationMiddleware,\n resource,\n save,\n saving,\n unregisterMutationMiddleware,\n } as EditControllerResult<RecordType, ErrorType>;\n};\n\nconst DefaultRedirect = 'list';\n\nexport interface EditControllerProps<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> {\n disableAuthentication?: boolean;\n id?: RecordType['id'];\n mutationMode?: MutationMode;\n mutationOptions?: UseUpdateOptions<RecordType, ErrorType>;\n queryOptions?: UseGetOneOptions<RecordType, ErrorType>;\n redirect?: RedirectionSideEffect;\n resource?: string;\n transform?: TransformData;\n [key: string]: any;\n}\n\nexport interface EditControllerBaseResult<RecordType extends RaRecord = any>\n extends SaveContextValue<RecordType> {\n defaultTitle?: string;\n isFetching: boolean;\n isLoading: boolean;\n refetch: UseGetOneHookValue<RecordType>['refetch'];\n redirect: RedirectionSideEffect;\n resource: string;\n saving: boolean;\n}\n\nexport interface EditControllerLoadingResult<RecordType extends RaRecord = any>\n extends EditControllerBaseResult<RecordType> {\n record: undefined;\n error: null;\n isPending: true;\n}\nexport interface EditControllerLoadingErrorResult<\n RecordType extends RaRecord = any,\n TError = Error,\n> extends EditControllerBaseResult<RecordType> {\n record: undefined;\n error: TError;\n isPending: false;\n}\nexport interface EditControllerRefetchErrorResult<\n RecordType extends RaRecord = any,\n TError = Error,\n> extends EditControllerBaseResult<RecordType> {\n record: RecordType;\n error: TError;\n isPending: false;\n}\nexport interface EditControllerSuccessResult<RecordType extends RaRecord = any>\n extends EditControllerBaseResult<RecordType> {\n record: RecordType;\n error: null;\n isPending: false;\n}\n\nexport type EditControllerResult<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> =\n | EditControllerLoadingResult<RecordType>\n | EditControllerLoadingErrorResult<RecordType, ErrorType>\n | EditControllerRefetchErrorResult<RecordType, ErrorType>\n | EditControllerSuccessResult<RecordType>;\n", "import * as React from 'react';\nimport { ReactNode } from 'react';\nimport { RaRecord } from '../../types';\nimport { RecordContextProvider } from '../record';\nimport { SaveContextProvider, usePickSaveContext } from '../saveContext';\nimport { EditContext } from './EditContext';\nimport { EditControllerResult } from './useEditController';\n\n/**\n * Create an Edit Context.\n *\n * @example\n *\n * const MyEdit = (props) => {\n * const controllerProps = useEditController(props);\n * return (\n * <EditContextProvider value={controllerProps}>\n * <MyEditView>\n * </EditContextProvider>\n * );\n * };\n *\n * const MyEditView = () => {\n * const record = useRecordContext();\n * // or, to rerender only when the save operation change but not data\n * const { saving } = useEditContext();\n * }\n *\n * @see EditContext\n * @see RecordContext\n */\nexport const EditContextProvider = ({\n children,\n value,\n}: {\n children: ReactNode;\n value: EditControllerResult<any, any>;\n}) => (\n <EditContext.Provider value={value}>\n <SaveContextProvider value={usePickSaveContext(value)}>\n <RecordContextProvider<Partial<RaRecord>>\n value={value && value.record}\n >\n {children}\n </RecordContextProvider>\n </SaveContextProvider>\n </EditContext.Provider>\n);\n", "import * as React from 'react';\nimport { ReactNode } from 'react';\nimport { useRecordContext } from './useRecordContext';\n\n/**\n * Render prop version of useRecordContext\n *\n * @example\n * const BookShow = () => (\n * <Show>\n * <SimpleShowLayout>\n * <WithRecord render={record => <span>{record.title}</span>} />\n * </SimpleShowLayout>\n * </Show>\n * );\n */\nexport const WithRecord = <RecordType extends Record<string, any> = any>({\n render,\n}: WithRecordProps<RecordType>) => {\n const record = useRecordContext<RecordType>();\n return record ? <>{render(record)}</> : null;\n};\n\nexport interface WithRecordProps<RecordType extends Record<string, any> = any> {\n render: (record: RecordType) => ReactNode;\n label?: string;\n}\n", "import * as React from 'react';\nimport { ReactElement } from 'react';\nimport { RaRecord } from '../../types';\nimport { RecordContextProvider } from './RecordContext';\n\n/**\n * Wrap children with a RecordContext provider only if the value is defined.\n *\n * Allows a component to work outside of a record context.\n *\n * @example\n *\n * import { OptionalRecordContextProvider, TextField } from 'react-admin';\n *\n * const RecordTitle = ({ record }) => (\n * <OptionalRecordContextProvider value={record}>\n * <TextField source=\"title\" />\n * </OptionalRecordContextProvider>\n * );\n */\nexport const OptionalRecordContextProvider = <\n RecordType extends RaRecord | Omit<RaRecord, 'id'> = RaRecord,\n>({\n value,\n children,\n}: {\n children: ReactElement;\n value?: RecordType;\n}) =>\n value ? (\n <RecordContextProvider value={value}>{children}</RecordContextProvider>\n ) : (\n children\n );\n", "import * as React from 'react';\nimport { useGetRecordRepresentation, useResourceContext } from '../../core';\nimport { RaRecord } from '../../types';\nimport { useRecordContext } from './useRecordContext';\n\n/**\n * Render the record representation as specified on its parent <Resource>.\n * @param props The component props\n * @param {string} props.resource The resource name\n * @param {RaRecord} props.record The record to render\n */\nexport const RecordRepresentation = (props: {\n record?: RaRecord;\n resource?: string;\n}) => {\n const record = useRecordContext(props);\n const resource = useResourceContext(props);\n const getRecordRepresentation = useGetRecordRepresentation(resource);\n\n return <>{getRecordRepresentation(record)}</>;\n};\n", "import { createContext } from 'react';\nimport { EditControllerResult } from './useEditController';\n\n/**\n * Context to store the result of the useEditController() hook.\n *\n * Use the useEditContext() hook to read the context. That's what the Edit components do in react-admin.\n *\n * @example\n *\n * import { useEditController, EditContextProvider } from 'ra-core';\n *\n * const Edit = props => {\n * const controllerProps = useEditController(props);\n * return (\n * <EditContextProvider value={controllerProps}>\n * ...\n * </EditContextProvider>\n * );\n * };\n */\nexport const EditContext = createContext<EditControllerResult | null>(null);\n\nEditContext.displayName = 'EditContext';\n", "import { ReactNode } from 'react';\nimport {\n useEditController,\n EditControllerProps,\n EditControllerResult,\n} from './useEditController';\nimport { RaRecord } from '../../types';\n\n/**\n * Render prop version of the useEditController hook\n *\n * @see useEditController\n * @example\n *\n * const EditView = () => <div>...</div>\n * const MyEdit = props => (\n * <EditController {...props}>\n * {controllerProps => <EditView {...controllerProps} {...props} />}\n * </EditController>\n * );\n */\nexport const EditController = <\n RecordType extends RaRecord = any,\n ErrorType = Error,\n>({\n children,\n ...props\n}: {\n children: (\n params: EditControllerResult<RecordType, ErrorType>\n ) => ReactNode;\n} & EditControllerProps<RecordType, ErrorType>) => {\n const controllerProps = useEditController<RecordType, ErrorType>(props);\n return children(controllerProps);\n};\n", "import { useContext } from 'react';\n\nimport { RaRecord } from '../../types';\nimport { EditContext } from './EditContext';\nimport { EditControllerResult } from './useEditController';\n\n/**\n * Hook to read the edit controller props from the EditContext.\n *\n * Used within a <EditContextProvider> (e.g. as a descendent of <Edit>).\n *\n * @returns {EditControllerResult} edit controller props\n *\n * @see useEditController for how it is filled\n */\nexport const useEditContext = <\n RecordType extends RaRecord = any,\n ErrorType = Error,\n>(): EditControllerResult<RecordType, ErrorType> => {\n const context = useContext(EditContext);\n if (!context) {\n throw new Error(\n 'useEditContext must be used inside an EditContextProvider'\n );\n }\n return context as EditControllerResult<RecordType, ErrorType>;\n};\n", "import * as React from 'react';\nimport { ReactNode } from 'react';\nimport { UseQueryOptions } from '@tanstack/react-query';\nimport { ReferenceFieldContextProvider } from './ReferenceFieldContext';\nimport { RaRecord } from '../../types';\nimport { useReferenceFieldController } from './useReferenceFieldController';\nimport { ResourceContextProvider } from '../../core';\nimport { RecordContextProvider } from '../record';\n\n/**\n * Fetch reference record, and render its representation, or delegate rendering to child component.\n *\n * The reference prop should be the name of one of the <Resource> components\n * added as <Admin> child.\n *\n * @example // using recordRepresentation\n * <ReferenceFieldBase label=\"User\" source=\"userId\" reference=\"users\" />\n *\n * @example // using a Field component to represent the record\n * <ReferenceFieldBase label=\"User\" source=\"userId\" reference=\"users\">\n * <TextField source=\"name\" />\n * </ReferenceFieldBase>\n *\n * @example // By default, includes a link to the <Edit> page of the related record\n * // (`/users/:userId` in the previous example).\n * // Set the `link` prop to \"show\" to link to the <Show> page instead.\n * <ReferenceFieldBase label=\"User\" source=\"userId\" reference=\"users\" link=\"show\" />\n *\n * @example // You can also prevent `<ReferenceFieldBase>` from adding link to children\n * // by setting `link` to false.\n * <ReferenceFieldBase label=\"User\" source=\"userId\" reference=\"users\" link={false} />\n *\n * @example // Alternatively, you can also pass a custom function to `link`.\n * // It must take reference and record as arguments and return a string\n * <ReferenceFieldBase label=\"User\" source=\"userId\" reference=\"users\" link={(record, reference) => \"/path/to/${reference}/${record}\"} />\n *\n * @default\n * In previous versions of React-Admin, the prop `linkType` was used. It is now deprecated and replaced with `link`. However\n * backward-compatibility is still kept\n */\nexport const ReferenceFieldBase = <\n ReferenceRecordType extends RaRecord = RaRecord,\n>(\n props: ReferenceFieldBaseProps<ReferenceRecordType>\n) => {\n const { children } = props;\n\n const controllerProps =\n useReferenceFieldController<ReferenceRecordType>(props);\n\n return (\n <ResourceContextProvider value={props.reference}>\n <ReferenceFieldContextProvider value={controllerProps}>\n <RecordContextProvider value={controllerProps.referenceRecord}>\n {children}\n </RecordContextProvider>\n </ReferenceFieldContextProvider>\n </ResourceContextProvider>\n );\n};\n\nexport interface ReferenceFieldBaseProps<\n ReferenceRecordType extends RaRecord = RaRecord,\n> {\n children?: ReactNode;\n className?: string;\n error?: ReactNode;\n queryOptions?: Partial<\n UseQueryOptions<ReferenceRecordType[], Error> & {\n meta?: any;\n }\n >;\n reference: string;\n source: string;\n}\n", "import { createContext, useContext } from 'react';\nimport type { UseReferenceFieldControllerResult } from './useReferenceFieldController';\n\nexport const ReferenceFieldContext =\n createContext<UseReferenceFieldControllerResult | null>(null);\n\nexport const ReferenceFieldContextProvider = ReferenceFieldContext.Provider;\n\nexport const useReferenceFieldContext = () => {\n const context = useContext(ReferenceFieldContext);\n if (!context) {\n throw new Error(\n 'useReferenceFieldContext must be used inside a ReferenceFieldContextProvider'\n );\n }\n return context;\n};\n", "import { useMemo } from 'react';\nimport { UseQueryOptions } from '@tanstack/react-query';\n\nimport { RaRecord } from '../../types';\nimport { LinkToType, useGetPathForRecord } from '../../routing';\nimport { UseReferenceResult, useReference } from '../useReference';\nimport { useFieldValue } from '../../util';\n\nexport const useReferenceFieldController = <\n ReferenceRecordType extends RaRecord = RaRecord,\n ErrorType = Error,\n>(\n options: UseReferenceFieldControllerOptions<ReferenceRecordType, ErrorType>\n): UseReferenceFieldControllerResult<ReferenceRecordType, ErrorType> => {\n const { link, reference, queryOptions } = options;\n if (!reference) {\n throw new Error(\n 'useReferenceFieldController: missing reference prop. You must provide a reference, e.g. reference=\"posts\".'\n );\n }\n const id = useFieldValue(options);\n const referenceRecordQuery = useReference<ReferenceRecordType, ErrorType>({\n reference,\n id,\n options: {\n ...queryOptions,\n enabled:\n (queryOptions?.enabled == null ||\n queryOptions?.enabled === true) &&\n id != null,\n },\n });\n\n const path = useGetPathForRecord({\n record: referenceRecordQuery.referenceRecord,\n resource: reference,\n link,\n });\n\n const result = useMemo(\n () =>\n ({\n ...referenceRecordQuery,\n link: path,\n }) as const,\n [path, referenceRecordQuery]\n );\n\n return result;\n};\n\nexport interface UseReferenceFieldControllerOptions<\n ReferenceRecordType extends RaRecord = RaRecord,\n ErrorType = Error,\n> {\n source: string;\n queryOptions?: Omit<\n UseQueryOptions<ReferenceRecordType[], ErrorType>,\n 'queryFn' | 'queryKey'\n >;\n reference: string;\n link?: LinkToType<ReferenceRecordType>;\n}\n\nexport interface UseReferenceFieldControllerResult<\n ReferenceRecordType extends RaRecord = RaRecord,\n ErrorType = Error,\n> extends UseReferenceResult<ReferenceRecordType, ErrorType> {\n link?: string | false;\n}\n", "import { RaRecord, Identifier } from '../types';\nimport { UseGetManyHookValue, useGetManyAggregate } from '../dataProvider';\nimport { UseQueryOptions } from '@tanstack/react-query';\n\ninterface UseReferenceProps<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> {\n id: Identifier;\n reference: string;\n options?: Omit<\n UseQueryOptions<RecordType[], ErrorType>,\n 'queryFn' | 'queryKey'\n > & {\n meta?: any;\n };\n}\n\nexport interface UseReferenceResult<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> {\n isLoading: boolean;\n isPending: boolean;\n isFetching: boolean;\n referenceRecord?: RecordType;\n error?: ErrorType | null;\n refetch: UseGetManyHookValue<RecordType, ErrorType>['refetch'];\n}\n\n/**\n * @typedef UseReferenceResult\n * @type {Object}\n * @property {boolean} isFetching: boolean indicating if the reference is loading\n * @property {boolean} isLoading: boolean indicating if the reference has loaded at least once\n * @property {Object} referenceRecord: the referenced record.\n */\n\n/**\n * Fetch reference record, and return it when available\n *\n * The reference prop should be the name of one of the <Resource> components\n * added as <Admin> child.\n *\n * @example\n *\n * const { isLoading, referenceRecord } = useReference({\n * id: 7,\n * reference: 'users',\n * });\n *\n * @param {Object} option\n * @param {string} option.reference The linked resource name\n * @param {string} option.id The id of the reference\n * @param {Object} option.options Options passed to the dataProvider\n *\n * @returns {UseReferenceResult} The reference record\n */\nexport const useReference = <\n RecordType extends RaRecord = RaRecord,\n ErrorType = Error,\n>({\n reference,\n id,\n options = {},\n}: UseReferenceProps<RecordType, ErrorType>): UseReferenceResult<\n RecordType,\n ErrorType\n> => {\n const { meta, ...otherQueryOptions } = options;\n const { data, error, isLoading, isFetching, isPending, refetch } =\n useGetManyAggregate<RecordType, ErrorType>(\n reference,\n { ids: [id], meta },\n otherQueryOptions\n );\n return {\n referenceRecord: error ? undefined : data ? data[0] : undefined,\n refetch,\n error,\n isLoading,\n isFetching,\n isPending,\n };\n};\n", "import get from 'lodash/get';\nimport { RaRecord, SortPayload } from '../../types';\nimport { useGetManyAggregate } from '../../dataProvider';\nimport { ListControllerResult, useList } from '../list';\nimport { useNotify } from '../../notification';\nimport { UseQueryOptions } from '@tanstack/react-query';\n\nexport interface UseReferenceArrayFieldControllerParams<\n RecordType extends RaRecord = RaRecord,\n ReferenceRecordType extends RaRecord = RaRecord,\n ErrorType = Error,\n> {\n filter?: any;\n page?: number;\n perPage?: number;\n record?: RecordType;\n reference: string;\n resource?: string;\n sort?: SortPayload;\n source: string;\n queryOptions?: Omit<\n UseQueryOptions<ReferenceRecordType[], ErrorType>,\n 'queryFn' | 'queryKey'\n >;\n}\n\nconst emptyArray = [];\nconst defaultFilter = {};\n\n/**\n * Hook that fetches records from another resource specified\n * by an array of *ids* in current record.\n *\n * @example\n *\n * const { data, error, isFetching, isPending } = useReferenceArrayFieldController({\n * record: { referenceIds: ['id1', 'id2']};\n * reference: 'reference';\n * resource: 'resource';\n * source: 'referenceIds';\n * });\n *\n * @param {Object} props\n * @param {Object} props.record The current resource record\n * @param {string} props.reference The linked resource name\n * @param {string} props.resource The current resource name\n * @param {string} props.source The key of the linked resource identifier\n *\n * @param {Props} props\n *\n * @returns {ListControllerResult} The reference props\n */\nexport const useReferenceArrayFieldController = <\n RecordType extends RaRecord = RaRecord,\n ReferenceRecordType extends RaRecord = RaRecord,\n ErrorType = Error,\n>(\n props: UseReferenceArrayFieldControllerParams<\n RecordType,\n ReferenceRecordType,\n ErrorType\n >\n): ListControllerResult<ReferenceRecordType, ErrorType> => {\n const {\n filter = defaultFilter,\n page = 1,\n perPage = 1000,\n record,\n reference,\n sort,\n source,\n queryOptions = {},\n } = props;\n const notify = useNotify();\n const value = get(record, source);\n const { meta, ...otherQueryOptions } = queryOptions;\n const ids = Array.isArray(value) ? value : emptyArray;\n\n const { data, error, isLoading, isFetching, isPending, refetch } =\n useGetManyAggregate<ReferenceRecordType, ErrorType>(\n reference,\n { ids, meta },\n {\n onError: error =>\n notify(\n typeof error === 'string'\n ? error\n : (error as Error)?.message ||\n 'ra.notification.http_error',\n {\n type: 'error',\n messageArgs: {\n _:\n typeof error === 'string'\n ? error\n : (error as Error)?.message\n ? (error as Error).message\n : undefined,\n },\n }\n ),\n ...otherQueryOptions,\n }\n );\n\n const listProps = useList<ReferenceRecordType, ErrorType>({\n data,\n error,\n filter,\n isFetching,\n isLoading,\n isPending,\n page,\n perPage,\n sort,\n });\n\n return {\n ...listProps,\n defaultTitle: undefined,\n refetch,\n resource: reference,\n };\n};\n", "import * as React from 'react';\nimport { ReactNode } from 'react';\nimport {\n useInfiniteListController,\n InfiniteListControllerProps,\n} from './useInfiniteListController';\nimport { OptionalResourceContextProvider } from '../../core';\nimport { RaRecord } from '../../types';\nimport { ListContextProvider } from './ListContextProvider';\nimport { InfinitePaginationContext } from './InfinitePaginationContext';\nimport { useIsAuthPending } from '../../auth';\n\n/**\n * Call useInfiniteListController and put the value in a ListContext\n *\n * Base class for <InfiniteList> components, without UI.\n *\n * Accepts any props accepted by useInfiniteListController:\n * - filter: permanent filter applied to the list\n * - filters: Filter element, to display the filters\n * - filterDefaultValues: object;\n * - perPage: Number of results per page\n * - sort: Default sort\n * - exporter: exported function\n *\n * @example // Custom list layout\n *\n * const PostList = () => (\n * <InfiniteListBase perPage={10}>\n * <div>\n * List metrics...\n * </div>\n * <Grid container>\n * <Grid item xs={8}>\n * <SimpleList primaryText={record => record.title} />\n * </Grid>\n * <Grid item xs={4}>\n * List instructions...\n * </Grid>\n * </Grid>\n * <div>\n * Post related links...\n * </div>\n * </ListBase>\n * );\n */\nexport const InfiniteListBase = <RecordType extends RaRecord = any>({\n children,\n loading = null,\n ...props\n}: InfiniteListBaseProps<RecordType>) => {\n const controllerProps = useInfiniteListController<RecordType>(props);\n const isAuthPending = useIsAuthPending({\n resource: controllerProps.resource,\n action: 'list',\n });\n\n if (isAuthPending && !props.disableAuthentication) {\n return loading;\n }\n\n return (\n // We pass props.resource here as we don't need to create a new ResourceContext if the props is not provided\n <OptionalResourceContextProvider value={props.resource}>\n <ListContextProvider value={controllerProps}>\n <InfinitePaginationContext.Provider\n value={{\n hasNextPage: controllerProps.hasNextPage,\n fetchNextPage: controllerProps.fetchNextPage,\n isFetchingNextPage: controllerProps.isFetchingNextPage,\n hasPreviousPage: controllerProps.hasPreviousPage,\n fetchPreviousPage: controllerProps.fetchPreviousPage,\n isFetchingPreviousPage:\n controllerProps.isFetchingPreviousPage,\n }}\n >\n {children}\n </InfinitePaginationContext.Provider>\n </ListContextProvider>\n </OptionalResourceContextProvider>\n );\n};\n\nexport interface InfiniteListBaseProps<RecordType extends RaRecord = any>\n extends InfiniteListControllerProps<RecordType> {\n children: ReactNode;\n loading?: ReactNode;\n}\n", "import { isValidElement, useEffect, useMemo } from 'react';\nimport type {\n InfiniteQueryObserverBaseResult,\n InfiniteData,\n} from '@tanstack/react-query';\n\nimport { useAuthenticated, useRequireAccess } from '../../auth';\nimport { useTranslate } from '../../i18n';\nimport { useNotify } from '../../notification';\nimport { useInfiniteGetList } from '../../dataProvider';\nimport { defaultExporter } from '../../export';\nimport { useResourceContext, useGetResourceLabel } from '../../core';\nimport { useRecordSelection } from './useRecordSelection';\nimport { useListParams } from './useListParams';\nimport { useSelectAll } from './useSelectAll';\nimport type { UseInfiniteGetListOptions } from '../../dataProvider';\nimport type { ListControllerResult } from './useListController';\nimport type {\n RaRecord,\n SortPayload,\n FilterPayload,\n Exporter,\n GetInfiniteListResult,\n} from '../../types';\n\n/**\n * Prepare data for the InfiniteList view\n *\n * @param {Object} props The props passed to the InfiniteList component.\n *\n * @return {Object} controllerProps Fetched and computed data for the List view\n *\n * @example\n *\n * import { useInfiniteListController } from 'react-admin';\n * import ListView from './ListView';\n *\n * const MyList = props => {\n * const controllerProps = useInfiniteListController(props);\n * return <ListView {...controllerProps} {...props} />;\n * }\n */\nexport const useInfiniteListController = <\n RecordType extends RaRecord = any,\n ErrorType = Error,\n>(\n props: InfiniteListControllerProps<RecordType, ErrorType> = {}\n): InfiniteListControllerResult<RecordType, ErrorType> => {\n const {\n debounce = 500,\n disableAuthentication = false,\n disableSyncWithLocation = false,\n exporter = defaultExporter,\n filter,\n filterDefaultValues,\n perPage = 10,\n queryOptions,\n sort,\n storeKey,\n } = props;\n const resource = useResourceContext(props);\n const { meta, ...otherQueryOptions } = queryOptions ?? {};\n\n if (!resource) {\n throw new Error(\n `<InfiniteList> was called outside of a ResourceContext and without a resource prop. You must set the resource prop.`\n );\n }\n if (filter && isValidElement(filter)) {\n throw new Error(\n '<InfiniteList> received a React element as `filter` props. If you intended to set the list filter elements, use the `filters` (with an s) prop instead. The `filter` prop is internal and should not be set by the developer.'\n );\n }\n\n const { isPending: isPendingAuthenticated } = useAuthenticated({\n enabled: !disableAuthentication,\n });\n\n const { isPending: isPendingCanAccess } = useRequireAccess<RecordType>({\n action: 'list',\n resource,\n // If disableAuthentication is true then isPendingAuthenticated will always be true so this hook is disabled\n enabled: !isPendingAuthenticated,\n });\n\n const translate = useTranslate();\n const notify = useNotify();\n\n const [query, queryModifiers] = useListParams({\n debounce,\n disableSyncWithLocation,\n filterDefaultValues,\n perPage,\n resource,\n sort,\n storeKey,\n });\n\n const [selectedIds, selectionModifiers] = useRecordSelection({ resource });\n\n const {\n data,\n total,\n error,\n isLoading,\n isPending,\n isFetching,\n hasNextPage,\n hasPreviousPage,\n fetchNextPage,\n isFetchingNextPage,\n fetchPreviousPage,\n isFetchingPreviousPage,\n refetch,\n } = useInfiniteGetList<RecordType, ErrorType>(\n resource,\n {\n pagination: {\n page: query.page,\n perPage: query.perPage,\n },\n sort: { field: query.sort, order: query.order },\n filter: { ...query.filter, ...filter },\n meta,\n },\n {\n enabled:\n (!isPendingAuthenticated && !isPendingCanAccess) ||\n disableAuthentication,\n placeholderData: previousData => previousData,\n retry: false,\n onError: error =>\n notify(\n (error as Error)?.message || 'ra.notification.http_error',\n {\n type: 'error',\n messageArgs: {\n _: (error as Error)?.message,\n },\n }\n ),\n ...otherQueryOptions,\n }\n );\n\n const onSelectAll = useSelectAll({\n resource,\n sort: { field: query.sort, order: query.order },\n filter: { ...query.filter, ...filter },\n });\n\n // change page if there is no data\n useEffect(() => {\n if (\n query.page <= 0 ||\n (!isFetching &&\n query.page > 1 &&\n (data == null || data?.pages.length === 0))\n ) {\n // Query for a page that doesn't exist, set page to 1\n queryModifiers.setPage(1);\n return;\n }\n if (total == null) {\n return;\n }\n const totalPages = Math.ceil(total / query.perPage) || 1;\n if (!isFetching && query.page > totalPages) {\n // Query for a page out of bounds, set page to the last existing page\n // It occurs when deleting the last element of the last page\n queryModifiers.setPage(totalPages);\n }\n }, [isFetching, query.page, query.perPage, data, queryModifiers, total]);\n\n const currentSort = useMemo(\n () => ({\n field: query.sort,\n order: query.order,\n }),\n [query.sort, query.order]\n );\n\n const getResourceLabel = useGetResourceLabel();\n const defaultTitle = translate('ra.page.list', {\n name: getResourceLabel(resource, 2),\n });\n\n const unwrappedData = useMemo(\n () => data?.pages?.reduce((acc, page) => [...acc, ...page.data], []),\n [data]\n );\n\n return {\n sort: currentSort,\n data: unwrappedData,\n defaultTitle,\n displayedFilters: query.displayedFilters,\n error,\n exporter,\n filter,\n filterValues: query.filterValues,\n hideFilter: queryModifiers.hideFilter,\n isFetching,\n isLoading,\n isPending,\n onSelect: selectionModifiers.select,\n onSelectAll,\n onToggleItem: selectionModifiers.toggle,\n onUnselectItems: selectionModifiers.clearSelection,\n page: query.page,\n perPage: query.perPage,\n refetch,\n resource,\n selectedIds,\n setFilters: queryModifiers.setFilters,\n setPage: queryModifiers.setPage,\n setPerPage: queryModifiers.setPerPage,\n setSort: queryModifiers.setSort,\n showFilter: queryModifiers.showFilter,\n total: total,\n hasNextPage,\n hasPreviousPage,\n fetchNextPage,\n isFetchingNextPage,\n fetchPreviousPage,\n isFetchingPreviousPage,\n } as InfiniteListControllerResult<RecordType, ErrorType>;\n};\n\nexport interface InfiniteListControllerProps<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> {\n debounce?: number;\n disableAuthentication?: boolean;\n /**\n * Whether to disable the synchronization of the list parameters with the current location (URL search parameters)\n */\n disableSyncWithLocation?: boolean;\n exporter?: Exporter | false;\n filter?: FilterPayload;\n filterDefaultValues?: object;\n perPage?: number;\n queryOptions?: UseInfiniteGetListOptions<RecordType, ErrorType>;\n resource?: string;\n sort?: SortPayload;\n storeKey?: string | false;\n}\n\nexport type InfiniteListControllerResult<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> = ListControllerResult<RecordType> & {\n fetchNextPage: InfiniteQueryObserverBaseResult<\n InfiniteData<GetInfiniteListResult<RecordType>>,\n ErrorType\n >['fetchNextPage'];\n fetchPreviousPage: InfiniteQueryObserverBaseResult<\n InfiniteData<GetInfiniteListResult<RecordType>>,\n ErrorType\n >['fetchPreviousPage'];\n isFetchingNextPage: InfiniteQueryObserverBaseResult<\n InfiniteData<GetInfiniteListResult<RecordType>>,\n ErrorType\n >['isFetchingNextPage'];\n isFetchingPreviousPage: InfiniteQueryObserverBaseResult<\n InfiniteData<GetInfiniteListResult<RecordType>>,\n ErrorType\n >['isFetchingPreviousPage'];\n};\n", "import jsonExport from 'jsonexport/dist';\n\nimport { downloadCSV } from './downloadCSV';\nimport { Exporter } from '../types';\n\nexport const defaultExporter: Exporter = (data, _, __, resource) =>\n jsonExport(data, (err, csv) => downloadCSV(csv, resource));\n", "export const downloadCSV = (csv: string, filename: string = 'export'): void => {\n const fakeLink = document.createElement('a');\n fakeLink.style.display = 'none';\n document.body.appendChild(fakeLink);\n const blob = new Blob([csv], { type: 'text/csv;charset=utf-8' });\n // @ts-ignore\n if (window.navigator && window.navigator.msSaveOrOpenBlob) {\n // Manage IE11+ & Edge\n // @ts-ignore\n window.navigator.msSaveOrOpenBlob(blob, `${filename}.csv`);\n } else {\n fakeLink.setAttribute('href', URL.createObjectURL(blob));\n fakeLink.setAttribute('download', `${filename}.csv`);\n fakeLink.click();\n }\n};\n", "import { createContext } from 'react';\n\nimport { Exporter } from '../types';\nimport { defaultExporter } from './defaultExporter';\n\nexport const ExporterContext = createContext<Exporter | false>(defaultExporter);\n\nExporterContext.displayName = 'ExporterContext';\n", "import { RaRecord, Identifier } from '../types';\n\n/**\n * Extracts, aggregates and deduplicates the ids of related records\n *\n * @example\n * const books = [\n * { id: 1, author_id: 123, title: 'Pride and Prejudice' },\n * { id: 2, author_id: 123, title: 'Sense and Sensibility' },\n * { id: 3, author_id: 456, title: 'War and Peace' },\n * ];\n * getRelatedIds(books, 'author_id'); => [123, 456]\n *\n * @example\n * const books = [\n * { id: 1, tag_ids: [1, 2], title: 'Pride and Prejudice' },\n * { id: 2, tag_ids: [2, 3], title: 'Sense and Sensibility' },\n * { id: 3, tag_ids: [4], title: 'War and Peace' },\n * ];\n * getRelatedIds(records, 'tag_ids'); => [1, 2, 3, 4]\n *\n * @param {Object[]} records An array of records\n * @param {string} field the identifier of the record field to use\n */\nexport const getRelatedIds = (\n records: RaRecord[],\n field: string\n): Identifier[] =>\n Array.from(\n new Set(\n records\n .filter(record => record[field] != null)\n .map(record => record[field])\n .reduce((ids, value) => ids.concat(value), [])\n )\n );\n", "import { DataProvider, FetchRelatedRecords } from '../types';\nimport { getRelatedIds } from './getRelatedIds';\n\n/**\n * Helper function for calling the dataProvider.getMany() method,\n * and getting a Promise for the records indexed by id in return.\n *\n * @example\n * fetchRelatedRecords(dataProvider)(records, 'post_id', 'posts').then(posts =>\n * posts.map(record => ({\n * ...record,\n * post_title: posts[record.post_id].title,\n * }))\n * );\n */\nexport const fetchRelatedRecords =\n (dataProvider: DataProvider): FetchRelatedRecords =>\n (data, field, resource) =>\n dataProvider\n .getMany(resource, { ids: getRelatedIds(data, field) })\n .then(({ data }) =>\n data.reduce((acc, post) => {\n acc[post.id] = post;\n return acc;\n }, {})\n );\n", "import { useCallback, useMemo, useState } from 'react';\n\nimport { useStore, useRemoveFromStore } from '../../store';\nimport { RaRecord } from '../../types';\n\ntype UseRecordSelectionWithResourceArgs = {\n resource: string;\n disableSyncWithStore?: false;\n};\ntype UseRecordSelectionWithNoStoreArgs = {\n resource?: string;\n disableSyncWithStore: true;\n};\n\nexport type UseRecordSelectionArgs =\n | UseRecordSelectionWithResourceArgs\n | UseRecordSelectionWithNoStoreArgs;\n\nexport type UseRecordSelectionResult<RecordType extends RaRecord = any> = [\n RecordType['id'][],\n {\n select: (ids: RecordType['id'][]) => void;\n unselect: (ids: RecordType['id'][]) => void;\n toggle: (id: RecordType['id']) => void;\n clearSelection: () => void;\n },\n];\n\n/**\n * Get the list of selected items for a resource, and callbacks to change the selection\n *\n * @param args.resource The resource name, e.g. 'posts'\n * @param args.disableSyncWithStore Controls the selection syncronization with the store\n *\n * @returns {Object} Destructure as [selectedIds, { select, toggle, clearSelection }].\n */\nexport const useRecordSelection = <RecordType extends RaRecord = any>(\n args: UseRecordSelectionArgs\n): UseRecordSelectionResult<RecordType> => {\n const { resource = '', disableSyncWithStore = false } = args;\n\n const storeKey = `${resource}.selectedIds`;\n\n const [localIds, setLocalIds] =\n useState<RecordType['id'][]>(defaultSelection);\n // As we can't conditionally call a hook, if the storeKey is false,\n // we'll ignore the params variable later on and won't call setParams either.\n const [storeIds, setStoreIds] = useStore<RecordType['id'][]>(\n storeKey,\n defaultSelection\n );\n const resetStore = useRemoveFromStore(storeKey);\n\n const ids = disableSyncWithStore ? localIds : storeIds;\n const setIds = disableSyncWithStore ? setLocalIds : setStoreIds;\n\n const reset = useCallback(() => {\n if (disableSyncWithStore) {\n setLocalIds(defaultSelection);\n } else {\n resetStore();\n }\n }, [disableSyncWithStore, resetStore]);\n\n const selectionModifiers = useMemo(\n () => ({\n select: (idsToAdd: RecordType['id'][]) => {\n if (!idsToAdd) return;\n setIds([...idsToAdd]);\n },\n unselect(idsToRemove: RecordType['id'][]) {\n if (!idsToRemove || idsToRemove.length === 0) return;\n setIds(ids => {\n if (!Array.isArray(ids)) return [];\n return ids.filter(id => !idsToRemove.includes(id));\n });\n },\n toggle: (id: RecordType['id']) => {\n if (typeof id === 'undefined') return;\n setIds(ids => {\n if (!Array.isArray(ids)) return [...ids];\n const index = ids.indexOf(id);\n return index > -1\n ? [...ids.slice(0, index), ...ids.slice(index + 1)]\n : [...ids, id];\n });\n },\n clearSelection: () => {\n reset();\n },\n }),\n [setIds, reset]\n );\n\n return [ids, selectionModifiers];\n};\n\nconst defaultSelection = [];\n", "import { useCallback, useMemo, useEffect, useState, useRef } from 'react';\nimport { parse, stringify } from 'query-string';\nimport lodashDebounce from 'lodash/debounce';\nimport { useNavigate, useLocation } from 'react-router-dom';\n\nimport { useStore } from '../../store';\nimport queryReducer, {\n SET_FILTER,\n HIDE_FILTER,\n SHOW_FILTER,\n SET_PAGE,\n SET_PER_PAGE,\n SET_SORT,\n SORT_ASC,\n} from './queryReducer';\nimport { SortPayload, FilterPayload } from '../../types';\nimport removeEmpty from '../../util/removeEmpty';\nimport { useIsMounted } from '../../util/hooks';\n\nexport interface ListParams {\n sort: string;\n order: 'ASC' | 'DESC';\n page: number;\n perPage: number;\n filter: any;\n displayedFilters: any;\n}\n\n/**\n * Get the list parameters (page, sort, filters) and modifiers.\n *\n * These parameters are merged from 3 sources:\n * - the query string from the URL\n * - the params stored in the state (from previous navigation)\n * - the options passed to the hook (including the filter defaultValues)\n *\n * @returns {Array} A tuple [parameters, modifiers].\n * Destructure as [\n * { page, perPage, sort, order, filter, filterValues, displayedFilters, requestSignature },\n * { setFilters, hideFilter, showFilter, setPage, setPerPage, setSort }\n * ]\n *\n * @example\n *\n * const [listParams, listParamsActions] = useListParams({\n * resource: 'posts',\n * location: location // From react-router. Injected to your component by react-admin inside a List\n * filterDefaultValues: {\n * published: true\n * },\n * sort: {\n * field: 'published_at',\n * order: 'DESC'\n * },\n * perPage: 25\n * });\n *\n * const {\n * page,\n * perPage,\n * sort,\n * order,\n * filter,\n * filterValues,\n * displayedFilters,\n * requestSignature\n * } = listParams;\n *\n * const {\n * setFilters,\n * hideFilter,\n * showFilter,\n * setPage,\n * setPerPage,\n * setSort,\n * } = listParamsActions;\n */\nexport const useListParams = ({\n debounce = 500,\n disableSyncWithLocation = false,\n filterDefaultValues,\n perPage = 10,\n resource,\n sort = defaultSort,\n storeKey = disableSyncWithLocation ? false : `${resource}.listParams`,\n}: ListParamsOptions): [Parameters, Modifiers] => {\n const location = useLocation();\n const navigate = useNavigate();\n const [localParams, setLocalParams] = useState(defaultParams);\n // As we can't conditionally call a hook, if the storeKey is false,\n // we'll ignore the params variable later on and won't call setParams either.\n const [params, setParams] = useStore(\n storeKey || `${resource}.listParams`,\n defaultParams\n );\n const tempParams = useRef<ListParams>();\n const isMounted = useIsMounted();\n\n const requestSignature = [\n location.search,\n resource,\n storeKey,\n JSON.stringify(!storeKey ? localParams : params),\n JSON.stringify(filterDefaultValues),\n JSON.stringify(sort),\n perPage,\n disableSyncWithLocation,\n ];\n\n const queryFromLocation = disableSyncWithLocation\n ? {}\n : parseQueryFromLocation(location);\n\n const query = useMemo(\n () =>\n getQuery({\n queryFromLocation,\n params: !storeKey ? localParams : params,\n filterDefaultValues,\n sort,\n perPage,\n }),\n requestSignature // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n // if the location includes params (for example from a link like\n // the categories products on the demo), we need to persist them in the\n // store as well so that we don't lose them after a redirection back\n // to the list\n useEffect(() => {\n if (Object.keys(queryFromLocation).length > 0) {\n setParams(query);\n }\n }, [location.search]); // eslint-disable-line\n\n const changeParams = useCallback(\n action => {\n // do not change params if the component is already unmounted\n // this is necessary because changeParams can be debounced, and therefore\n // executed after the component is unmounted\n if (!isMounted.current) return;\n\n if (!tempParams.current) {\n // no other changeParams action dispatched this tick\n tempParams.current = queryReducer(query, action);\n // schedule side effects for next tick\n setTimeout(() => {\n if (!tempParams.current) {\n // the side effects were already processed by another changeParams\n return;\n }\n if (disableSyncWithLocation && !storeKey) {\n setLocalParams(tempParams.current);\n } else if (disableSyncWithLocation && !!storeKey) {\n setParams(tempParams.current);\n } else {\n // the useEffect above will apply the changes to the params in the store\n navigate(\n {\n search: `?${stringify({\n ...tempParams.current,\n filter: JSON.stringify(\n tempParams.current.filter\n ),\n displayedFilters: JSON.stringify(\n tempParams.current.displayedFilters\n ),\n })}`,\n },\n {\n state: {\n _scrollToTop: action.type === SET_PAGE,\n },\n }\n );\n }\n tempParams.current = undefined;\n }, 0);\n } else {\n // side effects already scheduled, just change the params\n tempParams.current = queryReducer(tempParams.current, action);\n }\n },\n [...requestSignature, navigate] // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const setSort = useCallback(\n (sort: SortPayload) =>\n changeParams({\n type: SET_SORT,\n payload: sort,\n }),\n [changeParams]\n );\n\n const setPage = useCallback(\n (newPage: number) => changeParams({ type: SET_PAGE, payload: newPage }),\n [changeParams]\n );\n\n const setPerPage = useCallback(\n (newPerPage: number) =>\n changeParams({ type: SET_PER_PAGE, payload: newPerPage }),\n [changeParams]\n );\n\n const filterValues = query.filter || emptyObject;\n const displayedFilterValues = query.displayedFilters || emptyObject;\n\n const debouncedSetFilters = lodashDebounce((filter, displayedFilters) => {\n changeParams({\n type: SET_FILTER,\n payload: {\n filter: removeEmpty(filter),\n displayedFilters,\n },\n });\n }, debounce);\n\n const setFilters = useCallback(\n (filter, displayedFilters = undefined, debounce = false) =>\n debounce\n ? debouncedSetFilters(filter, displayedFilters)\n : changeParams({\n type: SET_FILTER,\n payload: {\n filter: removeEmpty(filter),\n displayedFilters,\n },\n }),\n [changeParams] // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const hideFilter = useCallback(\n (filterName: string) => {\n changeParams({\n type: HIDE_FILTER,\n payload: filterName,\n });\n },\n [changeParams]\n );\n\n const showFilter = useCallback(\n (filterName: string, defaultValue: any) => {\n changeParams({\n type: SHOW_FILTER,\n payload: {\n filterName,\n defaultValue,\n },\n });\n },\n [changeParams]\n );\n\n return [\n {\n filterValues,\n requestSignature,\n ...query,\n displayedFilters: displayedFilterValues,\n },\n {\n changeParams,\n setPage,\n setPerPage,\n setSort,\n setFilters,\n hideFilter,\n showFilter,\n },\n ];\n};\n\nconst parseObject = (query, field) => {\n if (query[field] && typeof query[field] === 'string') {\n try {\n query[field] = JSON.parse(query[field]);\n } catch (err) {\n delete query[field];\n }\n }\n};\n\nexport const parseQueryFromLocation = ({ search }): Partial<ListParams> => {\n const query = parse(search);\n parseObject(query, 'filter');\n parseObject(query, 'displayedFilters');\n return query;\n};\n\n/**\n * Check if user has already set custom sort, page, or filters for this list\n *\n * User params come from the store as the params props. By default,\n * this object is:\n *\n * { filter: {}, order: null, page: 1, perPage: null, sort: null }\n *\n * To check if the user has custom params, we must compare the params\n * to these initial values.\n *\n * @param {Object} params\n */\nexport const hasCustomParams = (params: ListParams) => {\n return (\n params &&\n params.filter &&\n (Object.keys(params.filter).length > 0 ||\n params.order != null ||\n params.page !== 1 ||\n params.perPage != null ||\n params.sort != null)\n );\n};\n\n/**\n * Merge list params from 3 different sources:\n * - the query string\n * - the params stored in the state (from previous navigation)\n * - the props passed to the List component (including the filter defaultValues)\n */\nexport const getQuery = ({\n queryFromLocation,\n params,\n filterDefaultValues,\n sort,\n perPage,\n}) => {\n const query: Partial<ListParams> =\n Object.keys(queryFromLocation).length > 0\n ? queryFromLocation\n : hasCustomParams(params)\n ? { ...params }\n : { filter: filterDefaultValues || {} };\n\n if (!query.sort) {\n query.sort = sort.field;\n query.order = sort.order;\n }\n if (query.perPage == null) {\n query.perPage = perPage;\n }\n if (query.page == null) {\n query.page = 1;\n }\n\n return {\n ...query,\n page: getNumberOrDefault(query.page, 1),\n perPage: getNumberOrDefault(query.perPage, 10),\n } as ListParams;\n};\n\nexport const getNumberOrDefault = (\n possibleNumber: string | number | undefined,\n defaultValue: number\n) => {\n if (typeof possibleNumber === 'undefined') {\n return defaultValue;\n }\n const parsedNumber =\n typeof possibleNumber === 'string'\n ? parseInt(possibleNumber, 10)\n : possibleNumber;\n\n return isNaN(parsedNumber) ? defaultValue : parsedNumber;\n};\n\nexport interface ListParamsOptions {\n debounce?: number;\n // Whether to disable the synchronization of the list parameters with\n // the current location (URL search parameters)\n disableSyncWithLocation?: boolean;\n // default value for a filter when displayed but not yet set\n filterDefaultValues?: FilterPayload;\n perPage?: number;\n resource: string;\n sort?: SortPayload;\n storeKey?: string | false;\n}\n\ninterface Parameters extends ListParams {\n filterValues: object;\n displayedFilters: {\n [key: string]: boolean;\n };\n requestSignature: any[];\n}\n\ninterface Modifiers {\n changeParams: (action: any) => void;\n setPage: (page: number) => void;\n setPerPage: (pageSize: number) => void;\n setSort: (sort: SortPayload) => void;\n setFilters: (\n filters: any,\n displayedFilters?: any,\n debounce?: boolean\n ) => void;\n hideFilter: (filterName: string) => void;\n showFilter: (filterName: string, defaultValue: any) => void;\n}\n\nconst emptyObject = {};\n\nconst defaultSort = {\n field: 'id',\n order: SORT_ASC,\n} as const;\n\nconst defaultParams = {};\n", "import { useRef, useEffect, useState, useCallback } from 'react';\nimport isEqual from 'lodash/isEqual';\n\n// thanks Kent C Dodds for the following helpers\n\n/**\n * @deprecated use `useState` instead, since React no longer\n * issues warnings when calling setState on unmounted components.\n */\nexport function useSafeSetState<T>(\n initialState?: T | (() => T)\n): [T | undefined, React.Dispatch<React.SetStateAction<T>>] {\n const [state, setState] = useState(initialState);\n\n const mountedRef = useRef(false);\n useEffect(() => {\n mountedRef.current = true;\n return () => {\n mountedRef.current = false;\n };\n }, []);\n const safeSetState = useCallback(\n args => {\n if (mountedRef.current) {\n return setState(args);\n }\n },\n [mountedRef, setState]\n );\n\n return [state, safeSetState];\n}\n\nexport function usePrevious(value) {\n const ref = useRef();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}\n\nexport function useDeepCompareEffect(callback, inputs) {\n const cleanupRef = useRef();\n useEffect(() => {\n if (!isEqual(previousInputs, inputs)) {\n cleanupRef.current = callback();\n }\n return cleanupRef.current;\n });\n const previousInputs = usePrevious(inputs);\n}\n\n/**\n * A hook that returns true once a delay has expired.\n * @param ms The delay in milliseconds\n * @param key A key that can be used to reset the timer\n * @returns true if the delay has expired, false otherwise\n */\nexport function useTimeout(ms = 0, key = '') {\n const [ready, setReady] = useState(false);\n\n useEffect(() => {\n setReady(false);\n let timer = setTimeout(() => {\n setReady(true);\n }, ms);\n\n return () => {\n clearTimeout(timer);\n };\n }, [key, ms, setReady]);\n\n return ready;\n}\n\nexport function useIsMounted() {\n const isMounted = useRef(true);\n useEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n return isMounted;\n}\n", "import { useQueryClient } from '@tanstack/react-query';\n\nimport { useNotify } from '../../notification';\nimport { useDataProvider, UseGetListOptions } from '../../dataProvider';\nimport { useRecordSelection } from './useRecordSelection';\nimport { useResourceContext } from '../../core';\nimport { useEvent } from '../../util';\nimport type { FilterPayload, RaRecord, SortPayload } from '../../types';\n\n/**\n * Get a callback to select all records of a resource (capped by the limit parameter)\n *\n * @param {Object} params The hook parameters { resource, sort, filter }\n * @returns {Function} handleSelectAll A function to select all items of a list\n *\n * @example\n * import { List, Datagrid, BulkActionsToolbar, BulkDeleteButton, useListContext, useSelectAll } from 'react-admin';\n *\n * const MySelectAllButton = () => {\n * const { sort, filter } = useListContext();\n * const handleSelectAll = useSelectAll({ resource: 'posts', sort, filter });\n * const handleClick = () => handleSelectAll({\n * queryOptions: { meta: { foo: 'bar' } },\n * limit: 250,\n * });\n * return <button onClick={handleClick}>Select All</button>;\n * };\n *\n * const PostBulkActionsToolbar = () => (\n * <BulkActionsToolbar actions={<MySelectAllButton/>}>\n * <BulkDeleteButton />\n * </BulkActionsToolbar>\n * );\n *\n * export const PostList = () => (\n * <List>\n * <Datagrid bulkActionsToolbar={<PostBulkActionsToolbar />}>\n * ...\n * </Datagrid>\n * </List>\n * );\n */\nexport const useSelectAll = (\n params: UseSelectAllParams\n): UseSelectAllResult => {\n const { sort, filter } = params;\n const resource = useResourceContext(params);\n if (!resource) {\n throw new Error(\n 'useSelectAll should be used inside a ResourceContextProvider or passed a resource prop'\n );\n }\n const dataProvider = useDataProvider();\n const queryClient = useQueryClient();\n const [, { select }] = useRecordSelection({ resource });\n const notify = useNotify();\n\n const handleSelectAll = useEvent(\n async ({\n queryOptions = {},\n limit = 250,\n }: HandleSelectAllParams = {}) => {\n const { meta, onSuccess, onError, ...otherQueryOptions } =\n queryOptions;\n try {\n const results = await queryClient.fetchQuery({\n queryKey: [\n resource,\n 'getList',\n {\n pagination: { page: 1, perPage: limit },\n sort,\n filter,\n meta,\n },\n ],\n queryFn: () =>\n dataProvider.getList(resource, {\n pagination: {\n page: 1,\n perPage: limit,\n },\n sort,\n filter,\n meta,\n }),\n ...otherQueryOptions,\n });\n\n const allIds = results.data?.map(({ id }) => id) || [];\n select(allIds);\n if (allIds.length === limit) {\n notify('ra.message.select_all_limit_reached', {\n messageArgs: { max: limit },\n type: 'warning',\n });\n }\n\n if (onSuccess) {\n onSuccess(results);\n }\n\n return results.data;\n } catch (error) {\n if (onError) {\n onError(error);\n } else {\n notify('ra.notification.http_error', { type: 'warning' });\n }\n }\n }\n );\n return handleSelectAll;\n};\n\nexport interface UseSelectAllParams {\n resource?: string;\n sort?: SortPayload;\n filter?: FilterPayload;\n}\n\nexport interface HandleSelectAllParams<RecordType extends RaRecord = any> {\n limit?: number;\n queryOptions?: UseGetListOptions<RecordType>;\n}\n\nexport type UseSelectAllResult = (options?: HandleSelectAllParams) => void;\n", "import * as React from 'react';\nimport { ListContext } from './ListContext';\nimport { ListFilterContext, usePickFilterContext } from './ListFilterContext';\nimport { ListSortContext, usePickSortContext } from './ListSortContext';\nimport {\n ListPaginationContext,\n usePickPaginationContext,\n} from './ListPaginationContext';\nimport { ListControllerResult } from './useListController';\n\n/**\n * Create a List Context and several thematic List subcontext.\n *\n * Allows children to subscribe to part of the ListContext, and bail out of\n * rendering when some parts of the context that they don't depend on change\n * (because unfortunately React doesn't allow to use context selectors yet).\n *\n * @example\n *\n * const MyList = (props) => {\n * const controllerProps = useListController(props);\n * return (\n * <ListContextProvider value={controllerProps}>\n * <MyListView>\n * </ListContextProvider>\n * );\n * };\n *\n * const MyListView = () => {\n * const { data, filterValues, setFilters } = useListContext();\n * // or, to rerender only when filters change but not data\n * const { filterValues, setFilters } = useListFilterContext();\n * }\n *\n * @see ListContext\n * @see ListFilterContext\n */\nexport const ListContextProvider = ({\n value,\n children,\n}: {\n value: ListControllerResult;\n children: React.ReactNode;\n}) => (\n <ListContext.Provider value={value}>\n <ListFilterContext.Provider value={usePickFilterContext(value)}>\n <ListSortContext.Provider value={usePickSortContext(value)}>\n <ListPaginationContext.Provider\n value={usePickPaginationContext(value)}\n >\n {children}\n </ListPaginationContext.Provider>\n </ListSortContext.Provider>\n </ListFilterContext.Provider>\n </ListContext.Provider>\n);\n", "import { createContext } from 'react';\nimport { ListControllerResult } from './useListController';\n\n/**\n * Context to store the result of the useListController() hook.\n *\n * Use the useListContext() hook to read the context. That's what many\n * List components do in react-admin (e.g. <Datagrid>, <FilterForm>, <Pagination>).\n *\n * @typedef {Object} ListControllerProps\n * @prop {Array} data an array of the list records, e.g. [{ id: 123, title: 'hello world' }, { ... }]\n * @prop {integer} total the total number of results for the current filters, excluding pagination. Useful to build the pagination controls. e.g. 23\n * @prop {boolean} isFetching boolean that is true on mount, and false once the data was fetched\n * @prop {boolean} isLoading boolean that is false until the data is available\n * @prop {integer} page the current page. Starts at 1\n * @prop {Function} setPage a callback to change the page, e.g. setPage(3)\n * @prop {integer} perPage the number of results per page. Defaults to 25\n * @prop {Function} setPerPage a callback to change the number of results per page, e.g. setPerPage(25)\n * @prop {Object} sort a sort object { field, order }, e.g. { field: 'date', order: 'DESC' }\n * @prop {Function} setSort a callback to change the sort, e.g. setSort({ field: 'name', order: 'ASC' })\n * @prop {Object} filterValues a dictionary of filter values, e.g. { title: 'lorem', nationality: 'fr' }\n * @prop {Function} setFilters a callback to update the filters, e.g. setFilters(filters, displayedFilters)\n * @prop {Object} displayedFilters a dictionary of the displayed filters, e.g. { title: true, nationality: true }\n * @prop {Function} showFilter a callback to show one of the filters, e.g. showFilter('title', defaultValue)\n * @prop {Function} hideFilter a callback to hide one of the filters, e.g. hideFilter('title')\n * @prop {Array} selectedIds an array listing the ids of the selected rows, e.g. [123, 456]\n * @prop {Function} onSelect callback to change the list of selected rows, e.g. onSelect([456, 789])\n * @prop {Function} onSelectAll callback to select all the records, e.g. onSelectAll()\n * @prop {Function} onToggleItem callback to toggle the selection of a given record based on its id, e.g. onToggleItem(456)\n * @prop {Function} onUnselectItems callback to clear the selection, e.g. onUnselectItems();\n * @prop {string} defaultTitle the translated title based on the resource, e.g. 'Posts'\n * @prop {string} resource the resource name, deduced from the location. e.g. 'posts'\n * @prop {Function} refetch a function for triggering a refetch of the list data\n *\n * @typedef Props\n * @prop {ListControllerResult} value\n *\n * @param {Props}\n *\n * @see useListController\n * @see useListContext\n *\n * @example\n *\n * import { useListController, ListContext } from 'ra-core';\n *\n * const List = props => {\n * const controllerProps = useListController(props);\n * return (\n * <ListContext.Provider value={controllerProps}>\n * ...\n * </ListContext.Provider>\n * );\n * };\n */\nexport const ListContext = createContext<ListControllerResult | null>(null);\n\nListContext.displayName = 'ListContext';\n", "import { createContext, useMemo } from 'react';\nimport pick from 'lodash/pick';\nimport { ListControllerResult } from './useListController';\n\n/**\n * Context to store the filter part of the useListController() result.\n *\n * Use the useListFilterContext() hook to read the context. That's what many\n * List components do in react-admin (e.g. <FilterForm>, <FilterListItem>).\n *\n * @typedef {Object} ListFilterContextValue\n * @prop {Object} filterValues a dictionary of filter values, e.g. { title: 'lorem', nationality: 'fr' }\n * @prop {Function} setFilters a callback to update the filters, e.g. setFilters(filters, displayedFilters)\n * @prop {Object} displayedFilters a dictionary of the displayed filters, e.g. { title: true, nationality: true }\n * @prop {Function} showFilter a callback to show one of the filters, e.g. showFilter('title', defaultValue)\n * @prop {Function} hideFilter a callback to hide one of the filters, e.g. hideFilter('title')\n * @prop {string} resource the resource name, deduced from the location. e.g. 'posts'\n *\n * @typedef Props\n * @prop {ListFilterContextValue} value\n *\n * @param {Props}\n *\n * @see useListController\n * @see useListFilterContext\n *\n * @example\n *\n * import { useListController, usePickFilterContext, ListFilterContext } from 'ra-core';\n *\n * const List = props => {\n * const controllerProps = useListController(props);\n * return (\n * <ListFilterContext.Provider value={usePickFilterContext(controllerProps)}>\n * ...\n * </ListFilterContext.Provider>\n * );\n * };\n */\nexport const ListFilterContext = createContext<\n ListFilterContextValue | undefined\n>(undefined);\n\nexport type ListFilterContextValue = Pick<\n ListControllerResult,\n | 'displayedFilters'\n | 'filterValues'\n | 'hideFilter'\n | 'setFilters'\n | 'showFilter'\n | 'resource'\n>;\n\nexport const usePickFilterContext = (\n context: ListControllerResult\n): ListFilterContextValue =>\n useMemo(\n () =>\n pick(context, [\n 'displayedFilters',\n 'filterValues',\n 'hideFilter',\n 'setFilters',\n 'showFilter',\n 'resource',\n ]),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n context.displayedFilters,\n context.filterValues,\n context.hideFilter,\n context.setFilters,\n context.showFilter,\n ]\n );\n\nListFilterContext.displayName = 'ListFilterContext';\n", "import { createContext, useMemo } from 'react';\nimport pick from 'lodash/pick';\nimport { ListControllerResult } from './useListController';\n\n/**\n * Context to store the sort part of the useListController() result.\n *\n * Use the useListSortContext() hook to read the context. That's what many\n * List components do in react-admin (e.g. <SortButton>).\n *\n * @typedef {Object} ListSortContextValue\n * @prop {Object} sort a sort object { field, order }, e.g. { field: 'date', order: 'DESC' }\n * @prop {Function} setSort a callback to change the sort, e.g. setSort({ field: 'name', order: 'ASC' })\n * @prop {string} resource the resource name, deduced from the location. e.g. 'posts'\n *\n * @typedef Props\n * @prop {ListSortContextValue} value\n *\n * @param {Props}\n *\n * @see useListController\n * @see useListSortContext\n *\n * @example\n *\n * import { useListController, usePickSortContext, ListSortContext } from 'ra-core';\n *\n * const List = props => {\n * const controllerProps = useListController(props);\n * return (\n * <ListSortContext.Provider value={usePickSortContext(controllerProps)}>\n * ...\n * </ListSortContext.Provider>\n * );\n * };\n */\nexport const ListSortContext = createContext<ListSortContextValue | undefined>(\n undefined\n);\n\nexport type ListSortContextValue = Pick<\n ListControllerResult,\n 'sort' | 'setSort' | 'resource'\n>;\n\nexport const usePickSortContext = (\n context: ListControllerResult\n): ListSortContextValue =>\n useMemo(\n () => pick(context, ['sort', 'setSort', 'resource']),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [context.sort, context.setSort]\n );\n\nListSortContext.displayName = 'ListSortContext';\n", "import { createContext, useMemo } from 'react';\nimport pick from 'lodash/pick';\nimport { ListControllerResult } from './useListController';\n\n/**\n * Context to store the pagination part of the useListController() result.\n *\n * Use the useListPaginationContext() hook to read the pagination information.\n * That's what List components do in react-admin (e.g. <Pagination>).\n *\n * @typedef {Object} ListPaginationContextValue\n * @prop {boolean} isLoading boolean that is false until the data is available\n * @prop {integer} total the total number of results for the current filters, excluding pagination. Useful to build the pagination controls. e.g. 23\n * @prop {integer} page the current page. Starts at 1\n * @prop {Function} setPage a callback to change the page, e.g. setPage(3)\n * @prop {integer} perPage the number of results per page. Defaults to 25\n * @prop {Function} setPerPage a callback to change the number of results per page, e.g. setPerPage(25)\n * @prop {Boolean} hasPreviousPage true if the current page is not the first one\n * @prop {Boolean} hasNextPage true if the current page is not the last one\n\n * @prop {string} resource the resource name, deduced from the location. e.g. 'posts'\n *\n * @typedef Props\n * @prop {ListPaginationContextValue} value\n *\n * @param {Props}\n *\n * @see useListController\n * @see useListContext\n *\n * @example\n *\n * import { useListController, ListPaginationContext } from 'ra-core';\n *\n * const List = props => {\n * const controllerProps = useListController(props);\n * return (\n * <ListPaginationContext.Provider value={controllerProps}>\n * ...\n * </ListPaginationContext.Provider>\n * );\n * };\n */\nexport const ListPaginationContext = createContext<\n ListPaginationContextValue | undefined\n>(undefined);\n\nListPaginationContext.displayName = 'ListPaginationContext';\n\nexport type ListPaginationContextValue = Pick<\n ListControllerResult,\n | 'isLoading'\n | 'isPending'\n | 'hasPreviousPage'\n | 'hasNextPage'\n | 'page'\n | 'perPage'\n | 'setPage'\n | 'setPerPage'\n | 'total'\n | 'resource'\n>;\n\nexport const usePickPaginationContext = (\n context: ListControllerResult\n): ListPaginationContextValue =>\n useMemo(\n () =>\n pick(context, [\n 'isLoading',\n 'isPending',\n 'hasPreviousPage',\n 'hasNextPage',\n 'page',\n 'perPage',\n 'setPage',\n 'setPerPage',\n 'total',\n 'resource',\n ]),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n context.isLoading,\n context.isPending,\n context.hasPreviousPage,\n context.hasNextPage,\n context.page,\n context.perPage,\n context.setPage,\n context.setPerPage,\n context.total,\n ]\n );\n", "import { createContext } from 'react';\nimport { InfiniteListControllerResult } from './useInfiniteListController';\n\n/**\n * Context to store the pagination callbacks from the useInfiniteListController() result.\n *\n * Use the useInfinitePaginationContext() hook to read the pagination callbacks.\n *\n * @typedef {Object} InfinitePaginationContextValue\n * @prop {Function} fetchNextPage a callback to fetch the next page\n * @prop {Function} fetchPreviousPage a callback to fetch the previous page\n\n * @example\n *\n * import { useListController, ListPaginationContext } from 'ra-core';\n *\n * const List = props => {\n * const { fetchNextPage, fetchPreviousPage } = useInfiniteListController(props);\n * return (\n * <InfinitePaginationContext.Provider value={{ fetchNextPage, fetchPreviousPage }}>\n * ...\n * </InfinitePaginationContext.Provider>\n * );\n * };\n */\nexport const InfinitePaginationContext =\n createContext<InfinitePaginationContextValue>({\n hasNextPage: false,\n fetchNextPage: () => Promise.reject('not implemented'),\n isFetchingNextPage: false,\n hasPreviousPage: false,\n fetchPreviousPage: () => Promise.reject('not implemented'),\n isFetchingPreviousPage: false,\n });\n\nInfinitePaginationContext.displayName = 'InfinitePaginationContext';\n\nexport type InfinitePaginationContextValue = Pick<\n InfiniteListControllerResult,\n | 'fetchNextPage'\n | 'fetchPreviousPage'\n | 'isFetchingNextPage'\n | 'hasNextPage'\n | 'hasPreviousPage'\n | 'isFetchingPreviousPage'\n>;\n", "import * as React from 'react';\nimport { ReactNode } from 'react';\nimport { useListController, ListControllerProps } from './useListController';\nimport { OptionalResourceContextProvider } from '../../core';\nimport { RaRecord } from '../../types';\nimport { ListContextProvider } from './ListContextProvider';\nimport { useIsAuthPending } from '../../auth';\n\n/**\n * Call useListController and put the value in a ListContext\n *\n * Base class for <List> components, without UI.\n *\n * Accepts any props accepted by useListController:\n * - filter: permanent filter applied to the list\n * - filters: Filter element, to display the filters\n * - filterDefaultValues: object;\n * - perPage: Number of results per page\n * - sort: Default sort\n * - exporter: exported function\n *\n * @example // Custom list layout\n *\n * const PostList = () => (\n * <ListBase perPage={10}>\n * <div>\n * List metrics...\n * </div>\n * <Grid container>\n * <Grid item xs={8}>\n * <SimpleList primaryText={record => record.title} />\n * </Grid>\n * <Grid item xs={4}>\n * List instructions...\n * </Grid>\n * </Grid>\n * <div>\n * Post related links...\n * </div>\n * </ListBase>\n * );\n */\nexport const ListBase = <RecordType extends RaRecord = any>({\n children,\n loading = null,\n ...props\n}: ListBaseProps<RecordType>) => {\n const controllerProps = useListController<RecordType>(props);\n const isAuthPending = useIsAuthPending({\n resource: controllerProps.resource,\n action: 'list',\n });\n\n if (isAuthPending && !props.disableAuthentication) {\n return loading;\n }\n\n return (\n // We pass props.resource here as we don't need to create a new ResourceContext if the props is not provided\n <OptionalResourceContextProvider value={props.resource}>\n <ListContextProvider value={controllerProps}>\n {children}\n </ListContextProvider>\n </OptionalResourceContextProvider>\n );\n};\n\nexport interface ListBaseProps<RecordType extends RaRecord = any>\n extends ListControllerProps<RecordType> {\n children: ReactNode;\n loading?: ReactNode;\n}\n", "import { isValidElement, useEffect, useMemo } from 'react';\n\nimport { useAuthenticated, useRequireAccess } from '../../auth';\nimport { useTranslate } from '../../i18n';\nimport { useNotify } from '../../notification';\nimport {\n useGetList,\n UseGetListHookValue,\n UseGetListOptions,\n} from '../../dataProvider';\nimport { useResourceContext, useGetResourceLabel } from '../../core';\nimport { useRecordSelection } from './useRecordSelection';\nimport { useListParams } from './useListParams';\nimport { useSelectAll } from './useSelectAll';\nimport { defaultExporter } from '../../export';\nimport { SORT_ASC } from './queryReducer';\nimport type {\n FilterPayload,\n SortPayload,\n RaRecord,\n Exporter,\n} from '../../types';\nimport type {\n UseReferenceArrayFieldControllerParams,\n UseReferenceManyFieldControllerParams,\n} from '../field';\n\n/**\n * Prepare data for the List view\n *\n * @param {Object} props The props passed to the List component.\n *\n * @return {Object} controllerProps Fetched and computed data for the List view\n *\n * @example\n *\n * import { useListController } from 'react-admin';\n * import ListView from './ListView';\n *\n * const MyList = props => {\n * const controllerProps = useListController(props);\n * return <ListView {...controllerProps} {...props} />;\n * }\n */\nexport const useListController = <\n RecordType extends RaRecord = any,\n ErrorType = Error,\n>(\n props: ListControllerProps<RecordType, ErrorType> = {}\n): ListControllerResult<RecordType, ErrorType> => {\n const {\n debounce = 500,\n disableAuthentication = false,\n disableSyncWithLocation = false,\n exporter = defaultExporter,\n filter,\n filterDefaultValues,\n perPage = 10,\n queryOptions = {},\n sort = defaultSort,\n storeKey,\n } = props;\n const resource = useResourceContext(props);\n const { meta, ...otherQueryOptions } = queryOptions;\n\n if (!resource) {\n throw new Error(\n `useListController requires a non-empty resource prop or context`\n );\n }\n if (\n filter &&\n (isValidElement(filter) ||\n (Array.isArray(filter) && filter.some(isValidElement)))\n ) {\n throw new Error(\n 'useListController received a React element as `filter` props. If you intended to set the list filter elements, use the `filters` (with an s) prop instead. The `filter` prop is internal and should not be set by the developer.'\n );\n }\n\n const { isPending: isPendingAuthenticated } = useAuthenticated({\n enabled: !disableAuthentication,\n });\n\n const { isPending: isPendingCanAccess } = useRequireAccess<RecordType>({\n action: 'list',\n resource,\n // If disableAuthentication is true then isPendingAuthenticated will always be true so this hook is disabled\n enabled: !isPendingAuthenticated,\n });\n\n const translate = useTranslate();\n const notify = useNotify();\n\n const [query, queryModifiers] = useListParams({\n debounce,\n disableSyncWithLocation,\n filterDefaultValues,\n perPage,\n resource,\n sort,\n storeKey,\n });\n\n const [selectedIds, selectionModifiers] = useRecordSelection({\n resource,\n disableSyncWithStore: storeKey === false,\n });\n\n const {\n data,\n pageInfo,\n total,\n meta: responseMeta,\n error,\n isLoading,\n isFetching,\n isPending,\n refetch,\n isPaused,\n isPlaceholderData,\n } = useGetList<RecordType, ErrorType>(\n resource,\n {\n pagination: {\n page: query.page,\n perPage: query.perPage,\n },\n sort: { field: query.sort, order: query.order },\n filter: { ...query.filter, ...filter },\n meta,\n },\n {\n enabled:\n (!isPendingAuthenticated && !isPendingCanAccess) ||\n disableAuthentication,\n placeholderData: previousData => previousData,\n retry: false,\n onError: error =>\n notify(\n (error as Error)?.message || 'ra.notification.http_error',\n {\n type: 'error',\n messageArgs: {\n _: (error as Error)?.message,\n },\n }\n ),\n ...otherQueryOptions,\n }\n );\n useEffect(() => {\n if (isPaused && isPlaceholderData) {\n notify('ra.message.placeholder_data_warning', {\n type: 'warning',\n messageArgs: {\n _: 'Network issue: Data refresh failed.',\n },\n });\n }\n }, [isPaused, isPlaceholderData, notify]);\n\n // change page if there is no data\n useEffect(() => {\n if (\n query.page <= 0 ||\n (!isFetching &&\n query.page > 1 &&\n (data == null || data?.length === 0))\n ) {\n // Query for a page that doesn't exist, set page to 1\n queryModifiers.setPage(1);\n return;\n }\n if (total == null) {\n return;\n }\n const totalPages = Math.ceil(total / query.perPage) || 1;\n if (!isFetching && query.page > totalPages) {\n // Query for a page out of bounds, set page to the last existing page\n // It occurs when deleting the last element of the last page\n queryModifiers.setPage(totalPages);\n }\n }, [isFetching, query.page, query.perPage, data, queryModifiers, total]);\n\n const currentSort = useMemo(\n () => ({\n field: query.sort,\n order: query.order,\n }),\n [query.sort, query.order]\n );\n\n const getResourceLabel = useGetResourceLabel();\n const defaultTitle = translate('ra.page.list', {\n name: getResourceLabel(resource, 2),\n });\n\n const onSelectAll = useSelectAll({\n resource,\n sort: { field: query.sort, order: query.order },\n filter: { ...query.filter, ...filter },\n });\n\n return {\n sort: currentSort,\n data,\n meta: responseMeta,\n defaultTitle,\n displayedFilters: query.displayedFilters,\n error,\n exporter,\n filter,\n filterValues: query.filterValues,\n hideFilter: queryModifiers.hideFilter,\n isFetching,\n isLoading,\n isPending,\n onSelect: selectionModifiers.select,\n onSelectAll,\n onToggleItem: selectionModifiers.toggle,\n onUnselectItems: selectionModifiers.clearSelection,\n page: query.page,\n perPage: query.perPage,\n refetch,\n resource,\n selectedIds,\n setFilters: queryModifiers.setFilters,\n setPage: queryModifiers.setPage,\n setPerPage: queryModifiers.setPerPage,\n setSort: queryModifiers.setSort,\n showFilter: queryModifiers.showFilter,\n total,\n hasNextPage: pageInfo\n ? pageInfo.hasNextPage\n : total != null\n ? query.page * query.perPage < total\n : undefined,\n hasPreviousPage: pageInfo ? pageInfo.hasPreviousPage : query.page > 1,\n } as ListControllerResult<RecordType, ErrorType>;\n};\n\nexport interface ListControllerProps<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> {\n /**\n * The debounce delay for filter queries in milliseconds. Defaults to 500ms.\n *\n * @see https://marmelab.com/react-admin/List.html#debounce\n * @example\n * // wait 1 seconds instead of 500 milliseconds befoce calling the dataProvider\n * const PostList = () => (\n * <List debounce={1000}>\n * ...\n * </List>\n * );\n */\n debounce?: number;\n\n /**\n * Allow anonymous access to the list view. Defaults to false.\n *\n * @see https://marmelab.com/react-admin/List.html#disableauthentication\n * @example\n * import { List } from 'react-admin';\n *\n * const BoolkList = () => (\n * <List disableAuthentication>\n * ...\n * </List>\n * );\n */\n disableAuthentication?: boolean;\n\n /**\n * Whether to disable the synchronization of the list parameters with the current location (URL search parameters)\n *\n * @see https://marmelab.com/react-admin/List.html#disablesyncwithlocation\n * @example\n * const Dashboard = () => (\n * <div>\n * // ...\n * <ResourceContextProvider value=\"posts\">\n * <List disableSyncWithLocation>\n * <SimpleList\n * primaryText={record => record.title}\n * secondaryText={record => `${record.views} views`}\n * tertiaryText={record => new Date(record.published_at).toLocaleDateString()}\n * />\n * </List>\n * </ResourceContextProvider>\n * <ResourceContextProvider value=\"comments\">\n * <List disableSyncWithLocation>\n * <SimpleList\n * primaryText={record => record.title}\n * secondaryText={record => `${record.views} views`}\n * tertiaryText={record => new Date(record.published_at).toLocaleDateString()}\n * />\n * </List>\n * </ResourceContextProvider>\n * </div>\n * )\n */\n disableSyncWithLocation?: boolean;\n\n /**\n * The function called when a user exports the list\n *\n * @see https://marmelab.com/react-admin/List.html#exporter\n * @example\n * import { List, downloadCSV } from 'react-admin';\n * import jsonExport from 'jsonexport/dist';\n *\n * const exporter = posts => {\n * const postsForExport = posts.map(post => {\n * const { backLinks, author, ...postForExport } = post; // omit backLinks and author\n * postForExport.author_name = post.author.name; // add a field\n * return postForExport;\n * });\n * jsonExport(postsForExport, {\n * headers: ['id', 'title', 'author_name', 'body'] // order fields in the export\n * }, (err, csv) => {\n * downloadCSV(csv, 'posts'); // download as 'posts.csv` file\n * });\n * };\n *\n * const PostList = () => (\n * <List exporter={exporter}>\n * ...\n * </List>\n * )\n */\n exporter?: Exporter<RecordType> | false;\n\n /**\n * Permanent filter applied to all getList queries, regardless of the user selected filters.\n *\n * @see https://marmelab.com/react-admin/List.html#filter\n * @example\n * export const PostList = () => (\n * <List filter={{ is_published: true }}>\n * ...\n * </List>\n * );\n */\n filter?: FilterPayload;\n\n /**\n * The filter to apply when calling getList if the filter is empty.\n *\n * @see https://marmelab.com/react-admin/List.html#filterdefaultvalues\n * @example\n * const postFilters = [\n * <TextInput label=\"Search\" source=\"q\" alwaysOn />,\n * <BooleanInput source=\"is_published\" alwaysOn />,\n * <TextInput source=\"title\" defaultValue=\"Hello, World!\" />,\n * ];\n *\n * export const PostList = () => (\n * <List filters={postFilters} filterDefaultValues={{ is_published: true }}>\n * ...\n * </List>\n * );\n */\n filterDefaultValues?: object;\n\n /**\n * The number of results per page. Defaults to 10.\n *\n * @see https://marmelab.com/react-admin/List.html#perpage\n * @example\n * export const PostList = () => (\n * <List perPage={25}>\n * ...\n * </List>\n * );\n */\n perPage?: number;\n\n /**\n * The options passed to react-query's useQuery when calling getList.\n *\n * @see https://marmelab.com/react-admin/List.html#queryoptions\n * @example\n * import { useNotify, useRedirect, List } from 'react-admin';\n *\n * const PostList = () => {\n * const notify = useNotify();\n * const redirect = useRedirect();\n *\n * const onError = (error) => {\n * notify(`Could not load list: ${error.message}`, { type: 'error' });\n * redirect('/dashboard');\n * };\n *\n * return (\n * <List queryOptions={{ onError }}>\n * ...\n * </List>\n * );\n * }\n */\n queryOptions?: UseGetListOptions<RecordType, ErrorType>;\n\n /**\n * The resource name. Defaults to the resource from ResourceContext.\n *\n * @see https://marmelab.com/react-admin/List.html#resource\n * @example\n * import { List } from 'react-admin';\n *\n * const PostList = () => (\n * <List resource=\"posts\">\n * ...\n * </List>\n * );\n */\n resource?: string;\n\n /**\n * The default sort field and order. Defaults to { field: 'id', order: 'ASC' }.\n *\n * @see https://marmelab.com/react-admin/List.html#sort\n * @example\n * export const PostList = () => (\n * <List sort={{ field: 'published_at', order: 'DESC' }}>\n * ...\n * </List>\n * );\n */\n sort?: SortPayload;\n\n /**\n * The key to use to store the current filter & sort. Pass false to disable.\n *\n * @see https://marmelab.com/react-admin/List.html#storekey\n * @example\n * const NewerBooks = () => (\n * <List\n * resource=\"books\"\n * storeKey=\"newerBooks\"\n * sort={{ field: 'year', order: 'DESC' }}\n * >\n * ...\n * </List>\n * );\n */\n storeKey?: string | false;\n}\n\nconst defaultSort = {\n field: 'id',\n order: SORT_ASC,\n} as const;\n\nexport const injectedProps = [\n 'sort',\n 'data',\n 'defaultTitle',\n 'displayedFilters',\n 'error',\n 'exporter',\n 'filterValues',\n 'hasNextPage',\n 'hasPreviousPage',\n 'hideFilter',\n 'isFetching',\n 'isLoading',\n 'isPending',\n 'onSelect',\n 'onSelectAll',\n 'onToggleItem',\n 'onUnselectItems',\n 'page',\n 'perPage',\n 'refetch',\n 'refresh',\n 'resource',\n 'selectedIds',\n 'setFilters',\n 'setPage',\n 'setPerPage',\n 'setSort',\n 'showFilter',\n 'total',\n 'totalPages',\n];\n\n/**\n * Select the props injected by the useListController hook\n * to be passed to the List children need\n * This is an implementation of pick()\n */\nexport const getListControllerProps = props =>\n injectedProps.reduce((acc, key) => ({ ...acc, [key]: props[key] }), {});\n\n/**\n * Select the props not injected by the useListController hook\n * to be used inside the List children to sanitize props injected by List\n * This is an implementation of omit()\n */\nexport const sanitizeListRestProps = props =>\n Object.keys(props)\n .filter(propName => !injectedProps.includes(propName))\n .reduce((acc, key) => ({ ...acc, [key]: props[key] }), {});\n\nexport interface ListControllerBaseResult<RecordType extends RaRecord = any> {\n sort: SortPayload;\n defaultTitle?: string;\n displayedFilters: any;\n exporter?: Exporter | false;\n filter?: FilterPayload;\n filterValues: any;\n hideFilter: (filterName: string) => void;\n onSelect: (ids: RecordType['id'][]) => void;\n onSelectAll: (options?: {\n limit?: number;\n queryOptions?:\n | UseGetListOptions<RecordType>\n | UseReferenceArrayFieldControllerParams<RecordType>['queryOptions']\n | UseReferenceManyFieldControllerParams<RecordType>['queryOptions'];\n }) => void;\n onToggleItem: (id: RecordType['id']) => void;\n onUnselectItems: () => void;\n page: number;\n perPage: number;\n refetch: (() => void) | UseGetListHookValue<RecordType>['refetch'];\n resource: string;\n selectedIds: RecordType['id'][];\n setFilters: (\n filters: any,\n displayedFilters?: any,\n debounce?: boolean\n ) => void;\n setPage: (page: number) => void;\n setPerPage: (page: number) => void;\n setSort: (sort: SortPayload) => void;\n showFilter: (filterName: string, defaultValue: any) => void;\n hasNextPage?: boolean;\n hasPreviousPage?: boolean;\n isFetching?: boolean;\n isLoading?: boolean;\n}\n\nexport interface ListControllerLoadingResult<RecordType extends RaRecord = any>\n extends ListControllerBaseResult<RecordType> {\n data: undefined;\n total: undefined;\n meta: undefined;\n error: null;\n isPending: true;\n}\nexport interface ListControllerErrorResult<\n RecordType extends RaRecord = any,\n TError = Error,\n> extends ListControllerBaseResult<RecordType> {\n data: undefined;\n total: undefined;\n meta: undefined;\n error: TError;\n isPending: false;\n}\nexport interface ListControllerRefetchErrorResult<\n RecordType extends RaRecord = any,\n TError = Error,\n> extends ListControllerBaseResult<RecordType> {\n data: RecordType[];\n total: number;\n meta?: any;\n error: TError;\n isPending: false;\n}\nexport interface ListControllerSuccessResult<RecordType extends RaRecord = any>\n extends ListControllerBaseResult<RecordType> {\n data: RecordType[];\n total: number;\n meta?: any;\n error: null;\n isPending: false;\n}\n\nexport type ListControllerResult<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> =\n | ListControllerLoadingResult<RecordType>\n | ListControllerErrorResult<RecordType, ErrorType>\n | ListControllerRefetchErrorResult<RecordType, ErrorType>\n | ListControllerSuccessResult<RecordType>;\n", "import { ReactNode } from 'react';\nimport { RaRecord } from '../../types';\nimport {\n useListController,\n ListControllerProps,\n ListControllerResult,\n} from './useListController';\n\n/**\n * Render prop version of the useListController hook.\n *\n * @see useListController\n * @example\n *\n * const ListView = () => <div>...</div>;\n * const List = props => (\n * <ListController {...props}>\n * {controllerProps => <ListView {...controllerProps} {...props} />}\n * </ListController>\n * )\n */\nexport const ListController = <\n RecordType extends RaRecord = any,\n ErrorType = Error,\n>({\n children,\n ...props\n}: {\n children: (\n params: ListControllerResult<RecordType, ErrorType>\n ) => ReactNode;\n} & ListControllerProps<RecordType, ErrorType>) => {\n const controllerProps = useListController<RecordType, ErrorType>(props);\n return children(controllerProps);\n};\n", "import { useCallback } from 'react';\n\nimport { useStore } from '../../store';\nimport { Identifier } from '../../types';\n\n/**\n * State-like hook for controlling the expanded state of a list item\n *\n * @param {string} resource The resource name, e.g. 'posts'\n * @param {string|integer} id The record identifier, e.g. 123\n * @param {boolean} single Forces only one id to be expanded at a time\n * @returns {Object} Destructure as [expanded, toggleExpanded].\n *\n * @example\n *\n * const [expanded, toggleExpanded] = useExpanded('posts', 123);\n * const expandIcon = expanded ? ExpandLess : ExpandMore;\n * const onExpandClick = () => toggleExpanded();\n */\nexport const useExpanded = (\n resource: string,\n id: Identifier,\n single: boolean = false\n): [boolean, () => void] => {\n const [expandedIds, setExpandedIds] = useStore<Identifier[]>(\n `${resource}.datagrid.expanded`,\n []\n );\n const expanded = Array.isArray(expandedIds)\n ? // eslint-disable-next-line eqeqeq\n expandedIds.map(el => el == id).indexOf(true) !== -1\n : false;\n\n const toggleExpanded = useCallback(() => {\n setExpandedIds(ids => {\n if (!Array.isArray(ids)) {\n return [id];\n }\n const index = ids.findIndex(el => el == id); // eslint-disable-line eqeqeq\n return index > -1\n ? single\n ? []\n : [...ids.slice(0, index), ...ids.slice(index + 1)]\n : single\n ? [id]\n : [...ids, id];\n });\n }, [setExpandedIds, id, single]);\n\n return [expanded, toggleExpanded];\n};\n\n/**\n * State-like hook for controlling the expanded state of many list items\n * expanded state is true when at least one item from ids is expanded.\n *\n * @param {string} resource The resource name, e.g. 'posts'\n * @param {Identifier[]} ids A list of record identifiers\n * @returns {Object} Destructure as [expanded, toggleExpanded].\n *\n * @example\n *\n * const [expanded, toggleExpanded] = useExpandAll('posts', [123, 124, 125]);\n * const expandIcon = expanded ? ExpandLess : ExpandMore;\n * const onExpandClick = () => toggleExpanded();\n */\nexport const useExpandAll = (\n resource: string,\n ids: Identifier[]\n): [boolean, () => void] => {\n const [expandedIds, setExpandedIds] = useStore<Identifier[]>(\n `${resource}.datagrid.expanded`,\n []\n );\n\n const isExpanded = Array.isArray(expandedIds)\n ? // eslint-disable-next-line eqeqeq\n expandedIds.some(id => ids.some(id2 => id2 == id))\n : false;\n\n const toggleExpandedAll = useCallback(() => {\n const unaffectedExpandedIds = expandedIds.filter(\n // eslint-disable-next-line eqeqeq\n expanded_id => !ids.some(id => id == expanded_id)\n );\n setExpandedIds(\n isExpanded\n ? unaffectedExpandedIds\n : unaffectedExpandedIds.concat(ids)\n );\n }, [expandedIds, setExpandedIds, isExpanded, ids]);\n\n return [isExpanded, toggleExpandedAll];\n};\n", "import { useContext } from 'react';\n\nimport {\n InfinitePaginationContext,\n InfinitePaginationContextValue,\n} from './InfinitePaginationContext';\n\n/**\n * Hook to read the infinite pagination callbacks from the InfinitePaginationContext.\n *\n * Must be used within a <InfinitePaginationContext.Provider> (e.g. as a descendent of <InfiniteList>\n * or <InfiniteListBase>).\n *\n * @typedef {Object} InfinitePaginationContextValue\n * @prop {Function} fetchNextPage a callback to fetch the next page\n * @prop {Function} fetchPreviousPage a callback to fetch the previous page\n *\n * @returns {InfinitePaginationContextValue} infinite pagination callbacks\n *\n * @see useInfiniteListController for how the callbacks are built\n */\nexport const useInfinitePaginationContext =\n (): InfinitePaginationContextValue => useContext(InfinitePaginationContext);\n", "import { useCallback, useEffect, useRef, useState } from 'react';\nimport get from 'lodash/get';\nimport isEqual from 'lodash/isEqual';\n\nimport { removeEmpty } from '../../util';\nimport { FilterPayload, RaRecord, SortPayload } from '../../types';\nimport { useResourceContext } from '../../core';\nimport usePaginationState from '../usePaginationState';\nimport useSortState from '../useSortState';\nimport { useRecordSelection } from './useRecordSelection';\nimport { ListControllerResult } from './useListController';\nimport { flattenObject } from '../../dataProvider/fetch';\n\nconst refetch = () => {\n throw new Error(\n 'refetch is not available for a ListContext built from useList based on local data'\n );\n};\n\n/**\n * Handle filtering, sorting and pagination on local data.\n *\n * Returns the data and callbacks expected by <ListContext>.\n *\n * @example\n * const data = [\n * { id: 1, name: 'Arnold' },\n * { id: 2, name: 'Sylvester' },\n * { id: 3, name: 'Jean-Claude' },\n * ]\n *\n * const MyComponent = () => {\n * const listContext = useList({ data });\n * return (\n * <ListContextProvider value={listContext}>\n * <Datagrid>\n * <TextField source=\"id\" />\n * <TextField source=\"name\" />\n * </Datagrid>\n * </ListContextProvider>\n * );\n * };\n *\n * @param {UseListOptions} props\n * @param {RaRecord[]} props.data An array of records\n * @param {Boolean} props.isFetching: Optional. A boolean indicating whether the data is being loaded\n * @param {Boolean} props.isLoading: Optional. A boolean indicating whether the data has been loaded at least once\n * @param {Error | String} props.error: Optional. The error if any occurred while loading the data\n * @param {Object} props.filter: Optional. An object containing the filters applied on the data\n * @param {Number} props.page: Optional. The initial page index\n * @param {Number} props.perPage: Optional. The initial page size\n * @param {SortPayload} props.sort: Optional. The initial sort (field and order)\n * @param {filterCallback} prop.filterCallback Optional. A function that allows you to make a custom filter\n */\nexport const useList = <RecordType extends RaRecord = any, ErrorType = Error>(\n props: UseListOptions<RecordType, ErrorType>\n): UseListValue<RecordType, ErrorType> => {\n const {\n data,\n error,\n filter = defaultFilter,\n isFetching = false,\n isLoading = false,\n isPending = false,\n page: initialPage = 1,\n perPage: initialPerPage = 1000,\n sort: initialSort,\n filterCallback = (record: RecordType) => Boolean(record),\n } = props;\n const resource = useResourceContext(props);\n\n const [fetchingState, setFetchingState] = useState<boolean>(isFetching) as [\n boolean,\n (isFetching: boolean) => void,\n ];\n\n const [loadingState, setLoadingState] = useState<boolean>(isLoading) as [\n boolean,\n (isLoading: boolean) => void,\n ];\n\n const [pendingState, setPendingState] = useState<boolean>(isPending) as [\n boolean,\n (isPending: boolean) => void,\n ];\n\n const [finalItems, setFinalItems] = useState<{\n data?: RecordType[];\n total?: number;\n }>(() => ({\n data,\n total: data ? data.length : undefined,\n }));\n\n // pagination logic\n const { page, setPage, perPage, setPerPage } = usePaginationState({\n page: initialPage,\n perPage: initialPerPage,\n });\n\n // sort logic\n const { sort, setSort: setSortState } = useSortState(initialSort);\n const setSort = useCallback(\n (sort: SortPayload) => {\n setSortState(sort);\n setPage(1);\n },\n [setPage, setSortState]\n );\n\n // selection logic\n const [selectedIds, selectionModifiers] = useRecordSelection(\n resource\n ? {\n resource,\n }\n : { disableSyncWithStore: true }\n );\n\n // filter logic\n const filterRef = useRef(filter);\n const [displayedFilters, setDisplayedFilters] = useState<{\n [key: string]: boolean;\n }>({});\n const [filterValues, setFilterValues] = useState<{\n [key: string]: any;\n }>(filter);\n const hideFilter = useCallback(\n (filterName: string) => {\n setDisplayedFilters(previousState => {\n const { [filterName]: _, ...newState } = previousState;\n return newState;\n });\n setFilterValues(previousState => {\n const { [filterName]: _, ...newState } = previousState;\n return newState;\n });\n },\n [setDisplayedFilters, setFilterValues]\n );\n const showFilter = useCallback(\n (filterName: string, defaultValue: any) => {\n setDisplayedFilters(previousState => ({\n ...previousState,\n [filterName]: true,\n }));\n setFilterValues(previousState =>\n removeEmpty({\n ...previousState,\n [filterName]: defaultValue,\n })\n );\n },\n [setDisplayedFilters, setFilterValues]\n );\n const setFilters = useCallback(\n (filters, displayedFilters = undefined) => {\n setFilterValues(removeEmpty(filters));\n if (displayedFilters) {\n setDisplayedFilters(displayedFilters);\n }\n setPage(1);\n },\n [setDisplayedFilters, setFilterValues, setPage]\n );\n\n // handle filter prop change\n useEffect(() => {\n if (!isEqual(filter, filterRef.current)) {\n filterRef.current = filter;\n setFilterValues(filter);\n }\n }, [filter]);\n\n // We do all the data processing (filtering, sorting, paginating) client-side\n useEffect(\n () => {\n if (isPending || !data) return;\n let tempData = data;\n\n // 1. filter\n if (filterValues) {\n const flattenFilterValues = flattenObject(filterValues);\n tempData = data\n .filter(record =>\n Object.entries(flattenFilterValues).every(\n ([filterName, filterValue]) => {\n const recordValue = get(record, filterName);\n const result = Array.isArray(recordValue)\n ? Array.isArray(filterValue)\n ? recordValue.some(item =>\n filterValue.includes(item)\n )\n : recordValue.includes(filterValue)\n : Array.isArray(filterValue)\n ? filterValue.includes(recordValue)\n : filterName === 'q' // special full-text filter\n ? Object.keys(record).some(\n key =>\n typeof record[key] ===\n 'string' &&\n record[key]\n .toLowerCase()\n .includes(\n (\n filterValue as string\n ).toLowerCase()\n )\n )\n : filterValue == recordValue; // eslint-disable-line eqeqeq\n return result;\n }\n )\n )\n .filter(filterCallback);\n }\n const filteredLength = tempData.length;\n\n // 2. sort\n if (sort.field) {\n tempData = tempData.sort((a, b) => {\n if (get(a, sort.field) > get(b, sort.field)) {\n return sort.order === 'ASC' ? 1 : -1;\n }\n if (get(a, sort.field) < get(b, sort.field)) {\n return sort.order === 'ASC' ? -1 : 1;\n }\n return 0;\n });\n }\n\n // 3. paginate\n tempData = tempData.slice((page - 1) * perPage, page * perPage);\n\n setFinalItems({\n data: tempData,\n total: filteredLength,\n });\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(data),\n filterValues,\n isPending,\n page,\n perPage,\n setFinalItems,\n sort.field,\n sort.order,\n ]\n );\n\n useEffect(() => {\n if (isFetching !== fetchingState) {\n setFetchingState(isFetching);\n }\n }, [isFetching, fetchingState, setFetchingState]);\n\n useEffect(() => {\n if (isLoading !== loadingState) {\n setLoadingState(isLoading);\n }\n }, [isLoading, loadingState, setLoadingState]);\n\n useEffect(() => {\n if (isPending !== pendingState) {\n setPendingState(isPending);\n }\n }, [isPending, pendingState, setPendingState]);\n\n const onSelectAll = useCallback(() => {\n const allIds = data?.map(({ id }) => id) || [];\n selectionModifiers.select(allIds);\n }, [data, selectionModifiers]);\n\n return {\n sort,\n data: pendingState ? undefined : finalItems?.data ?? [],\n defaultTitle: '',\n error: error ?? null,\n displayedFilters,\n filterValues,\n hasNextPage:\n finalItems?.total == null\n ? false\n : page * perPage < finalItems.total,\n hasPreviousPage: page > 1,\n hideFilter,\n isFetching: fetchingState,\n isLoading: loadingState,\n isPending: pendingState,\n onSelect: selectionModifiers.select,\n onSelectAll,\n onToggleItem: selectionModifiers.toggle,\n onUnselectItems: selectionModifiers.clearSelection,\n page,\n perPage,\n resource: '',\n refetch,\n selectedIds,\n setFilters,\n setPage,\n setPerPage,\n setSort,\n showFilter,\n total: finalItems?.total,\n } as UseListValue<RecordType, ErrorType>;\n};\n\nexport interface UseListOptions<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> {\n data?: RecordType[];\n error?: ErrorType | null;\n filter?: FilterPayload;\n isFetching?: boolean;\n isLoading?: boolean;\n isPending?: boolean;\n page?: number;\n perPage?: number;\n sort?: SortPayload;\n resource?: string;\n filterCallback?: (record: RecordType) => boolean;\n}\n\nexport type UseListValue<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> = ListControllerResult<RecordType, ErrorType>;\n\nconst defaultFilter = {};\n", "import { useContext } from 'react';\n\nimport { ListContext } from './ListContext';\nimport { ListControllerResult } from './useListController';\nimport { RaRecord } from '../../types';\n\n/**\n * Hook to read the list controller props from the ListContext.\n *\n * Used within a <ListContextProvider> (e.g. as a descendent of <List>).\n *\n * @returns {ListControllerResult} list controller props\n *\n * @see useListController for how it is filled\n *\n * @example // custom list view\n *\n * import { useListContext } from 'react-admin';\n *\n * const MyList = () => {\n * const { data, isPending } = useListContext();\n * if (isPending) {\n * return <>Loading...</>;\n * }\n * return (\n * <ul>\n * {data.map(record => (\n * <li key={record.id}>{record.name}</li>\n * ))}\n * </ul>\n * );\n * }\n *\n * @example // custom pagination\n *\n * import { useListContext } from 'react-admin';\n * import { Button, Toolbar } from '@mui/material';\n * import ChevronLeft from '@mui/icons-material/ChevronLeft';\n * import ChevronRight from '@mui/icons-material/ChevronRight';\n *\n * const PrevNextPagination = () => {\n * const { page, perPage, total, setPage } = useListContext();\n * const nbPages = Math.ceil(total / perPage) || 1;\n * return (\n * nbPages > 1 &&\n * <Toolbar>\n * {page > 1 &&\n * <Button color=\"primary\" key=\"prev\" onClick={() => setPage(page - 1)}>\n * <ChevronLeft />\n * Prev\n * </Button>\n * }\n * {page !== nbPages &&\n * <Button color=\"primary\" key=\"next\" onClick={() => setPage(page + 1)}>\n * Next\n * <ChevronRight />\n * </Button>\n * }\n * </Toolbar>\n * );\n * }\n */\nexport const useListContext = <\n RecordType extends RaRecord = any,\n ErrorType = Error,\n>(): ListControllerResult<RecordType, ErrorType> => {\n const context = useContext(ListContext);\n if (!context) {\n throw new Error(\n 'useListContext must be used inside a ListContextProvider'\n );\n }\n return context as ListControllerResult<RecordType, ErrorType>;\n};\n", "import { useContext, useMemo } from 'react';\nimport defaults from 'lodash/defaults';\n\nimport { ListContext } from './ListContext';\nimport { ListControllerResult } from './useListController';\nimport { RaRecord } from '../../types';\n\n/**\n * Hook to read the list controller props from the ListContext.\n *\n * Mostly used within a <ListContext.Provider> (e.g. as a descendent of <List>\n * or <ListBase>).\n *\n * But you can also use it without a <ListContext.Provider>. In this case, it is up to you\n * to pass all the necessary props (see the list below).\n *\n * The given props will take precedence over context values.\n *\n * @typedef {Object} ListControllerProps\n * @prop {Object} data an array of the list records, e.g. [{ id: 123, title: 'hello world' }, { ... }]\n * @prop {integer} total the total number of results for the current filters, excluding pagination. Useful to build the pagination controls. e.g. 23\n * @prop {boolean} isFetching boolean that is true on mount, and false once the data was fetched\n * @prop {boolean} isLoading boolean that is false until the data is available\n * @prop {integer} page the current page. Starts at 1\n * @prop {Function} setPage a callback to change the page, e.g. setPage(3)\n * @prop {integer} perPage the number of results per page. Defaults to 25\n * @prop {Function} setPerPage a callback to change the number of results per page, e.g. setPerPage(25)\n * @prop {Object} sort a sort object { field, order }, e.g. { field: 'date', order: 'DESC' }\n * @prop {Function} setSort a callback to change the sort, e.g. setSort({ field : 'name', order: 'ASC' })\n * @prop {Object} filterValues a dictionary of filter values, e.g. { title: 'lorem', nationality: 'fr' }\n * @prop {Function} setFilters a callback to update the filters, e.g. setFilters(filters, displayedFilters)\n * @prop {Object} displayedFilters a dictionary of the displayed filters, e.g. { title: true, nationality: true }\n * @prop {Function} showFilter a callback to show one of the filters, e.g. showFilter('title', defaultValue)\n * @prop {Function} hideFilter a callback to hide one of the filters, e.g. hideFilter('title')\n * @prop {Array} selectedIds an array listing the ids of the selected rows, e.g. [123, 456]\n * @prop {Function} onSelect callback to change the list of selected rows, e.g. onSelect([456, 789])\n * @prop {Function} onSelectAll callback to select all the records, e.g. onSelectAll({ limit: 50, queryOptions: { meta: { foo: 'bar' } } })\n * @prop {Function} onToggleItem callback to toggle the selection of a given record based on its id, e.g. onToggleItem(456)\n * @prop {Function} onUnselectItems callback to clear the selection, e.g. onUnselectItems();\n * @prop {string} defaultTitle the translated title based on the resource, e.g. 'Posts'\n * @prop {string} resource the resource name, deduced from the location. e.g. 'posts'\n *\n * @param {ListControllerProps} props Props passed to the useListContext hook\n *\n * @returns {ListControllerResult} list controller props\n *\n * @see useListController for how it is filled\n */\nexport const useListContextWithProps = <RecordType extends RaRecord = any>(\n props?: any\n): Partial<ListControllerResult<RecordType>> => {\n const context = useContext(ListContext);\n // Props take precedence over the context\n return useMemo(\n () =>\n defaults(\n {},\n props != null ? extractListContextProps<RecordType>(props) : {},\n context\n ),\n [context, props]\n );\n};\n\n/**\n * Extract only the list controller props\n *\n * @param {Object} props Props passed to the useListContext hook\n *\n * @returns {ListControllerResult} List controller props\n */\nconst extractListContextProps = <RecordType extends RaRecord = any>({\n sort,\n data,\n defaultTitle,\n displayedFilters,\n exporter,\n filterValues,\n hasCreate,\n hideFilter,\n isFetching,\n isLoading,\n isPending,\n onSelect,\n onSelectAll,\n onToggleItem,\n onUnselectItems,\n page,\n perPage,\n refetch,\n resource,\n selectedIds,\n setFilters,\n setPage,\n setPerPage,\n setSort,\n showFilter,\n total,\n}: Partial<ListControllerResult<RecordType>> & Record<string, any>) => ({\n sort,\n data,\n defaultTitle,\n displayedFilters,\n exporter,\n filterValues,\n hasCreate,\n hideFilter,\n isFetching,\n isLoading,\n isPending,\n onSelect,\n onSelectAll,\n onToggleItem,\n onUnselectItems,\n page,\n perPage,\n refetch,\n resource,\n selectedIds,\n setFilters,\n setPage,\n setPerPage,\n setSort,\n showFilter,\n total,\n});\n", "import { useContext } from 'react';\n\nimport { ListFilterContext, ListFilterContextValue } from './ListFilterContext';\n\n/**\n * Hook to read the list props from the ListFilterContext.\n *\n * Must be used within a <ListFilterContextProvider>.\n *\n * @returns {ListFilterContextValue} list controller props\n *\n * @see useListController for how it is filled\n */\nexport const useListFilterContext = (): ListFilterContextValue => {\n const context = useContext(ListFilterContext);\n if (!context) {\n throw new Error(\n 'useListFilterContext must be used inside a ListFilterContextProvider'\n );\n }\n return context;\n};\n", "import { useContext } from 'react';\n\nimport {\n ListPaginationContext,\n ListPaginationContextValue,\n} from './ListPaginationContext';\n\n/**\n * Hook to read the list pagination controller props from the ListPaginationContext.\n *\n * Must be used within a <ListPaginationContext> (e.g. as a descendent of <List>\n * or <ListBase>).\n *\n * @returns {ListPaginationContextValue} list controller props\n *\n * @see useListController for how it is filled\n */\nexport const useListPaginationContext = (): ListPaginationContextValue => {\n const context = useContext(ListPaginationContext);\n if (!context) {\n throw new Error(\n 'useListPaginationContext must be used inside a ListPaginationContextProvider'\n );\n }\n return context;\n};\n", "import { useContext } from 'react';\n\nimport { ListSortContext, ListSortContextValue } from './ListSortContext';\n\n/**\n * Hook to read the list sort controller props from the ListSortContext.\n *\n * Must be used within a <ListSortContextProvider> (e.g. as a descendent of <List>\n * or <ListBase>).\n *\n * @returns {ListSortContextValue} list controller props\n *\n * @see useListController for how it is filled\n */\nexport const useListSortContext = (): ListSortContextValue => {\n const context = useContext(ListSortContext);\n if (!context) {\n throw new Error(\n 'useListSortContext must be used inside a ListSortContextProvider'\n );\n }\n return context;\n};\n", "import { useCallback } from 'react';\n\nimport { useRecordSelection } from './useRecordSelection';\nimport { Identifier } from '../../types';\n\n/**\n * Hook to Unselect the rows of a datagrid\n *\n * @example\n *\n * const unselect = useUnselect('posts');\n * unselect([123, 456]);\n */\nexport const useUnselect = (resource?: string) => {\n const [, { unselect }] = useRecordSelection(\n resource ? { resource } : { disableSyncWithStore: true }\n );\n return useCallback(\n (ids: Identifier[]) => {\n unselect(ids);\n },\n [unselect]\n );\n};\n", "import { useCallback } from 'react';\n\nimport { useRecordSelection } from './useRecordSelection';\n\n/**\n * Hook to unselect all row of a datagrid\n *\n * @example\n *\n * const unselectAll = useUnselectAll('posts');\n * unselectAll();\n */\nexport const useUnselectAll = (resource?: string) => {\n const [, { clearSelection }] = useRecordSelection(\n resource ? { resource } : { disableSyncWithStore: true }\n );\n return useCallback(() => {\n clearSelection();\n }, [clearSelection]);\n};\n", "import { ReactElement } from 'react';\nimport { RaRecord } from '../../types';\nimport { ListControllerResult } from './useListController';\nimport { useListContext } from './useListContext';\n\n/**\n * Render prop version of useListContext\n *\n * @example\n * const BookList = () => (\n * <List>\n * <WithListContext render={({ data }) => (\n * <ul>\n * {data && data.map(record => (\n * <li key={record.id}>{record.title}</li>\n * ))}\n * </ul>\n * )} />\n * </List>\n * );\n */\nexport const WithListContext = <RecordType extends RaRecord>({\n render,\n}: WithListContextProps<RecordType>) =>\n render(useListContext<RecordType>()) || null;\n\nexport interface WithListContextProps<RecordType extends RaRecord> {\n render: (\n context: ListControllerResult<RecordType>\n ) => ReactElement | false | null;\n label?: string;\n}\n", "import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useQueryClient, UseQueryOptions } from '@tanstack/react-query';\nimport get from 'lodash/get';\nimport isEqual from 'lodash/isEqual';\nimport lodashDebounce from 'lodash/debounce';\n\nimport { removeEmpty, useEvent } from '../../util';\nimport { useDataProvider, useGetManyReference } from '../../dataProvider';\nimport { useNotify } from '../../notification';\nimport { FilterPayload, Identifier, RaRecord, SortPayload } from '../../types';\nimport type { ListControllerResult, HandleSelectAllParams } from '../list';\nimport usePaginationState from '../usePaginationState';\nimport { useRecordSelection } from '../list/useRecordSelection';\nimport useSortState from '../useSortState';\nimport { useResourceContext } from '../../core';\n\n/**\n * Fetch reference records, and return them when available\n *\n * Uses dataProvider.getManyReference() internally.\n *\n * @example // fetch the comments related to the current post\n * const { isPending, data } = useReferenceManyFieldController({\n * reference: 'comments',\n * target: 'post_id',\n * record: { id: 123, title: 'hello, world' },\n * resource: 'posts',\n * });\n *\n * @param {Object} props\n * @param {string} props.reference The linked resource name. Required.\n * @param {string} props.target The target resource key. Required.\n * @param {Object} props.filter The filter applied on the recorded records list\n * @param {number} props.page the page number\n * @param {number} props.perPage the number of item per page\n * @param {Object} props.record The current resource record\n * @param {string} props.resource The current resource name\n * @param {Object} props.sort the sort to apply to the referenced records\n * @param {string} props.source The key of the linked resource identifier\n * @param {UseQuery Options} props.queryOptions `react-query` options`\n *\n * @returns {ListControllerResult} The reference many props\n */\nexport const useReferenceManyFieldController = <\n RecordType extends RaRecord = RaRecord,\n ReferenceRecordType extends RaRecord = RaRecord,\n ErrorType = Error,\n>(\n props: UseReferenceManyFieldControllerParams<\n RecordType,\n ReferenceRecordType,\n ErrorType\n >\n): ListControllerResult<ReferenceRecordType, ErrorType> => {\n const {\n debounce = 500,\n reference,\n record,\n target,\n filter = defaultFilter,\n source = 'id',\n page: initialPage,\n perPage: initialPerPage,\n sort: initialSort = { field: 'id', order: 'DESC' },\n queryOptions = {} as UseQueryOptions<\n { data: ReferenceRecordType[]; total: number },\n ErrorType\n >,\n } = props;\n const notify = useNotify();\n const resource = useResourceContext(props);\n const dataProvider = useDataProvider();\n const queryClient = useQueryClient();\n const storeKey = props.storeKey ?? `${resource}.${record?.id}.${reference}`;\n const { meta, ...otherQueryOptions } = queryOptions;\n\n // pagination logic\n const { page, setPage, perPage, setPerPage } = usePaginationState({\n page: initialPage,\n perPage: initialPerPage,\n });\n\n // sort logic\n const { sort, setSort: setSortState } = useSortState(initialSort);\n const setSort = useCallback(\n (sort: SortPayload) => {\n setSortState(sort);\n setPage(1);\n },\n [setPage, setSortState]\n );\n\n // selection logic\n const [selectedIds, selectionModifiers] = useRecordSelection({\n resource: storeKey,\n });\n\n // filter logic\n const filterRef = useRef(filter);\n const [displayedFilters, setDisplayedFilters] = useState<{\n [key: string]: boolean;\n }>({});\n const [filterValues, setFilterValues] = useState<{\n [key: string]: any;\n }>(filter);\n const hideFilter = useCallback(\n (filterName: string) => {\n setDisplayedFilters(previousState => {\n const { [filterName]: _, ...newState } = previousState;\n return newState;\n });\n setFilterValues(previousState => {\n const { [filterName]: _, ...newState } = previousState;\n return newState;\n });\n },\n [setDisplayedFilters, setFilterValues]\n );\n const showFilter = useCallback(\n (filterName: string, defaultValue: any) => {\n setDisplayedFilters(previousState => ({\n ...previousState,\n [filterName]: true,\n }));\n setFilterValues(previousState => ({\n ...previousState,\n [filterName]: defaultValue,\n }));\n },\n [setDisplayedFilters, setFilterValues]\n );\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const debouncedSetFilters = useCallback(\n lodashDebounce((filters, displayedFilters) => {\n setFilterValues(removeEmpty(filters));\n setDisplayedFilters(displayedFilters);\n setPage(1);\n }, debounce),\n [setDisplayedFilters, setFilterValues, setPage]\n );\n\n const setFilters = useCallback(\n (filters, displayedFilters, debounce = false) => {\n if (debounce) {\n debouncedSetFilters(filters, displayedFilters);\n } else {\n setFilterValues(removeEmpty(filters));\n setDisplayedFilters(displayedFilters);\n setPage(1);\n }\n },\n [setDisplayedFilters, setFilterValues, setPage, debouncedSetFilters]\n );\n // handle filter prop change\n useEffect(() => {\n if (!isEqual(filter, filterRef.current)) {\n filterRef.current = filter;\n setFilterValues(filter);\n }\n }, [filter]);\n\n const {\n data,\n total,\n meta: responseMeta,\n pageInfo,\n error,\n isFetching,\n isLoading,\n isPending,\n refetch,\n } = useGetManyReference<ReferenceRecordType, ErrorType>(\n reference,\n {\n target,\n id: get(record, source) as Identifier,\n pagination: { page, perPage },\n sort,\n filter: filterValues,\n meta,\n },\n {\n enabled: get(record, source) != null,\n placeholderData: previousData => previousData,\n onError: error =>\n notify(\n typeof error === 'string'\n ? error\n : (error as Error)?.message ||\n 'ra.notification.http_error',\n {\n type: 'error',\n messageArgs: {\n _:\n typeof error === 'string'\n ? error\n : (error as Error)?.message\n ? (error as Error).message\n : undefined,\n },\n }\n ),\n ...otherQueryOptions,\n }\n );\n\n const onSelectAll = useEvent(\n async ({\n limit = 250,\n queryOptions = {},\n }: HandleSelectAllParams = {}) => {\n const { meta, onSuccess, onError } = queryOptions;\n try {\n const results = await queryClient.fetchQuery({\n queryKey: [\n resource,\n 'getManyReference',\n {\n target,\n id: get(record, source) as Identifier,\n pagination: { page: 1, perPage: limit },\n sort,\n filter,\n meta,\n },\n ],\n queryFn: () =>\n dataProvider.getManyReference(reference, {\n target,\n id: get(record, source) as Identifier,\n pagination: { page: 1, perPage: limit },\n sort,\n filter,\n meta,\n }),\n });\n\n const allIds = results.data?.map(({ id }) => id) || [];\n selectionModifiers.select(allIds);\n if (allIds.length === limit) {\n notify('ra.message.select_all_limit_reached', {\n messageArgs: { max: limit },\n type: 'warning',\n });\n }\n\n if (onSuccess) {\n onSuccess(results);\n }\n\n return results.data;\n } catch (error) {\n if (onError) {\n onError(error);\n }\n notify('ra.notification.http_error', { type: 'warning' });\n }\n }\n );\n\n return {\n sort,\n data,\n meta: responseMeta,\n defaultTitle: undefined,\n displayedFilters,\n error,\n filterValues,\n hideFilter,\n isFetching,\n isLoading,\n isPending,\n onSelect: selectionModifiers.select,\n onSelectAll,\n onToggleItem: selectionModifiers.toggle,\n onUnselectItems: selectionModifiers.clearSelection,\n page,\n perPage,\n refetch,\n resource: reference,\n selectedIds,\n setFilters,\n setPage,\n setPerPage,\n hasNextPage: pageInfo\n ? pageInfo.hasNextPage\n : total != null\n ? page * perPage < total\n : undefined,\n hasPreviousPage: pageInfo ? pageInfo.hasPreviousPage : page > 1,\n setSort,\n showFilter,\n total,\n } as ListControllerResult<ReferenceRecordType, ErrorType>;\n};\n\nexport interface UseReferenceManyFieldControllerParams<\n RecordType extends Record<string, any> = Record<string, any>,\n ReferenceRecordType extends Record<string, any> = Record<string, any>,\n ErrorType = Error,\n> {\n debounce?: number;\n filter?: FilterPayload;\n page?: number;\n perPage?: number;\n record?: RecordType;\n reference: string;\n resource?: string;\n sort?: SortPayload;\n source?: string;\n storeKey?: string;\n target: string;\n queryOptions?: Omit<\n UseQueryOptions<\n { data: ReferenceRecordType[]; total: number },\n ErrorType\n >,\n 'queryKey' | 'queryFn'\n >;\n}\n\nconst defaultFilter = {};\n", "import get from 'lodash/get';\nimport { UseQueryOptions } from '@tanstack/react-query';\n\nimport { useGetManyReference } from '../../dataProvider';\nimport { useNotify } from '../../notification';\nimport { RaRecord, SortPayload } from '../../types';\nimport { UseReferenceResult } from '../useReference';\n\nexport interface UseReferenceOneFieldControllerParams<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> {\n record?: RaRecord;\n reference: string;\n source?: string;\n target: string;\n sort?: SortPayload;\n filter?: any;\n queryOptions?: Omit<\n UseQueryOptions<\n {\n data: RecordType[];\n total: number;\n },\n ErrorType\n >,\n 'queryFn' | 'queryKey'\n > & { meta?: any };\n}\n\n/**\n * Fetch a reference record in a one-to-one relationship, and return it when available\n *\n * The reference prop should be the name of one of the <Resource> components\n * added as <Admin> child.\n *\n * @example\n *\n * const { data, isPending, error } = useReferenceOneFieldController({\n * record: { id: 7, name: 'James Joyce'}\n * reference: 'bios',\n * target: 'author_id',\n * });\n *\n * @typedef {Object} UseReferenceOneFieldControllerParams\n * @prop {Object} props.record The current resource record\n * @prop {string} props.reference The linked resource name\n * @prop {string} props.target The target resource key\n * @prop {string} props.source The key current record identifier ('id' by default)\n * @prop {Object} props.sort The sort to apply to the referenced records\n * @prop {Object} props.filter The filter to apply to the referenced records\n * @returns {UseReferenceResult} The request state. Destructure as { referenceRecord, isPending, error }.\n */\nexport const useReferenceOneFieldController = <\n RecordType extends RaRecord = any,\n ErrorType = Error,\n>(\n props: UseReferenceOneFieldControllerParams<RecordType, ErrorType>\n): UseReferenceResult<RecordType, ErrorType> => {\n const {\n reference,\n record,\n target,\n source = 'id',\n sort = { field: 'id', order: 'ASC' },\n filter = {},\n queryOptions = {},\n } = props;\n const notify = useNotify();\n const { meta, ...otherQueryOptions } = queryOptions;\n\n const { data, error, isFetching, isLoading, isPending, refetch } =\n useGetManyReference<RecordType, ErrorType>(\n reference,\n {\n target,\n id: get(record, source),\n pagination: { page: 1, perPage: 1 },\n sort,\n filter,\n meta,\n },\n {\n enabled: !!record,\n onError: error =>\n notify(\n typeof error === 'string'\n ? error\n : (error as Error).message ||\n 'ra.notification.http_error',\n {\n type: 'error',\n messageArgs: {\n _:\n typeof error === 'string'\n ? error\n : (error as Error)?.message\n ? (error as Error).message\n : undefined,\n },\n }\n ),\n ...otherQueryOptions,\n }\n );\n\n return {\n referenceRecord: data ? data[0] : undefined,\n error,\n isFetching,\n isLoading,\n isPending,\n refetch,\n };\n};\n", "import { RaRecord, Translate } from '../../types';\nimport { MatchingReferencesError } from './types';\nimport { ControllerRenderProps } from 'react-hook-form';\n\ninterface GetStatusForInputParams<RecordType extends RaRecord = RaRecord> {\n field: Pick<ControllerRenderProps, 'value'>;\n matchingReferences: RecordType[] | MatchingReferencesError;\n referenceRecord: RecordType;\n translate: Translate;\n}\n\nconst isMatchingReferencesError = (\n matchingReferences?: any\n): matchingReferences is MatchingReferencesError =>\n matchingReferences && matchingReferences.error !== undefined;\n\nexport const getStatusForInput = <RecordType extends RaRecord = RaRecord>({\n field,\n matchingReferences,\n referenceRecord,\n translate = x => x,\n}: GetStatusForInputParams<RecordType>) => {\n const matchingReferencesError = isMatchingReferencesError(\n matchingReferences\n )\n ? translate(matchingReferences.error, {\n _: matchingReferences.error,\n })\n : null;\n const selectedReferenceError =\n field.value && !referenceRecord\n ? translate('ra.input.references.single_missing', {\n _: 'ra.input.references.single_missing',\n })\n : null;\n\n return {\n waiting:\n (field.value && selectedReferenceError && !matchingReferences) ||\n (!field.value && !matchingReferences),\n error:\n (field.value &&\n selectedReferenceError &&\n matchingReferencesError) ||\n (!field.value && matchingReferencesError)\n ? field.value\n ? selectedReferenceError\n : matchingReferencesError\n : null,\n warning: selectedReferenceError || matchingReferencesError,\n choices: Array.isArray(matchingReferences)\n ? matchingReferences\n : [referenceRecord].filter(choice => choice),\n };\n};\n\nexport const REFERENCES_STATUS_READY = 'REFERENCES_STATUS_READY';\nexport const REFERENCES_STATUS_INCOMPLETE = 'REFERENCES_STATUS_INCOMPLETE';\nexport const REFERENCES_STATUS_EMPTY = 'REFERENCES_STATUS_EMPTY';\n\nexport const getSelectedReferencesStatus = <RecordType extends RaRecord = any>(\n field: Pick<ControllerRenderProps, 'value'>,\n referenceRecords: RecordType[]\n) =>\n !field.value || field.value.length === referenceRecords.length\n ? REFERENCES_STATUS_READY\n : referenceRecords.length > 0\n ? REFERENCES_STATUS_INCOMPLETE\n : REFERENCES_STATUS_EMPTY;\n\ninterface GetStatusForArrayInputParams<RecordType extends RaRecord = any> {\n field: ControllerRenderProps;\n matchingReferences: RecordType[] | MatchingReferencesError;\n referenceRecords: RecordType[];\n translate: Translate;\n}\n\nexport const getStatusForArrayInput = <RecordType extends RaRecord = any>({\n field,\n matchingReferences,\n referenceRecords,\n translate = x => x,\n}: GetStatusForArrayInputParams<RecordType>) => {\n // selectedReferencesDataStatus can be \"empty\" (no data was found for references from input.value)\n // or \"incomplete\" (Not all of the reference data was found)\n // or \"ready\" (all references data was found or there is no references from input.value)\n const selectedReferencesDataStatus = getSelectedReferencesStatus(\n field,\n referenceRecords\n );\n\n const matchingReferencesError = isMatchingReferencesError(\n matchingReferences\n )\n ? translate(matchingReferences.error, {\n _: matchingReferences.error,\n })\n : null;\n\n const choices = Array.isArray(matchingReferences)\n ? referenceRecords.concat(\n matchingReferences.filter(\n choice =>\n referenceRecords.findIndex(c => c.id === choice.id) === -1\n )\n )\n : referenceRecords;\n\n return {\n waiting:\n (!matchingReferences &&\n field.value &&\n selectedReferencesDataStatus === REFERENCES_STATUS_EMPTY) ||\n (!matchingReferences && !field.value),\n error:\n matchingReferencesError &&\n (!field.value ||\n (field.value &&\n selectedReferencesDataStatus === REFERENCES_STATUS_EMPTY))\n ? translate('ra.input.references.all_missing', {\n _: 'ra.input.references.all_missing',\n })\n : null,\n warning:\n matchingReferencesError ||\n (field.value &&\n selectedReferencesDataStatus !== REFERENCES_STATUS_READY)\n ? matchingReferencesError ||\n translate('ra.input.references.many_missing', {\n _: 'ra.input.references.many_missing',\n })\n : null,\n choices,\n };\n};\n", "import { useCallback, useMemo } from 'react';\nimport { useFormContext, useWatch } from 'react-hook-form';\nimport type { UseQueryOptions } from '@tanstack/react-query';\n\nimport { useGetList, useGetManyAggregate } from '../../dataProvider';\nimport { useReferenceParams } from './useReferenceParams';\nimport { useWrappedSource } from '../../core';\nimport type { FilterPayload, RaRecord, SortPayload } from '../../types';\nimport type { ChoicesContextValue } from '../../form';\n\n/**\n * Prepare data for the ReferenceArrayInput components\n *\n * @example\n *\n * const { allChoices, availableChoices, selectedChoices, error, isFetching, isLoading, isPending } = useReferenceArrayInputController({\n * record: { referenceIds: ['id1', 'id2']};\n * reference: 'reference';\n * resource: 'resource';\n * source: 'referenceIds';\n * });\n *\n * @param {Object} props\n * @param {Object} props.record The current resource record\n * @param {string} props.reference The linked resource name\n * @param {string} props.resource The current resource name\n * @param {string} props.source The key of the linked resource identifier\n *\n * @param {Props} props\n *\n * @return {Object} controllerProps Fetched data and callbacks for the ReferenceArrayInput components\n */\nexport const useReferenceArrayInputController = <\n RecordType extends RaRecord = any,\n>(\n props: UseReferenceArrayInputParams<RecordType>\n): ChoicesContextValue<RecordType> => {\n const {\n debounce,\n enableGetChoices,\n filter,\n page: initialPage = 1,\n perPage: initialPerPage = 25,\n sort: initialSort = { field: 'id', order: 'DESC' },\n queryOptions = {},\n reference,\n source,\n } = props;\n const { getValues } = useFormContext();\n const finalSource = useWrappedSource(source);\n // When we change the defaultValue of the child input using react-hook-form resetField function,\n // useWatch does not seem to get the new value. We fallback to getValues to get it.\n const value = useWatch({ name: finalSource }) ?? getValues(finalSource);\n const { meta, ...otherQueryOptions } = queryOptions;\n\n /**\n * Get the records related to the current value (with getMany)\n */\n const {\n data: referenceRecords,\n error: errorGetMany,\n isLoading: isLoadingGetMany,\n isFetching: isFetchingGetMany,\n isPending: isPendingGetMany,\n refetch: refetchGetMany,\n } = useGetManyAggregate<RecordType>(\n reference,\n {\n ids: value || EmptyArray,\n meta,\n },\n {\n enabled: value != null && value.length > 0,\n }\n );\n\n const [params, paramsModifiers] = useReferenceParams({\n resource: reference,\n page: initialPage,\n perPage: initialPerPage,\n sort: initialSort,\n debounce,\n filter,\n });\n\n // filter out not found references - happens when the dataProvider doesn't guarantee referential integrity\n const finalReferenceRecords = referenceRecords\n ? referenceRecords.filter(Boolean)\n : [];\n\n const isGetMatchingEnabled = enableGetChoices\n ? enableGetChoices(params.filterValues)\n : true;\n\n const {\n data: matchingReferences,\n total,\n pageInfo,\n error: errorGetList,\n isLoading: isLoadingGetList,\n isFetching: isFetchingGetList,\n isPending: isPendingGetList,\n refetch: refetchGetMatching,\n } = useGetList<RecordType>(\n reference,\n {\n pagination: {\n page: params.page,\n perPage: params.perPage,\n },\n sort: { field: params.sort, order: params.order },\n filter: { ...params.filter, ...filter },\n meta,\n },\n {\n retry: false,\n enabled: isGetMatchingEnabled,\n placeholderData: previousData => previousData,\n ...otherQueryOptions,\n }\n );\n\n // We merge the currently selected records with the matching ones, otherwise\n // the component displaying the currently selected records may fail\n const finalMatchingReferences =\n matchingReferences && matchingReferences.length > 0\n ? mergeReferences(matchingReferences, finalReferenceRecords)\n : finalReferenceRecords.length > 0\n ? finalReferenceRecords\n : matchingReferences;\n\n const refetch = useCallback(() => {\n refetchGetMany();\n refetchGetMatching();\n }, [refetchGetMany, refetchGetMatching]);\n\n const currentSort = useMemo(\n () => ({\n field: params.sort,\n order: params.order,\n }),\n [params.sort, params.order]\n );\n return {\n sort: currentSort,\n allChoices: finalMatchingReferences,\n availableChoices: matchingReferences,\n selectedChoices: finalReferenceRecords,\n displayedFilters: params.displayedFilters,\n error: errorGetMany || errorGetList,\n filter,\n filterValues: params.filterValues,\n hideFilter: paramsModifiers.hideFilter,\n isFetching: isFetchingGetMany || isFetchingGetList,\n isLoading: isLoadingGetMany || isLoadingGetList,\n isPending: isPendingGetMany || isPendingGetList,\n page: params.page,\n perPage: params.perPage,\n refetch,\n resource: reference,\n setFilters: paramsModifiers.setFilters,\n setPage: paramsModifiers.setPage,\n setPerPage: paramsModifiers.setPerPage,\n setSort: paramsModifiers.setSort,\n showFilter: paramsModifiers.showFilter,\n // we return source and not finalSource because child inputs (e.g. AutocompleteArrayInput) already call useInput and compute the final source\n source,\n total: total,\n hasNextPage: pageInfo\n ? pageInfo.hasNextPage\n : total != null\n ? params.page * params.perPage < total\n : undefined,\n hasPreviousPage: pageInfo ? pageInfo.hasPreviousPage : params.page > 1,\n isFromReference: true,\n } as ChoicesContextValue<RecordType>;\n};\n\nconst EmptyArray = [];\n\n// concatenate and deduplicate two lists of records\nconst mergeReferences = <RecordType extends RaRecord = any>(\n ref1: RecordType[],\n ref2: RecordType[]\n): RecordType[] => {\n const res = [...ref1];\n const ids = ref1.map(ref => ref.id);\n ref2.forEach(ref => {\n if (!ids.includes(ref.id)) {\n ids.push(ref.id);\n res.push(ref);\n }\n });\n return res;\n};\n\nexport interface UseReferenceArrayInputParams<\n RecordType extends RaRecord = any,\n> {\n debounce?: number;\n filter?: FilterPayload;\n queryOptions?: Omit<\n UseQueryOptions<{\n data: RecordType[];\n total?: number;\n pageInfo?: {\n hasNextPage?: boolean;\n hasPreviousPage?: boolean;\n };\n }>,\n 'queryFn' | 'queryKey'\n > & { meta?: any };\n page?: number;\n perPage?: number;\n record?: RecordType;\n reference: string;\n resource?: string;\n sort?: SortPayload;\n source: string;\n enableGetChoices?: (filters: any) => boolean;\n}\n", "import { FieldElement } from '../types';\n\nexport default (element: FieldElement): element is HTMLInputElement =>\n element.type === 'checkbox';\n", "export default (value: unknown): value is Date => value instanceof Date;\n", "export default (value: unknown): value is null | undefined => value == null;\n", "import isDateObject from './isDateObject';\nimport isNullOrUndefined from './isNullOrUndefined';\n\nexport const isObjectType = (value: unknown): value is object =>\n typeof value === 'object';\n\nexport default <T extends object>(value: unknown): value is T =>\n !isNullOrUndefined(value) &&\n !Array.isArray(value) &&\n isObjectType(value) &&\n !isDateObject(value);\n", "import isCheckBoxInput from '../utils/isCheckBoxInput';\nimport isObject from '../utils/isObject';\n\ntype Event = { target: any };\n\nexport default (event: unknown) =>\n isObject(event) && (event as Event).target\n ? isCheckBoxInput((event as Event).target)\n ? (event as Event).target.checked\n : (event as Event).target.value\n : event;\n", "export default (name: string) =>\n name.substring(0, name.search(/\\.\\d+(\\.|$)/)) || name;\n", "import { InternalFieldName } from '../types';\n\nimport getNodeParentName from './getNodeParentName';\n\nexport default (names: Set<InternalFieldName>, name: InternalFieldName) =>\n names.has(getNodeParentName(name));\n", "import isObject from './isObject';\n\nexport default (tempObject: object) => {\n const prototypeCopy =\n tempObject.constructor && tempObject.constructor.prototype;\n\n return (\n isObject(prototypeCopy) && prototypeCopy.hasOwnProperty('isPrototypeOf')\n );\n};\n", "export default typeof window !== 'undefined' &&\n typeof window.HTMLElement !== 'undefined' &&\n typeof document !== 'undefined';\n", "import isObject from './isObject';\nimport isPlainObject from './isPlainObject';\nimport isWeb from './isWeb';\n\nexport default function cloneObject<T>(data: T): T {\n let copy: any;\n const isArray = Array.isArray(data);\n const isFileListInstance =\n typeof FileList !== 'undefined' ? data instanceof FileList : false;\n\n if (data instanceof Date) {\n copy = new Date(data);\n } else if (data instanceof Set) {\n copy = new Set(data);\n } else if (\n !(isWeb && (data instanceof Blob || isFileListInstance)) &&\n (isArray || isObject(data))\n ) {\n copy = isArray ? [] : {};\n\n if (!isArray && !isPlainObject(data)) {\n copy = data;\n } else {\n for (const key in data) {\n if (data.hasOwnProperty(key)) {\n copy[key] = cloneObject(data[key]);\n }\n }\n }\n } else {\n return data;\n }\n\n return copy;\n}\n", "export default <TValue>(value: TValue[]) =>\n Array.isArray(value) ? value.filter(Boolean) : [];\n", "export default (val: unknown): val is undefined => val === undefined;\n", "import compact from './compact';\nimport isNullOrUndefined from './isNullOrUndefined';\nimport isObject from './isObject';\nimport isUndefined from './isUndefined';\n\nexport default <T>(\n object: T,\n path?: string | null,\n defaultValue?: unknown,\n): any => {\n if (!path || !isObject(object)) {\n return defaultValue;\n }\n\n const result = compact(path.split(/[,[\\].]+?/)).reduce(\n (result, key) =>\n isNullOrUndefined(result) ? result : result[key as keyof {}],\n object,\n );\n\n return isUndefined(result) || result === object\n ? isUndefined(object[path as keyof T])\n ? defaultValue\n : object[path as keyof T]\n : result;\n};\n", "export default (value: unknown): value is boolean => typeof value === 'boolean';\n", "export default (value: string) => /^\\w*$/.test(value);\n", "import compact from './compact';\n\nexport default (input: string): string[] =>\n compact(input.replace(/[\"|']|\\]/g, '').split(/\\.|\\[/));\n", "import { FieldPath, FieldValues } from '../types';\n\nimport isKey from './isKey';\nimport isObject from './isObject';\nimport stringToPath from './stringToPath';\n\nexport default (\n object: FieldValues,\n path: FieldPath<FieldValues>,\n value?: unknown,\n) => {\n let index = -1;\n const tempPath = isKey(path) ? [path] : stringToPath(path);\n const length = tempPath.length;\n const lastIndex = length - 1;\n\n while (++index < length) {\n const key = tempPath[index];\n let newValue = value;\n\n if (index !== lastIndex) {\n const objValue = object[key];\n newValue =\n isObject(objValue) || Array.isArray(objValue)\n ? objValue\n : !isNaN(+tempPath[index + 1])\n ? []\n : {};\n }\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return;\n }\n\n object[key] = newValue;\n object = object[key];\n }\n return object;\n};\n", "export const EVENTS = {\n BLUR: 'blur',\n FOCUS_OUT: 'focusout',\n CHANGE: 'change',\n} as const;\n\nexport const VALIDATION_MODE = {\n onBlur: 'onBlur',\n onChange: 'onChange',\n onSubmit: 'onSubmit',\n onTouched: 'onTouched',\n all: 'all',\n} as const;\n\nexport const INPUT_VALIDATION_RULES = {\n max: 'max',\n min: 'min',\n maxLength: 'maxLength',\n minLength: 'minLength',\n pattern: 'pattern',\n required: 'required',\n validate: 'validate',\n} as const;\n", "import React from 'react';\n\nimport { FieldValues, FormProviderProps, UseFormReturn } from './types';\n\nconst HookFormContext = React.createContext<UseFormReturn | null>(null);\n\n/**\n * This custom hook allows you to access the form context. useFormContext is intended to be used in deeply nested structures, where it would become inconvenient to pass the context as a prop. To be used with {@link FormProvider}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @returns return all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n * const methods = useForm();\n * const onSubmit = data => console.log(data);\n *\n * return (\n * <FormProvider {...methods} >\n * <form onSubmit={methods.handleSubmit(onSubmit)}>\n * <NestedInput />\n * <input type=\"submit\" />\n * </form>\n * </FormProvider>\n * );\n * }\n *\n * function NestedInput() {\n * const { register } = useFormContext(); // retrieve all hook methods\n * return <input {...register(\"test\")} />;\n * }\n * ```\n */\nexport const useFormContext = <\n TFieldValues extends FieldValues,\n TContext = any,\n TransformedValues extends FieldValues | undefined = undefined,\n>(): UseFormReturn<TFieldValues, TContext, TransformedValues> =>\n React.useContext(HookFormContext) as UseFormReturn<\n TFieldValues,\n TContext,\n TransformedValues\n >;\n\n/**\n * A provider component that propagates the `useForm` methods to all children components via [React Context](https://reactjs.org/docs/context.html) API. To be used with {@link useFormContext}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @param props - all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n * const methods = useForm();\n * const onSubmit = data => console.log(data);\n *\n * return (\n * <FormProvider {...methods} >\n * <form onSubmit={methods.handleSubmit(onSubmit)}>\n * <NestedInput />\n * <input type=\"submit\" />\n * </form>\n * </FormProvider>\n * );\n * }\n *\n * function NestedInput() {\n * const { register } = useFormContext(); // retrieve all hook methods\n * return <input {...register(\"test\")} />;\n * }\n * ```\n */\nexport const FormProvider = <\n TFieldValues extends FieldValues,\n TContext = any,\n TTransformedValues extends FieldValues | undefined = undefined,\n>(\n props: FormProviderProps<TFieldValues, TContext, TTransformedValues>,\n) => {\n const { children, ...data } = props;\n return (\n <HookFormContext.Provider value={data as unknown as UseFormReturn}>\n {children}\n </HookFormContext.Provider>\n );\n};\n", "import { VALIDATION_MODE } from '../constants';\nimport { Control, FieldValues, FormState, ReadFormState } from '../types';\n\nexport default <TFieldValues extends FieldValues, TContext = any>(\n formState: FormState<TFieldValues>,\n control: Control<TFieldValues, TContext>,\n localProxyFormState?: ReadFormState,\n isRoot = true,\n) => {\n const result = {\n defaultValues: control._defaultValues,\n } as typeof formState;\n\n for (const key in formState) {\n Object.defineProperty(result, key, {\n get: () => {\n const _key = key as keyof FormState<TFieldValues> & keyof ReadFormState;\n\n if (control._proxyFormState[_key] !== VALIDATION_MODE.all) {\n control._proxyFormState[_key] = !isRoot || VALIDATION_MODE.all;\n }\n\n localProxyFormState && (localProxyFormState[_key] = true);\n return formState[_key];\n },\n });\n }\n\n return result;\n};\n", "import { EmptyObject } from '../types';\n\nimport isObject from './isObject';\n\nexport default (value: unknown): value is EmptyObject =>\n isObject(value) && !Object.keys(value).length;\n", "import { VALIDATION_MODE } from '../constants';\nimport {\n Control,\n FieldValues,\n FormState,\n InternalFieldName,\n ReadFormState,\n} from '../types';\nimport isEmptyObject from '../utils/isEmptyObject';\n\nexport default <T extends FieldValues, K extends ReadFormState>(\n formStateData: Partial<FormState<T>> & { name?: InternalFieldName },\n _proxyFormState: K,\n updateFormState: Control<T>['_updateFormState'],\n isRoot?: boolean,\n) => {\n updateFormState(formStateData);\n const { name, ...formState } = formStateData;\n\n return (\n isEmptyObject(formState) ||\n Object.keys(formState).length >= Object.keys(_proxyFormState).length ||\n Object.keys(formState).find(\n (key) =>\n _proxyFormState[key as keyof ReadFormState] ===\n (!isRoot || VALIDATION_MODE.all),\n )\n );\n};\n", "export default <T>(value: T) => (Array.isArray(value) ? value : [value]);\n", "import convertToArrayPayload from '../utils/convertToArrayPayload';\n\nexport default <T extends string | string[] | undefined>(\n name?: T,\n signalName?: string,\n exact?: boolean,\n) =>\n !name ||\n !signalName ||\n name === signalName ||\n convertToArrayPayload(name).some(\n (currentName) =>\n currentName &&\n (exact\n ? currentName === signalName\n : currentName.startsWith(signalName) ||\n signalName.startsWith(currentName)),\n );\n", "import React from 'react';\n\nimport { Subject } from './utils/createSubject';\n\ntype Props<T> = {\n disabled?: boolean;\n subject: Subject<T>;\n next: (value: T) => void;\n};\n\nexport function useSubscribe<T>(props: Props<T>) {\n const _props = React.useRef(props);\n _props.current = props;\n\n React.useEffect(() => {\n const subscription =\n !props.disabled &&\n _props.current.subject &&\n _props.current.subject.subscribe({\n next: _props.current.next,\n });\n\n return () => {\n subscription && subscription.unsubscribe();\n };\n }, [props.disabled]);\n}\n", "import React from 'react';\n\nimport getProxyFormState from './logic/getProxyFormState';\nimport shouldRenderFormState from './logic/shouldRenderFormState';\nimport shouldSubscribeByName from './logic/shouldSubscribeByName';\nimport {\n FieldValues,\n FormState,\n InternalFieldName,\n UseFormStateProps,\n UseFormStateReturn,\n} from './types';\nimport { useFormContext } from './useFormContext';\nimport { useSubscribe } from './useSubscribe';\n\n/**\n * This custom hook allows you to subscribe to each form state, and isolate the re-render at the custom hook level. It has its scope in terms of form state subscription, so it would not affect other useFormState and useForm. Using this hook can reduce the re-render impact on large and complex form application.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformstate) • [Demo](https://codesandbox.io/s/useformstate-75xly)\n *\n * @param props - include options on specify fields to subscribe. {@link UseFormStateReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, handleSubmit, control } = useForm({\n * defaultValues: {\n * firstName: \"firstName\"\n * }});\n * const { dirtyFields } = useFormState({\n * control\n * });\n * const onSubmit = (data) => console.log(data);\n *\n * return (\n * <form onSubmit={handleSubmit(onSubmit)}>\n * <input {...register(\"firstName\")} placeholder=\"First Name\" />\n * {dirtyFields.firstName && <p>Field is dirty.</p>}\n * <input type=\"submit\" />\n * </form>\n * );\n * }\n * ```\n */\nfunction useFormState<TFieldValues extends FieldValues = FieldValues>(\n props?: UseFormStateProps<TFieldValues>,\n): UseFormStateReturn<TFieldValues> {\n const methods = useFormContext<TFieldValues>();\n const { control = methods.control, disabled, name, exact } = props || {};\n const [formState, updateFormState] = React.useState(control._formState);\n const _mounted = React.useRef(true);\n const _localProxyFormState = React.useRef({\n isDirty: false,\n isLoading: false,\n dirtyFields: false,\n touchedFields: false,\n validatingFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n });\n const _name = React.useRef(name);\n\n _name.current = name;\n\n useSubscribe({\n disabled,\n next: (\n value: Partial<FormState<TFieldValues>> & { name?: InternalFieldName },\n ) =>\n _mounted.current &&\n shouldSubscribeByName(\n _name.current as InternalFieldName,\n value.name,\n exact,\n ) &&\n shouldRenderFormState(\n value,\n _localProxyFormState.current,\n control._updateFormState,\n ) &&\n updateFormState({\n ...control._formState,\n ...value,\n }),\n subject: control._subjects.state,\n });\n\n React.useEffect(() => {\n _mounted.current = true;\n _localProxyFormState.current.isValid && control._updateValid(true);\n\n return () => {\n _mounted.current = false;\n };\n }, [control]);\n\n return React.useMemo(\n () =>\n getProxyFormState(\n formState,\n control,\n _localProxyFormState.current,\n false,\n ),\n [formState, control],\n );\n}\n\nexport { useFormState };\n", "export default (value: unknown): value is string => typeof value === 'string';\n", "import { DeepPartial, FieldValues, Names } from '../types';\nimport get from '../utils/get';\nimport isString from '../utils/isString';\n\nexport default <T>(\n names: string | string[] | undefined,\n _names: Names,\n formValues?: FieldValues,\n isGlobal?: boolean,\n defaultValue?: DeepPartial<T> | unknown,\n) => {\n if (isString(names)) {\n isGlobal && _names.watch.add(names);\n return get(formValues, names, defaultValue);\n }\n\n if (Array.isArray(names)) {\n return names.map(\n (fieldName) => (\n isGlobal && _names.watch.add(fieldName), get(formValues, fieldName)\n ),\n );\n }\n\n isGlobal && (_names.watchAll = true);\n\n return formValues;\n};\n", "import React from 'react';\n\nimport generateWatchOutput from './logic/generateWatchOutput';\nimport shouldSubscribeByName from './logic/shouldSubscribeByName';\nimport cloneObject from './utils/cloneObject';\nimport {\n Control,\n DeepPartialSkipArrayKey,\n FieldPath,\n FieldPathValue,\n FieldPathValues,\n FieldValues,\n InternalFieldName,\n UseWatchProps,\n} from './types';\nimport { useFormContext } from './useFormContext';\nimport { useSubscribe } from './useSubscribe';\n\n/**\n * Subscribe to the entire form values change and re-render at the hook level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @param props - defaultValue, disable subscription and match exact name.\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n * control,\n * defaultValue: {\n * name: \"data\"\n * },\n * exact: false,\n * })\n * ```\n */\nexport function useWatch<\n TFieldValues extends FieldValues = FieldValues,\n>(props: {\n defaultValue?: DeepPartialSkipArrayKey<TFieldValues>;\n control?: Control<TFieldValues>;\n disabled?: boolean;\n exact?: boolean;\n}): DeepPartialSkipArrayKey<TFieldValues>;\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @param props - defaultValue, disable subscription and match exact name.\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n * control,\n * name: \"fieldA\",\n * defaultValue: \"default value\",\n * exact: false,\n * })\n * ```\n */\nexport function useWatch<\n TFieldValues extends FieldValues = FieldValues,\n TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>(props: {\n name: TFieldName;\n defaultValue?: FieldPathValue<TFieldValues, TFieldName>;\n control?: Control<TFieldValues>;\n disabled?: boolean;\n exact?: boolean;\n}): FieldPathValue<TFieldValues, TFieldName>;\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @param props - defaultValue, disable subscription and match exact name.\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n * control,\n * name: [\"fieldA\", \"fieldB\"],\n * defaultValue: {\n * fieldA: \"data\",\n * fieldB: \"data\"\n * },\n * exact: false,\n * })\n * ```\n */\nexport function useWatch<\n TFieldValues extends FieldValues = FieldValues,\n TFieldNames extends\n readonly FieldPath<TFieldValues>[] = readonly FieldPath<TFieldValues>[],\n>(props: {\n name: readonly [...TFieldNames];\n defaultValue?: DeepPartialSkipArrayKey<TFieldValues>;\n control?: Control<TFieldValues>;\n disabled?: boolean;\n exact?: boolean;\n}): FieldPathValues<TFieldValues, TFieldNames>;\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @example\n * ```tsx\n * // can skip passing down the control into useWatch if the form is wrapped with the FormProvider\n * const values = useWatch()\n * ```\n */\nexport function useWatch<\n TFieldValues extends FieldValues = FieldValues,\n>(): DeepPartialSkipArrayKey<TFieldValues>;\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n * name: \"fieldName\"\n * control,\n * })\n * ```\n */\nexport function useWatch<TFieldValues extends FieldValues>(\n props?: UseWatchProps<TFieldValues>,\n) {\n const methods = useFormContext();\n const {\n control = methods.control,\n name,\n defaultValue,\n disabled,\n exact,\n } = props || {};\n const _name = React.useRef(name);\n\n _name.current = name;\n\n useSubscribe({\n disabled,\n subject: control._subjects.values,\n next: (formState: { name?: InternalFieldName; values?: FieldValues }) => {\n if (\n shouldSubscribeByName(\n _name.current as InternalFieldName,\n formState.name,\n exact,\n )\n ) {\n updateValue(\n cloneObject(\n generateWatchOutput(\n _name.current as InternalFieldName | InternalFieldName[],\n control._names,\n formState.values || control._formValues,\n false,\n defaultValue,\n ),\n ),\n );\n }\n },\n });\n\n const [value, updateValue] = React.useState(\n control._getWatch(\n name as InternalFieldName,\n defaultValue as DeepPartialSkipArrayKey<TFieldValues>,\n ),\n );\n\n React.useEffect(() => control._removeUnmounted());\n\n return value;\n}\n", "import React from 'react';\n\nimport getEventValue from './logic/getEventValue';\nimport isNameInFieldArray from './logic/isNameInFieldArray';\nimport cloneObject from './utils/cloneObject';\nimport get from './utils/get';\nimport isBoolean from './utils/isBoolean';\nimport isUndefined from './utils/isUndefined';\nimport set from './utils/set';\nimport { EVENTS } from './constants';\nimport {\n ControllerFieldState,\n Field,\n FieldPath,\n FieldPathValue,\n FieldValues,\n InternalFieldName,\n UseControllerProps,\n UseControllerReturn,\n} from './types';\nimport { useFormContext } from './useFormContext';\nimport { useFormState } from './useFormState';\nimport { useWatch } from './useWatch';\n\n/**\n * Custom hook to work with controlled component, this function provide you with both form and field level state. Re-render is isolated at the hook level.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller) • [Demo](https://codesandbox.io/s/usecontroller-0o8px)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns field properties, field and form state. {@link UseControllerReturn}\n *\n * @example\n * ```tsx\n * function Input(props) {\n * const { field, fieldState, formState } = useController(props);\n * return (\n * <div>\n * <input {...field} placeholder={props.name} />\n * <p>{fieldState.isTouched && \"Touched\"}</p>\n * <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\n * </div>\n * );\n * }\n * ```\n */\nexport function useController<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>(\n props: UseControllerProps<TFieldValues, TName>,\n): UseControllerReturn<TFieldValues, TName> {\n const methods = useFormContext<TFieldValues>();\n const { name, disabled, control = methods.control, shouldUnregister } = props;\n const isArrayField = isNameInFieldArray(control._names.array, name);\n const value = useWatch({\n control,\n name,\n defaultValue: get(\n control._formValues,\n name,\n get(control._defaultValues, name, props.defaultValue),\n ),\n exact: true,\n }) as FieldPathValue<TFieldValues, TName>;\n const formState = useFormState({\n control,\n name,\n exact: true,\n });\n\n const _registerProps = React.useRef(\n control.register(name, {\n ...props.rules,\n value,\n ...(isBoolean(props.disabled) ? { disabled: props.disabled } : {}),\n }),\n );\n\n const fieldState = React.useMemo(\n () =>\n Object.defineProperties(\n {},\n {\n invalid: {\n enumerable: true,\n get: () => !!get(formState.errors, name),\n },\n isDirty: {\n enumerable: true,\n get: () => !!get(formState.dirtyFields, name),\n },\n isTouched: {\n enumerable: true,\n get: () => !!get(formState.touchedFields, name),\n },\n isValidating: {\n enumerable: true,\n get: () => !!get(formState.validatingFields, name),\n },\n error: {\n enumerable: true,\n get: () => get(formState.errors, name),\n },\n },\n ) as ControllerFieldState,\n [formState, name],\n );\n\n const field = React.useMemo(\n () => ({\n name,\n value,\n ...(isBoolean(disabled) || formState.disabled\n ? { disabled: formState.disabled || disabled }\n : {}),\n onChange: (event: any) =>\n _registerProps.current.onChange({\n target: {\n value: getEventValue(event),\n name: name as InternalFieldName,\n },\n type: EVENTS.CHANGE,\n }),\n onBlur: () =>\n _registerProps.current.onBlur({\n target: {\n value: get(control._formValues, name),\n name: name as InternalFieldName,\n },\n type: EVENTS.BLUR,\n }),\n ref: (elm: any) => {\n const field = get(control._fields, name);\n\n if (field && elm) {\n field._f.ref = {\n focus: () => elm.focus(),\n select: () => elm.select(),\n setCustomValidity: (message: string) =>\n elm.setCustomValidity(message),\n reportValidity: () => elm.reportValidity(),\n };\n }\n },\n }),\n [\n name,\n control._formValues,\n disabled,\n formState.disabled,\n value,\n control._fields,\n ],\n );\n\n React.useEffect(() => {\n const _shouldUnregisterField =\n control._options.shouldUnregister || shouldUnregister;\n\n const updateMounted = (name: InternalFieldName, value: boolean) => {\n const field: Field = get(control._fields, name);\n\n if (field && field._f) {\n field._f.mount = value;\n }\n };\n\n updateMounted(name, true);\n\n if (_shouldUnregisterField) {\n const value = cloneObject(get(control._options.defaultValues, name));\n set(control._defaultValues, name, value);\n if (isUndefined(get(control._formValues, name))) {\n set(control._formValues, name, value);\n }\n }\n\n !isArrayField && control.register(name);\n\n return () => {\n (\n isArrayField\n ? _shouldUnregisterField && !control._state.action\n : _shouldUnregisterField\n )\n ? control.unregister(name)\n : updateMounted(name, false);\n };\n }, [name, control, isArrayField, shouldUnregister]);\n\n React.useEffect(() => {\n control._updateDisabledField({\n disabled,\n fields: control._fields,\n name,\n });\n }, [disabled, name, control]);\n\n return React.useMemo(\n () => ({\n field,\n formState,\n fieldState,\n }),\n [field, formState, fieldState],\n );\n}\n", "import { ControllerProps, FieldPath, FieldValues } from './types';\nimport { useController } from './useController';\n\n/**\n * Component based on `useController` hook to work with controlled component.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller/controller) • [Demo](https://codesandbox.io/s/react-hook-form-v6-controller-ts-jwyzw) • [Video](https://www.youtube.com/watch?v=N2UNk_UCVyA)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns provide field handler functions, field and form state.\n *\n * @example\n * ```tsx\n * function App() {\n * const { control } = useForm<FormValues>({\n * defaultValues: {\n * test: \"\"\n * }\n * });\n *\n * return (\n * <form>\n * <Controller\n * control={control}\n * name=\"test\"\n * render={({ field: { onChange, onBlur, value, ref }, formState, fieldState }) => (\n * <>\n * <input\n * onChange={onChange} // send value to hook form\n * onBlur={onBlur} // notify when input is touched\n * value={value} // return updated value\n * ref={ref} // set ref for focus management\n * />\n * <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\n * <p>{fieldState.isTouched ? \"touched\" : \"\"}</p>\n * </>\n * )}\n * />\n * </form>\n * );\n * }\n * ```\n */\nconst Controller = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>(\n props: ControllerProps<TFieldValues, TName>,\n) => props.render(useController<TFieldValues, TName>(props));\n\nexport { Controller };\n", "import { FieldValues } from '../types';\n\nimport { isObjectType } from './isObject';\n\nexport const flatten = (obj: FieldValues) => {\n const output: FieldValues = {};\n\n for (const key of Object.keys(obj)) {\n if (isObjectType(obj[key]) && obj[key] !== null) {\n const nested = flatten(obj[key]);\n\n for (const nestedKey of Object.keys(nested)) {\n output[`${key}.${nestedKey}`] = nested[nestedKey];\n }\n } else {\n output[key] = obj[key];\n }\n }\n\n return output;\n};\n", "import React from 'react';\n\nimport { flatten } from './utils/flatten';\nimport { FieldValues, FormProps } from './types';\nimport { useFormContext } from './useFormContext';\n\nconst POST_REQUEST = 'post';\n\n/**\n * Form component to manage submission.\n *\n * @param props - to setup submission detail. {@link FormProps}\n *\n * @returns form component or headless render prop.\n *\n * @example\n * ```tsx\n * function App() {\n * const { control, formState: { errors } } = useForm();\n *\n * return (\n * <Form action=\"/api\" control={control}>\n * <input {...register(\"name\")} />\n * <p>{errors?.root?.server && 'Server error'}</p>\n * <button>Submit</button>\n * </Form>\n * );\n * }\n * ```\n */\nfunction Form<\n T extends FieldValues,\n U extends FieldValues | undefined = undefined,\n>(props: FormProps<T, U>) {\n const methods = useFormContext<T>();\n const [mounted, setMounted] = React.useState(false);\n const {\n control = methods.control,\n onSubmit,\n children,\n action,\n method = POST_REQUEST,\n headers,\n encType,\n onError,\n render,\n onSuccess,\n validateStatus,\n ...rest\n } = props;\n\n const submit = async (event?: React.BaseSyntheticEvent) => {\n let hasError = false;\n let type = '';\n\n await control.handleSubmit(async (data) => {\n const formData = new FormData();\n let formDataJson = '';\n\n try {\n formDataJson = JSON.stringify(data);\n } catch {}\n\n const flattenFormValues = flatten(control._formValues);\n\n for (const key in flattenFormValues) {\n formData.append(key, flattenFormValues[key]);\n }\n\n if (onSubmit) {\n await onSubmit({\n data,\n event,\n method,\n formData,\n formDataJson,\n });\n }\n\n if (action) {\n try {\n const shouldStringifySubmissionData = [\n headers && headers['Content-Type'],\n encType,\n ].some((value) => value && value.includes('json'));\n\n const response = await fetch(String(action), {\n method,\n headers: {\n ...headers,\n ...(encType ? { 'Content-Type': encType } : {}),\n },\n body: shouldStringifySubmissionData ? formDataJson : formData,\n });\n\n if (\n response &&\n (validateStatus\n ? !validateStatus(response.status)\n : response.status < 200 || response.status >= 300)\n ) {\n hasError = true;\n onError && onError({ response });\n type = String(response.status);\n } else {\n onSuccess && onSuccess({ response });\n }\n } catch (error: unknown) {\n hasError = true;\n onError && onError({ error });\n }\n }\n })(event);\n\n if (hasError && props.control) {\n props.control._subjects.state.next({\n isSubmitSuccessful: false,\n });\n props.control.setError('root.server', {\n type,\n });\n }\n };\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n return render ? (\n <>\n {render({\n submit,\n })}\n </>\n ) : (\n <form\n noValidate={mounted}\n action={action}\n method={method}\n encType={encType}\n onSubmit={submit}\n {...rest}\n >\n {children}\n </form>\n );\n}\n\nexport { Form };\n", "import {\n InternalFieldErrors,\n InternalFieldName,\n ValidateResult,\n} from '../types';\n\nexport default (\n name: InternalFieldName,\n validateAllFieldCriteria: boolean,\n errors: InternalFieldErrors,\n type: string,\n message: ValidateResult,\n) =>\n validateAllFieldCriteria\n ? {\n ...errors[name],\n types: {\n ...(errors[name] && errors[name]!.types ? errors[name]!.types : {}),\n [type]: message || true,\n },\n }\n : {};\n", "export default () => {\n const d =\n typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;\n\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16 + d) % 16 | 0;\n\n return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n};\n", "import { FieldArrayMethodProps, InternalFieldName } from '../types';\nimport isUndefined from '../utils/isUndefined';\n\nexport default (\n name: InternalFieldName,\n index: number,\n options: FieldArrayMethodProps = {},\n): string =>\n options.shouldFocus || isUndefined(options.shouldFocus)\n ? options.focusName ||\n `${name}.${isUndefined(options.focusIndex) ? index : options.focusIndex}.`\n : '';\n", "import { VALIDATION_MODE } from '../constants';\nimport { Mode, ValidationModeFlags } from '../types';\n\nexport default (mode?: Mode): ValidationModeFlags => ({\n isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,\n isOnBlur: mode === VALIDATION_MODE.onBlur,\n isOnChange: mode === VALIDATION_MODE.onChange,\n isOnAll: mode === VALIDATION_MODE.all,\n isOnTouch: mode === VALIDATION_MODE.onTouched,\n});\n", "import { InternalFieldName, Names } from '../types';\n\nexport default (\n name: InternalFieldName,\n _names: Names,\n isBlurEvent?: boolean,\n) =>\n !isBlurEvent &&\n (_names.watchAll ||\n _names.watch.has(name) ||\n [..._names.watch].some(\n (watchName) =>\n name.startsWith(watchName) &&\n /^\\.\\w+/.test(name.slice(watchName.length)),\n ));\n", "import { FieldRefs, InternalFieldName, Ref } from '../types';\nimport { get } from '../utils';\nimport isObject from '../utils/isObject';\n\nconst iterateFieldsByAction = (\n fields: FieldRefs,\n action: (ref: Ref, name: string) => 1 | undefined | void,\n fieldsNames?: Set<InternalFieldName> | InternalFieldName[] | 0,\n abortEarly?: boolean,\n) => {\n for (const key of fieldsNames || Object.keys(fields)) {\n const field = get(fields, key);\n\n if (field) {\n const { _f, ...currentField } = field;\n\n if (_f) {\n if (_f.refs && _f.refs[0] && action(_f.refs[0], key) && !abortEarly) {\n return true;\n } else if (_f.ref && action(_f.ref, _f.name) && !abortEarly) {\n return true;\n } else {\n if (iterateFieldsByAction(currentField, action)) {\n break;\n }\n }\n } else if (isObject(currentField)) {\n if (iterateFieldsByAction(currentField as FieldRefs, action)) {\n break;\n }\n }\n }\n }\n return;\n};\nexport default iterateFieldsByAction;\n", "import {\n FieldError,\n FieldErrors,\n FieldValues,\n InternalFieldName,\n} from '../types';\nimport convertToArrayPayload from '../utils/convertToArrayPayload';\nimport get from '../utils/get';\nimport set from '../utils/set';\n\nexport default <T extends FieldValues = FieldValues>(\n errors: FieldErrors<T>,\n error: Partial<Record<string, FieldError>>,\n name: InternalFieldName,\n): FieldErrors<T> => {\n const fieldArrayErrors = convertToArrayPayload(get(errors, name));\n set(fieldArrayErrors, 'root', error[name]);\n set(errors, name, fieldArrayErrors);\n return errors;\n};\n", "import { FieldElement } from '../types';\n\nexport default (element: FieldElement): element is HTMLInputElement =>\n element.type === 'file';\n", "export default (value: unknown): value is Function =>\n typeof value === 'function';\n", "import isWeb from './isWeb';\n\nexport default (value: unknown): value is HTMLElement => {\n if (!isWeb) {\n return false;\n }\n\n const owner = value ? ((value as HTMLElement).ownerDocument as Document) : 0;\n return (\n value instanceof\n (owner && owner.defaultView ? owner.defaultView.HTMLElement : HTMLElement)\n );\n};\n", "import { Message } from '../types';\nimport isString from '../utils/isString';\n\nexport default (value: unknown): value is Message => isString(value);\n", "import { FieldElement } from '../types';\n\nexport default (element: FieldElement): element is HTMLInputElement =>\n element.type === 'radio';\n", "export default (value: unknown): value is RegExp => value instanceof RegExp;\n", "import isUndefined from '../utils/isUndefined';\n\ntype CheckboxFieldResult = {\n isValid: boolean;\n value: string | string[] | boolean | undefined;\n};\n\nconst defaultResult: CheckboxFieldResult = {\n value: false,\n isValid: false,\n};\n\nconst validResult = { value: true, isValid: true };\n\nexport default (options?: HTMLInputElement[]): CheckboxFieldResult => {\n if (Array.isArray(options)) {\n if (options.length > 1) {\n const values = options\n .filter((option) => option && option.checked && !option.disabled)\n .map((option) => option.value);\n return { value: values, isValid: !!values.length };\n }\n\n return options[0].checked && !options[0].disabled\n ? // @ts-expect-error expected to work in the browser\n options[0].attributes && !isUndefined(options[0].attributes.value)\n ? isUndefined(options[0].value) || options[0].value === ''\n ? validResult\n : { value: options[0].value, isValid: true }\n : validResult\n : defaultResult;\n }\n\n return defaultResult;\n};\n", "type RadioFieldResult = {\n isValid: boolean;\n value: number | string | null;\n};\n\nconst defaultReturn: RadioFieldResult = {\n isValid: false,\n value: null,\n};\n\nexport default (options?: HTMLInputElement[]): RadioFieldResult =>\n Array.isArray(options)\n ? options.reduce(\n (previous, option): RadioFieldResult =>\n option && option.checked && !option.disabled\n ? {\n isValid: true,\n value: option.value,\n }\n : previous,\n defaultReturn,\n )\n : defaultReturn;\n", "import { FieldError, Ref, ValidateResult } from '../types';\nimport isBoolean from '../utils/isBoolean';\nimport isMessage from '../utils/isMessage';\n\nexport default function getValidateError(\n result: ValidateResult,\n ref: Ref,\n type = 'validate',\n): FieldError | void {\n if (\n isMessage(result) ||\n (Array.isArray(result) && result.every(isMessage)) ||\n (isBoolean(result) && !result)\n ) {\n return {\n type,\n message: isMessage(result) ? result : '',\n ref,\n };\n }\n}\n", "import { ValidationRule } from '../types';\nimport isObject from '../utils/isObject';\nimport isRegex from '../utils/isRegex';\n\nexport default (validationData?: ValidationRule) =>\n isObject(validationData) && !isRegex(validationData)\n ? validationData\n : {\n value: validationData,\n message: '',\n };\n", "import { INPUT_VALIDATION_RULES } from '../constants';\nimport {\n Field,\n FieldError,\n FieldValues,\n InternalFieldErrors,\n InternalNameSet,\n MaxType,\n Message,\n MinType,\n NativeFieldValue,\n} from '../types';\nimport get from '../utils/get';\nimport isBoolean from '../utils/isBoolean';\nimport isCheckBoxInput from '../utils/isCheckBoxInput';\nimport isEmptyObject from '../utils/isEmptyObject';\nimport isFileInput from '../utils/isFileInput';\nimport isFunction from '../utils/isFunction';\nimport isHTMLElement from '../utils/isHTMLElement';\nimport isMessage from '../utils/isMessage';\nimport isNullOrUndefined from '../utils/isNullOrUndefined';\nimport isObject from '../utils/isObject';\nimport isRadioInput from '../utils/isRadioInput';\nimport isRegex from '../utils/isRegex';\nimport isString from '../utils/isString';\nimport isUndefined from '../utils/isUndefined';\n\nimport appendErrors from './appendErrors';\nimport getCheckboxValue from './getCheckboxValue';\nimport getRadioValue from './getRadioValue';\nimport getValidateError from './getValidateError';\nimport getValueAndMessage from './getValueAndMessage';\n\nexport default async <T extends FieldValues>(\n field: Field,\n disabledFieldNames: InternalNameSet,\n formValues: T,\n validateAllFieldCriteria: boolean,\n shouldUseNativeValidation?: boolean,\n isFieldArray?: boolean,\n): Promise<InternalFieldErrors> => {\n const {\n ref,\n refs,\n required,\n maxLength,\n minLength,\n min,\n max,\n pattern,\n validate,\n name,\n valueAsNumber,\n mount,\n } = field._f;\n const inputValue: NativeFieldValue = get(formValues, name);\n if (!mount || disabledFieldNames.has(name)) {\n return {};\n }\n const inputRef: HTMLInputElement = refs ? refs[0] : (ref as HTMLInputElement);\n const setCustomValidity = (message?: string | boolean) => {\n if (shouldUseNativeValidation && inputRef.reportValidity) {\n inputRef.setCustomValidity(isBoolean(message) ? '' : message || '');\n inputRef.reportValidity();\n }\n };\n const error: InternalFieldErrors = {};\n const isRadio = isRadioInput(ref);\n const isCheckBox = isCheckBoxInput(ref);\n const isRadioOrCheckbox = isRadio || isCheckBox;\n const isEmpty =\n ((valueAsNumber || isFileInput(ref)) &&\n isUndefined(ref.value) &&\n isUndefined(inputValue)) ||\n (isHTMLElement(ref) && ref.value === '') ||\n inputValue === '' ||\n (Array.isArray(inputValue) && !inputValue.length);\n const appendErrorsCurry = appendErrors.bind(\n null,\n name,\n validateAllFieldCriteria,\n error,\n );\n const getMinMaxMessage = (\n exceedMax: boolean,\n maxLengthMessage: Message,\n minLengthMessage: Message,\n maxType: MaxType = INPUT_VALIDATION_RULES.maxLength,\n minType: MinType = INPUT_VALIDATION_RULES.minLength,\n ) => {\n const message = exceedMax ? maxLengthMessage : minLengthMessage;\n error[name] = {\n type: exceedMax ? maxType : minType,\n message,\n ref,\n ...appendErrorsCurry(exceedMax ? maxType : minType, message),\n };\n };\n\n if (\n isFieldArray\n ? !Array.isArray(inputValue) || !inputValue.length\n : required &&\n ((!isRadioOrCheckbox && (isEmpty || isNullOrUndefined(inputValue))) ||\n (isBoolean(inputValue) && !inputValue) ||\n (isCheckBox && !getCheckboxValue(refs).isValid) ||\n (isRadio && !getRadioValue(refs).isValid))\n ) {\n const { value, message } = isMessage(required)\n ? { value: !!required, message: required }\n : getValueAndMessage(required);\n\n if (value) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.required,\n message,\n ref: inputRef,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.required, message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(message);\n return error;\n }\n }\n }\n\n if (!isEmpty && (!isNullOrUndefined(min) || !isNullOrUndefined(max))) {\n let exceedMax;\n let exceedMin;\n const maxOutput = getValueAndMessage(max);\n const minOutput = getValueAndMessage(min);\n\n if (!isNullOrUndefined(inputValue) && !isNaN(inputValue as number)) {\n const valueNumber =\n (ref as HTMLInputElement).valueAsNumber ||\n (inputValue ? +inputValue : inputValue);\n if (!isNullOrUndefined(maxOutput.value)) {\n exceedMax = valueNumber > maxOutput.value;\n }\n if (!isNullOrUndefined(minOutput.value)) {\n exceedMin = valueNumber < minOutput.value;\n }\n } else {\n const valueDate =\n (ref as HTMLInputElement).valueAsDate || new Date(inputValue as string);\n const convertTimeToDate = (time: unknown) =>\n new Date(new Date().toDateString() + ' ' + time);\n const isTime = ref.type == 'time';\n const isWeek = ref.type == 'week';\n\n if (isString(maxOutput.value) && inputValue) {\n exceedMax = isTime\n ? convertTimeToDate(inputValue) > convertTimeToDate(maxOutput.value)\n : isWeek\n ? inputValue > maxOutput.value\n : valueDate > new Date(maxOutput.value);\n }\n\n if (isString(minOutput.value) && inputValue) {\n exceedMin = isTime\n ? convertTimeToDate(inputValue) < convertTimeToDate(minOutput.value)\n : isWeek\n ? inputValue < minOutput.value\n : valueDate < new Date(minOutput.value);\n }\n }\n\n if (exceedMax || exceedMin) {\n getMinMaxMessage(\n !!exceedMax,\n maxOutput.message,\n minOutput.message,\n INPUT_VALIDATION_RULES.max,\n INPUT_VALIDATION_RULES.min,\n );\n if (!validateAllFieldCriteria) {\n setCustomValidity(error[name]!.message);\n return error;\n }\n }\n }\n\n if (\n (maxLength || minLength) &&\n !isEmpty &&\n (isString(inputValue) || (isFieldArray && Array.isArray(inputValue)))\n ) {\n const maxLengthOutput = getValueAndMessage(maxLength);\n const minLengthOutput = getValueAndMessage(minLength);\n const exceedMax =\n !isNullOrUndefined(maxLengthOutput.value) &&\n inputValue.length > +maxLengthOutput.value;\n const exceedMin =\n !isNullOrUndefined(minLengthOutput.value) &&\n inputValue.length < +minLengthOutput.value;\n\n if (exceedMax || exceedMin) {\n getMinMaxMessage(\n exceedMax,\n maxLengthOutput.message,\n minLengthOutput.message,\n );\n if (!validateAllFieldCriteria) {\n setCustomValidity(error[name]!.message);\n return error;\n }\n }\n }\n\n if (pattern && !isEmpty && isString(inputValue)) {\n const { value: patternValue, message } = getValueAndMessage(pattern);\n\n if (isRegex(patternValue) && !inputValue.match(patternValue)) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.pattern,\n message,\n ref,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(message);\n return error;\n }\n }\n }\n\n if (validate) {\n if (isFunction(validate)) {\n const result = await validate(inputValue, formValues);\n const validateError = getValidateError(result, inputRef);\n\n if (validateError) {\n error[name] = {\n ...validateError,\n ...appendErrorsCurry(\n INPUT_VALIDATION_RULES.validate,\n validateError.message,\n ),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(validateError.message);\n return error;\n }\n }\n } else if (isObject(validate)) {\n let validationResult = {} as FieldError;\n\n for (const key in validate) {\n if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {\n break;\n }\n\n const validateError = getValidateError(\n await validate[key](inputValue, formValues),\n inputRef,\n key,\n );\n\n if (validateError) {\n validationResult = {\n ...validateError,\n ...appendErrorsCurry(key, validateError.message),\n };\n\n setCustomValidity(validateError.message);\n\n if (validateAllFieldCriteria) {\n error[name] = validationResult;\n }\n }\n }\n\n if (!isEmptyObject(validationResult)) {\n error[name] = {\n ref: inputRef,\n ...validationResult,\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n }\n\n setCustomValidity(true);\n return error;\n};\n", "import convertToArrayPayload from './convertToArrayPayload';\n\nexport default <T>(data: T[], value: T | T[]): T[] => [\n ...data,\n ...convertToArrayPayload(value),\n];\n", "export default <T>(value: T | T[]): undefined[] | undefined =>\n Array.isArray(value) ? value.map(() => undefined) : undefined;\n", "import convertToArrayPayload from './convertToArrayPayload';\n\nexport default function insert<T>(data: T[], index: number): (T | undefined)[];\nexport default function insert<T>(\n data: T[],\n index: number,\n value: T | T[],\n): T[];\nexport default function insert<T>(\n data: T[],\n index: number,\n value?: T | T[],\n): (T | undefined)[] {\n return [\n ...data.slice(0, index),\n ...convertToArrayPayload(value),\n ...data.slice(index),\n ];\n}\n", "import isUndefined from './isUndefined';\n\nexport default <T>(\n data: (T | undefined)[],\n from: number,\n to: number,\n): (T | undefined)[] => {\n if (!Array.isArray(data)) {\n return [];\n }\n\n if (isUndefined(data[to])) {\n data[to] = undefined;\n }\n data.splice(to, 0, data.splice(from, 1)[0]);\n\n return data;\n};\n", "import convertToArrayPayload from './convertToArrayPayload';\n\nexport default <T>(data: T[], value: T | T[]): T[] => [\n ...convertToArrayPayload(value),\n ...convertToArrayPayload(data),\n];\n", "import compact from './compact';\nimport convertToArrayPayload from './convertToArrayPayload';\nimport isUndefined from './isUndefined';\n\nfunction removeAtIndexes<T>(data: T[], indexes: number[]): T[] {\n let i = 0;\n const temp = [...data];\n\n for (const index of indexes) {\n temp.splice(index - i, 1);\n i++;\n }\n\n return compact(temp).length ? temp : [];\n}\n\nexport default <T>(data: T[], index?: number | number[]): T[] =>\n isUndefined(index)\n ? []\n : removeAtIndexes(\n data,\n (convertToArrayPayload(index) as number[]).sort((a, b) => a - b),\n );\n", "export default <T>(data: T[], indexA: number, indexB: number): void => {\n [data[indexA], data[indexB]] = [data[indexB], data[indexA]];\n};\n", "import isEmptyObject from './isEmptyObject';\nimport isKey from './isKey';\nimport isObject from './isObject';\nimport isUndefined from './isUndefined';\nimport stringToPath from './stringToPath';\n\nfunction baseGet(object: any, updatePath: (string | number)[]) {\n const length = updatePath.slice(0, -1).length;\n let index = 0;\n\n while (index < length) {\n object = isUndefined(object) ? index++ : object[updatePath[index++]];\n }\n\n return object;\n}\n\nfunction isEmptyArray(obj: unknown[]) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && !isUndefined(obj[key])) {\n return false;\n }\n }\n return true;\n}\n\nexport default function unset(object: any, path: string | (string | number)[]) {\n const paths = Array.isArray(path)\n ? path\n : isKey(path)\n ? [path]\n : stringToPath(path);\n\n const childObject = paths.length === 1 ? object : baseGet(object, paths);\n\n const index = paths.length - 1;\n const key = paths[index];\n\n if (childObject) {\n delete childObject[key];\n }\n\n if (\n index !== 0 &&\n ((isObject(childObject) && isEmptyObject(childObject)) ||\n (Array.isArray(childObject) && isEmptyArray(childObject)))\n ) {\n unset(object, paths.slice(0, -1));\n }\n\n return object;\n}\n", "export default <T>(fieldValues: T[], index: number, value: T) => {\n fieldValues[index] = value;\n return fieldValues;\n};\n", "import React from 'react';\n\nimport generateId from './logic/generateId';\nimport getFocusFieldName from './logic/getFocusFieldName';\nimport getValidationModes from './logic/getValidationModes';\nimport isWatched from './logic/isWatched';\nimport iterateFieldsByAction from './logic/iterateFieldsByAction';\nimport updateFieldArrayRootError from './logic/updateFieldArrayRootError';\nimport validateField from './logic/validateField';\nimport appendAt from './utils/append';\nimport cloneObject from './utils/cloneObject';\nimport convertToArrayPayload from './utils/convertToArrayPayload';\nimport fillEmptyArray from './utils/fillEmptyArray';\nimport get from './utils/get';\nimport insertAt from './utils/insert';\nimport isEmptyObject from './utils/isEmptyObject';\nimport moveArrayAt from './utils/move';\nimport prependAt from './utils/prepend';\nimport removeArrayAt from './utils/remove';\nimport set from './utils/set';\nimport swapArrayAt from './utils/swap';\nimport unset from './utils/unset';\nimport updateAt from './utils/update';\nimport { VALIDATION_MODE } from './constants';\nimport {\n Control,\n Field,\n FieldArray,\n FieldArrayMethodProps,\n FieldArrayPath,\n FieldArrayWithId,\n FieldErrors,\n FieldPath,\n FieldValues,\n FormState,\n InternalFieldName,\n RegisterOptions,\n UseFieldArrayProps,\n UseFieldArrayReturn,\n} from './types';\nimport { useFormContext } from './useFormContext';\nimport { useSubscribe } from './useSubscribe';\n\n/**\n * A custom hook that exposes convenient methods to perform operations with a list of dynamic inputs that need to be appended, updated, removed etc. • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn) • [Video](https://youtu.be/4MrbfGSFY2A)\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usefieldarray) • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn)\n *\n * @param props - useFieldArray props\n *\n * @returns methods - functions to manipulate with the Field Arrays (dynamic inputs) {@link UseFieldArrayReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, control, handleSubmit, reset, trigger, setError } = useForm({\n * defaultValues: {\n * test: []\n * }\n * });\n * const { fields, append } = useFieldArray({\n * control,\n * name: \"test\"\n * });\n *\n * return (\n * <form onSubmit={handleSubmit(data => console.log(data))}>\n * {fields.map((item, index) => (\n * <input key={item.id} {...register(`test.${index}.firstName`)} />\n * ))}\n * <button type=\"button\" onClick={() => append({ firstName: \"bill\" })}>\n * append\n * </button>\n * <input type=\"submit\" />\n * </form>\n * );\n * }\n * ```\n */\nexport function useFieldArray<\n TFieldValues extends FieldValues = FieldValues,\n TFieldArrayName extends\n FieldArrayPath<TFieldValues> = FieldArrayPath<TFieldValues>,\n TKeyName extends string = 'id',\n>(\n props: UseFieldArrayProps<TFieldValues, TFieldArrayName, TKeyName>,\n): UseFieldArrayReturn<TFieldValues, TFieldArrayName, TKeyName> {\n const methods = useFormContext();\n const {\n control = methods.control,\n name,\n keyName = 'id',\n shouldUnregister,\n rules,\n } = props;\n const [fields, setFields] = React.useState(control._getFieldArray(name));\n const ids = React.useRef<string[]>(\n control._getFieldArray(name).map(generateId),\n );\n const _fieldIds = React.useRef(fields);\n const _name = React.useRef(name);\n const _actioned = React.useRef(false);\n\n _name.current = name;\n _fieldIds.current = fields;\n control._names.array.add(name);\n\n rules &&\n (control as Control<TFieldValues>).register(\n name as FieldPath<TFieldValues>,\n rules as RegisterOptions<TFieldValues>,\n );\n\n useSubscribe({\n next: ({\n values,\n name: fieldArrayName,\n }: {\n values?: FieldValues;\n name?: InternalFieldName;\n }) => {\n if (fieldArrayName === _name.current || !fieldArrayName) {\n const fieldValues = get(values, _name.current);\n if (Array.isArray(fieldValues)) {\n setFields(fieldValues);\n ids.current = fieldValues.map(generateId);\n }\n }\n },\n subject: control._subjects.array,\n });\n\n const updateValues = React.useCallback(\n <\n T extends Partial<\n FieldArrayWithId<TFieldValues, TFieldArrayName, TKeyName>\n >[],\n >(\n updatedFieldArrayValues: T,\n ) => {\n _actioned.current = true;\n control._updateFieldArray(name, updatedFieldArrayValues);\n },\n [control, name],\n );\n\n const append = (\n value:\n | Partial<FieldArray<TFieldValues, TFieldArrayName>>\n | Partial<FieldArray<TFieldValues, TFieldArrayName>>[],\n options?: FieldArrayMethodProps,\n ) => {\n const appendValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = appendAt(\n control._getFieldArray(name),\n appendValue,\n );\n control._names.focus = getFocusFieldName(\n name,\n updatedFieldArrayValues.length - 1,\n options,\n );\n ids.current = appendAt(ids.current, appendValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(name, updatedFieldArrayValues, appendAt, {\n argA: fillEmptyArray(value),\n });\n };\n\n const prepend = (\n value:\n | Partial<FieldArray<TFieldValues, TFieldArrayName>>\n | Partial<FieldArray<TFieldValues, TFieldArrayName>>[],\n options?: FieldArrayMethodProps,\n ) => {\n const prependValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = prependAt(\n control._getFieldArray(name),\n prependValue,\n );\n control._names.focus = getFocusFieldName(name, 0, options);\n ids.current = prependAt(ids.current, prependValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(name, updatedFieldArrayValues, prependAt, {\n argA: fillEmptyArray(value),\n });\n };\n\n const remove = (index?: number | number[]) => {\n const updatedFieldArrayValues: Partial<\n FieldArrayWithId<TFieldValues, TFieldArrayName, TKeyName>\n >[] = removeArrayAt(control._getFieldArray(name), index);\n ids.current = removeArrayAt(ids.current, index);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n !Array.isArray(get(control._fields, name)) &&\n set(control._fields, name, undefined);\n control._updateFieldArray(name, updatedFieldArrayValues, removeArrayAt, {\n argA: index,\n });\n };\n\n const insert = (\n index: number,\n value:\n | Partial<FieldArray<TFieldValues, TFieldArrayName>>\n | Partial<FieldArray<TFieldValues, TFieldArrayName>>[],\n options?: FieldArrayMethodProps,\n ) => {\n const insertValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = insertAt(\n control._getFieldArray(name),\n index,\n insertValue,\n );\n control._names.focus = getFocusFieldName(name, index, options);\n ids.current = insertAt(ids.current, index, insertValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(name, updatedFieldArrayValues, insertAt, {\n argA: index,\n argB: fillEmptyArray(value),\n });\n };\n\n const swap = (indexA: number, indexB: number) => {\n const updatedFieldArrayValues = control._getFieldArray(name);\n swapArrayAt(updatedFieldArrayValues, indexA, indexB);\n swapArrayAt(ids.current, indexA, indexB);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(\n name,\n updatedFieldArrayValues,\n swapArrayAt,\n {\n argA: indexA,\n argB: indexB,\n },\n false,\n );\n };\n\n const move = (from: number, to: number) => {\n const updatedFieldArrayValues = control._getFieldArray(name);\n moveArrayAt(updatedFieldArrayValues, from, to);\n moveArrayAt(ids.current, from, to);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(\n name,\n updatedFieldArrayValues,\n moveArrayAt,\n {\n argA: from,\n argB: to,\n },\n false,\n );\n };\n\n const update = (\n index: number,\n value: FieldArray<TFieldValues, TFieldArrayName>,\n ) => {\n const updateValue = cloneObject(value);\n const updatedFieldArrayValues = updateAt(\n control._getFieldArray<\n FieldArrayWithId<TFieldValues, TFieldArrayName, TKeyName>\n >(name),\n index,\n updateValue as FieldArrayWithId<TFieldValues, TFieldArrayName, TKeyName>,\n );\n ids.current = [...updatedFieldArrayValues].map((item, i) =>\n !item || i === index ? generateId() : ids.current[i],\n );\n updateValues(updatedFieldArrayValues);\n setFields([...updatedFieldArrayValues]);\n control._updateFieldArray(\n name,\n updatedFieldArrayValues,\n updateAt,\n {\n argA: index,\n argB: updateValue,\n },\n true,\n false,\n );\n };\n\n const replace = (\n value:\n | Partial<FieldArray<TFieldValues, TFieldArrayName>>\n | Partial<FieldArray<TFieldValues, TFieldArrayName>>[],\n ) => {\n const updatedFieldArrayValues = convertToArrayPayload(cloneObject(value));\n ids.current = updatedFieldArrayValues.map(generateId);\n updateValues([...updatedFieldArrayValues]);\n setFields([...updatedFieldArrayValues]);\n control._updateFieldArray(\n name,\n [...updatedFieldArrayValues],\n <T>(data: T): T => data,\n {},\n true,\n false,\n );\n };\n\n React.useEffect(() => {\n control._state.action = false;\n\n isWatched(name, control._names) &&\n control._subjects.state.next({\n ...control._formState,\n } as FormState<TFieldValues>);\n\n if (\n _actioned.current &&\n (!getValidationModes(control._options.mode).isOnSubmit ||\n control._formState.isSubmitted)\n ) {\n if (control._options.resolver) {\n control._executeSchema([name]).then((result) => {\n const error = get(result.errors, name);\n const existingError = get(control._formState.errors, name);\n\n if (\n existingError\n ? (!error && existingError.type) ||\n (error &&\n (existingError.type !== error.type ||\n existingError.message !== error.message))\n : error && error.type\n ) {\n error\n ? set(control._formState.errors, name, error)\n : unset(control._formState.errors, name);\n control._subjects.state.next({\n errors: control._formState.errors as FieldErrors<TFieldValues>,\n });\n }\n });\n } else {\n const field: Field = get(control._fields, name);\n if (\n field &&\n field._f &&\n !(\n getValidationModes(control._options.reValidateMode).isOnSubmit &&\n getValidationModes(control._options.mode).isOnSubmit\n )\n ) {\n validateField(\n field,\n control._names.disabled,\n control._formValues,\n control._options.criteriaMode === VALIDATION_MODE.all,\n control._options.shouldUseNativeValidation,\n true,\n ).then(\n (error) =>\n !isEmptyObject(error) &&\n control._subjects.state.next({\n errors: updateFieldArrayRootError(\n control._formState.errors as FieldErrors<TFieldValues>,\n error,\n name,\n ) as FieldErrors<TFieldValues>,\n }),\n );\n }\n }\n }\n\n control._subjects.values.next({\n name,\n values: { ...control._formValues },\n });\n\n control._names.focus &&\n iterateFieldsByAction(control._fields, (ref, key: string) => {\n if (\n control._names.focus &&\n key.startsWith(control._names.focus) &&\n ref.focus\n ) {\n ref.focus();\n return 1;\n }\n return;\n });\n\n control._names.focus = '';\n\n control._updateValid();\n\n _actioned.current = false;\n }, [fields, name, control]);\n\n React.useEffect(() => {\n !get(control._formValues, name) && control._updateFieldArray(name);\n\n return () => {\n (control._options.shouldUnregister || shouldUnregister) &&\n control.unregister(name as FieldPath<TFieldValues>);\n };\n }, [name, control, keyName, shouldUnregister]);\n\n return {\n swap: React.useCallback(swap, [updateValues, name, control]),\n move: React.useCallback(move, [updateValues, name, control]),\n prepend: React.useCallback(prepend, [updateValues, name, control]),\n append: React.useCallback(append, [updateValues, name, control]),\n remove: React.useCallback(remove, [updateValues, name, control]),\n insert: React.useCallback(insert, [updateValues, name, control]),\n update: React.useCallback(update, [updateValues, name, control]),\n replace: React.useCallback(replace, [updateValues, name, control]),\n fields: React.useMemo(\n () =>\n fields.map((field, index) => ({\n ...field,\n [keyName]: ids.current[index] || generateId(),\n })) as FieldArrayWithId<TFieldValues, TFieldArrayName, TKeyName>[],\n [fields, keyName],\n ),\n };\n}\n", "import { Noop } from '../types';\n\nexport type Observer<T> = {\n next: (value: T) => void;\n};\n\nexport type Subscription = {\n unsubscribe: Noop;\n};\n\nexport type Subject<T> = {\n readonly observers: Observer<T>[];\n subscribe: (value: Observer<T>) => Subscription;\n unsubscribe: Noop;\n} & Observer<T>;\n\nexport default <T>(): Subject<T> => {\n let _observers: Observer<T>[] = [];\n\n const next = (value: T) => {\n for (const observer of _observers) {\n observer.next && observer.next(value);\n }\n };\n\n const subscribe = (observer: Observer<T>): Subscription => {\n _observers.push(observer);\n return {\n unsubscribe: () => {\n _observers = _observers.filter((o) => o !== observer);\n },\n };\n };\n\n const unsubscribe = () => {\n _observers = [];\n };\n\n return {\n get observers() {\n return _observers;\n },\n next,\n subscribe,\n unsubscribe,\n };\n};\n", "import { Primitive } from '../types';\n\nimport isNullOrUndefined from './isNullOrUndefined';\nimport { isObjectType } from './isObject';\n\nexport default (value: unknown): value is Primitive =>\n isNullOrUndefined(value) || !isObjectType(value);\n", "import isObject from '../utils/isObject';\n\nimport isDateObject from './isDateObject';\nimport isPrimitive from './isPrimitive';\n\nexport default function deepEqual(object1: any, object2: any) {\n if (isPrimitive(object1) || isPrimitive(object2)) {\n return object1 === object2;\n }\n\n if (isDateObject(object1) && isDateObject(object2)) {\n return object1.getTime() === object2.getTime();\n }\n\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (const key of keys1) {\n const val1 = object1[key];\n\n if (!keys2.includes(key)) {\n return false;\n }\n\n if (key !== 'ref') {\n const val2 = object2[key];\n\n if (\n (isDateObject(val1) && isDateObject(val2)) ||\n (isObject(val1) && isObject(val2)) ||\n (Array.isArray(val1) && Array.isArray(val2))\n ? !deepEqual(val1, val2)\n : val1 !== val2\n ) {\n return false;\n }\n }\n }\n\n return true;\n}\n", "import { FieldElement } from '../types';\n\nexport default (element: FieldElement): element is HTMLSelectElement =>\n element.type === `select-multiple`;\n", "import { FieldElement } from '../types';\n\nimport isCheckBoxInput from './isCheckBoxInput';\nimport isRadioInput from './isRadioInput';\n\nexport default (ref: FieldElement): ref is HTMLInputElement =>\n isRadioInput(ref) || isCheckBoxInput(ref);\n", "import { Ref } from '../types';\n\nimport isHTMLElement from './isHTMLElement';\n\nexport default (ref: Ref) => isHTMLElement(ref) && ref.isConnected;\n", "import isFunction from './isFunction';\n\nexport default <T>(data: T): boolean => {\n for (const key in data) {\n if (isFunction(data[key])) {\n return true;\n }\n }\n return false;\n};\n", "import deepEqual from '../utils/deepEqual';\nimport isNullOrUndefined from '../utils/isNullOrUndefined';\nimport isObject from '../utils/isObject';\nimport isPrimitive from '../utils/isPrimitive';\nimport isUndefined from '../utils/isUndefined';\nimport objectHasFunction from '../utils/objectHasFunction';\n\nfunction markFieldsDirty<T>(data: T, fields: Record<string, any> = {}) {\n const isParentNodeArray = Array.isArray(data);\n\n if (isObject(data) || isParentNodeArray) {\n for (const key in data) {\n if (\n Array.isArray(data[key]) ||\n (isObject(data[key]) && !objectHasFunction(data[key]))\n ) {\n fields[key] = Array.isArray(data[key]) ? [] : {};\n markFieldsDirty(data[key], fields[key]);\n } else if (!isNullOrUndefined(data[key])) {\n fields[key] = true;\n }\n }\n }\n\n return fields;\n}\n\nfunction getDirtyFieldsFromDefaultValues<T>(\n data: T,\n formValues: T,\n dirtyFieldsFromValues: Record<\n Extract<keyof T, string>,\n ReturnType<typeof markFieldsDirty> | boolean\n >,\n) {\n const isParentNodeArray = Array.isArray(data);\n\n if (isObject(data) || isParentNodeArray) {\n for (const key in data) {\n if (\n Array.isArray(data[key]) ||\n (isObject(data[key]) && !objectHasFunction(data[key]))\n ) {\n if (\n isUndefined(formValues) ||\n isPrimitive(dirtyFieldsFromValues[key])\n ) {\n dirtyFieldsFromValues[key] = Array.isArray(data[key])\n ? markFieldsDirty(data[key], [])\n : { ...markFieldsDirty(data[key]) };\n } else {\n getDirtyFieldsFromDefaultValues(\n data[key],\n isNullOrUndefined(formValues) ? {} : formValues[key],\n dirtyFieldsFromValues[key],\n );\n }\n } else {\n dirtyFieldsFromValues[key] = !deepEqual(data[key], formValues[key]);\n }\n }\n }\n\n return dirtyFieldsFromValues;\n}\n\nexport default <T>(defaultValues: T, formValues: T) =>\n getDirtyFieldsFromDefaultValues(\n defaultValues,\n formValues,\n markFieldsDirty(formValues),\n );\n", "import { Field, NativeFieldValue } from '../types';\nimport isString from '../utils/isString';\nimport isUndefined from '../utils/isUndefined';\n\nexport default <T extends NativeFieldValue>(\n value: T,\n { valueAsNumber, valueAsDate, setValueAs }: Field['_f'],\n) =>\n isUndefined(value)\n ? value\n : valueAsNumber\n ? value === ''\n ? NaN\n : value\n ? +value\n : value\n : valueAsDate && isString(value)\n ? new Date(value)\n : setValueAs\n ? setValueAs(value)\n : value;\n", "import { Field } from '../types';\nimport isCheckBox from '../utils/isCheckBoxInput';\nimport isFileInput from '../utils/isFileInput';\nimport isMultipleSelect from '../utils/isMultipleSelect';\nimport isRadioInput from '../utils/isRadioInput';\nimport isUndefined from '../utils/isUndefined';\n\nimport getCheckboxValue from './getCheckboxValue';\nimport getFieldValueAs from './getFieldValueAs';\nimport getRadioValue from './getRadioValue';\n\nexport default function getFieldValue(_f: Field['_f']) {\n const ref = _f.ref;\n\n if (isFileInput(ref)) {\n return ref.files;\n }\n\n if (isRadioInput(ref)) {\n return getRadioValue(_f.refs).value;\n }\n\n if (isMultipleSelect(ref)) {\n return [...ref.selectedOptions].map(({ value }) => value);\n }\n\n if (isCheckBox(ref)) {\n return getCheckboxValue(_f.refs).value;\n }\n\n return getFieldValueAs(isUndefined(ref.value) ? _f.ref.value : ref.value, _f);\n}\n", "import {\n CriteriaMode,\n Field,\n FieldName,\n FieldRefs,\n FieldValues,\n InternalFieldName,\n} from '../types';\nimport { get } from '../utils';\nimport set from '../utils/set';\n\nexport default <TFieldValues extends FieldValues>(\n fieldsNames: Set<InternalFieldName> | InternalFieldName[],\n _fields: FieldRefs,\n criteriaMode?: CriteriaMode,\n shouldUseNativeValidation?: boolean | undefined,\n) => {\n const fields: Record<InternalFieldName, Field['_f']> = {};\n\n for (const name of fieldsNames) {\n const field: Field = get(_fields, name);\n\n field && set(fields, name, field._f);\n }\n\n return {\n criteriaMode,\n names: [...fieldsNames] as FieldName<TFieldValues>[],\n fields,\n shouldUseNativeValidation,\n };\n};\n", "import {\n ValidationRule,\n ValidationValue,\n ValidationValueMessage,\n} from '../types';\nimport isObject from '../utils/isObject';\nimport isRegex from '../utils/isRegex';\nimport isUndefined from '../utils/isUndefined';\n\nexport default <T extends ValidationValue>(\n rule?: ValidationRule<T> | ValidationValueMessage<T>,\n) =>\n isUndefined(rule)\n ? rule\n : isRegex(rule)\n ? rule.source\n : isObject(rule)\n ? isRegex(rule.value)\n ? rule.value.source\n : rule.value\n : rule;\n", "import { Field, Validate } from '../types';\nimport isFunction from '../utils/isFunction';\nimport isObject from '../utils/isObject';\n\nconst ASYNC_FUNCTION = 'AsyncFunction';\n\nexport default (fieldReference: Field['_f']) =>\n !!fieldReference &&\n !!fieldReference.validate &&\n !!(\n (isFunction(fieldReference.validate) &&\n fieldReference.validate.constructor.name === ASYNC_FUNCTION) ||\n (isObject(fieldReference.validate) &&\n Object.values(fieldReference.validate).find(\n (validateFunction: Validate<unknown, unknown>) =>\n validateFunction.constructor.name === ASYNC_FUNCTION,\n ))\n );\n", "import { Field } from '../types';\n\nexport default (options: Field['_f']) =>\n options.mount &&\n (options.required ||\n options.min ||\n options.max ||\n options.maxLength ||\n options.minLength ||\n options.pattern ||\n options.validate);\n", "import { FieldError, FieldErrors, FieldValues } from '../types';\nimport get from '../utils/get';\nimport isKey from '../utils/isKey';\n\nexport default function schemaErrorLookup<T extends FieldValues = FieldValues>(\n errors: FieldErrors<T>,\n _fields: FieldValues,\n name: string,\n): {\n error?: FieldError;\n name: string;\n} {\n const error = get(errors, name);\n\n if (error || isKey(name)) {\n return {\n error,\n name,\n };\n }\n\n const names = name.split('.');\n\n while (names.length) {\n const fieldName = names.join('.');\n const field = get(_fields, fieldName);\n const foundError = get(errors, fieldName);\n\n if (field && !Array.isArray(field) && name !== fieldName) {\n return { name };\n }\n\n if (foundError && foundError.type) {\n return {\n name: fieldName,\n error: foundError,\n };\n }\n\n names.pop();\n }\n\n return {\n name,\n };\n}\n", "import { ValidationModeFlags } from '../types';\n\nexport default (\n isBlurEvent: boolean,\n isTouched: boolean,\n isSubmitted: boolean,\n reValidateMode: {\n isOnBlur: boolean;\n isOnChange: boolean;\n },\n mode: Partial<ValidationModeFlags>,\n) => {\n if (mode.isOnAll) {\n return false;\n } else if (!isSubmitted && mode.isOnTouch) {\n return !(isTouched || isBlurEvent);\n } else if (isSubmitted ? reValidateMode.isOnBlur : mode.isOnBlur) {\n return !isBlurEvent;\n } else if (isSubmitted ? reValidateMode.isOnChange : mode.isOnChange) {\n return isBlurEvent;\n }\n return true;\n};\n", "import compact from '../utils/compact';\nimport get from '../utils/get';\nimport unset from '../utils/unset';\n\nexport default <T>(ref: T, name: string) =>\n !compact(get(ref, name)).length && unset(ref, name);\n", "import { EVENTS, VALIDATION_MODE } from '../constants';\nimport {\n BatchFieldArrayUpdate,\n ChangeHandler,\n Control,\n DeepPartial,\n DelayCallback,\n EventType,\n Field,\n FieldError,\n FieldErrors,\n FieldNamesMarkedBoolean,\n FieldPath,\n FieldRefs,\n FieldValues,\n FormState,\n GetIsDirty,\n InternalFieldName,\n Names,\n Path,\n PathValue,\n ReadFormState,\n Ref,\n SetFieldValue,\n SetValueConfig,\n Subjects,\n UseFormClearErrors,\n UseFormGetFieldState,\n UseFormGetValues,\n UseFormHandleSubmit,\n UseFormProps,\n UseFormRegister,\n UseFormReset,\n UseFormResetField,\n UseFormReturn,\n UseFormSetError,\n UseFormSetFocus,\n UseFormSetValue,\n UseFormTrigger,\n UseFormUnregister,\n UseFormWatch,\n WatchInternal,\n WatchObserver,\n} from '../types';\nimport cloneObject from '../utils/cloneObject';\nimport compact from '../utils/compact';\nimport convertToArrayPayload from '../utils/convertToArrayPayload';\nimport createSubject from '../utils/createSubject';\nimport deepEqual from '../utils/deepEqual';\nimport get from '../utils/get';\nimport isBoolean from '../utils/isBoolean';\nimport isCheckBoxInput from '../utils/isCheckBoxInput';\nimport isDateObject from '../utils/isDateObject';\nimport isEmptyObject from '../utils/isEmptyObject';\nimport isFileInput from '../utils/isFileInput';\nimport isFunction from '../utils/isFunction';\nimport isHTMLElement from '../utils/isHTMLElement';\nimport isMultipleSelect from '../utils/isMultipleSelect';\nimport isNullOrUndefined from '../utils/isNullOrUndefined';\nimport isObject from '../utils/isObject';\nimport isRadioOrCheckbox from '../utils/isRadioOrCheckbox';\nimport isString from '../utils/isString';\nimport isUndefined from '../utils/isUndefined';\nimport isWeb from '../utils/isWeb';\nimport live from '../utils/live';\nimport set from '../utils/set';\nimport unset from '../utils/unset';\n\nimport generateWatchOutput from './generateWatchOutput';\nimport getDirtyFields from './getDirtyFields';\nimport getEventValue from './getEventValue';\nimport getFieldValue from './getFieldValue';\nimport getFieldValueAs from './getFieldValueAs';\nimport getResolverOptions from './getResolverOptions';\nimport getRuleValue from './getRuleValue';\nimport getValidationModes from './getValidationModes';\nimport hasPromiseValidation from './hasPromiseValidation';\nimport hasValidation from './hasValidation';\nimport isNameInFieldArray from './isNameInFieldArray';\nimport isWatched from './isWatched';\nimport iterateFieldsByAction from './iterateFieldsByAction';\nimport schemaErrorLookup from './schemaErrorLookup';\nimport skipValidation from './skipValidation';\nimport unsetEmptyArray from './unsetEmptyArray';\nimport updateFieldArrayRootError from './updateFieldArrayRootError';\nimport validateField from './validateField';\n\nconst defaultOptions = {\n mode: VALIDATION_MODE.onSubmit,\n reValidateMode: VALIDATION_MODE.onChange,\n shouldFocusError: true,\n} as const;\n\nexport function createFormControl<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n>(\n props: UseFormProps<TFieldValues, TContext> = {},\n): Omit<UseFormReturn<TFieldValues, TContext>, 'formState'> {\n let _options = {\n ...defaultOptions,\n ...props,\n };\n let _formState: FormState<TFieldValues> = {\n submitCount: 0,\n isDirty: false,\n isLoading: isFunction(_options.defaultValues),\n isValidating: false,\n isSubmitted: false,\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: false,\n touchedFields: {},\n dirtyFields: {},\n validatingFields: {},\n errors: _options.errors || {},\n disabled: _options.disabled || false,\n };\n let _fields: FieldRefs = {};\n let _defaultValues =\n isObject(_options.defaultValues) || isObject(_options.values)\n ? cloneObject(_options.defaultValues || _options.values) || {}\n : {};\n let _formValues = _options.shouldUnregister\n ? {}\n : cloneObject(_defaultValues);\n let _state = {\n action: false,\n mount: false,\n watch: false,\n };\n let _names: Names = {\n mount: new Set(),\n disabled: new Set(),\n unMount: new Set(),\n array: new Set(),\n watch: new Set(),\n };\n let delayErrorCallback: DelayCallback | null;\n let timer = 0;\n const _proxyFormState: ReadFormState = {\n isDirty: false,\n dirtyFields: false,\n validatingFields: false,\n touchedFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n };\n const _subjects: Subjects<TFieldValues> = {\n values: createSubject(),\n array: createSubject(),\n state: createSubject(),\n };\n const validationModeBeforeSubmit = getValidationModes(_options.mode);\n const validationModeAfterSubmit = getValidationModes(_options.reValidateMode);\n const shouldDisplayAllAssociatedErrors =\n _options.criteriaMode === VALIDATION_MODE.all;\n\n const debounce =\n <T extends Function>(callback: T) =>\n (wait: number) => {\n clearTimeout(timer);\n timer = setTimeout(callback, wait);\n };\n\n const _updateValid = async (shouldUpdateValid?: boolean) => {\n if (!_options.disabled && (_proxyFormState.isValid || shouldUpdateValid)) {\n const isValid = _options.resolver\n ? isEmptyObject((await _executeSchema()).errors)\n : await executeBuiltInValidation(_fields, true);\n\n if (isValid !== _formState.isValid) {\n _subjects.state.next({\n isValid,\n });\n }\n }\n };\n\n const _updateIsValidating = (names?: string[], isValidating?: boolean) => {\n if (\n !_options.disabled &&\n (_proxyFormState.isValidating || _proxyFormState.validatingFields)\n ) {\n (names || Array.from(_names.mount)).forEach((name) => {\n if (name) {\n isValidating\n ? set(_formState.validatingFields, name, isValidating)\n : unset(_formState.validatingFields, name);\n }\n });\n\n _subjects.state.next({\n validatingFields: _formState.validatingFields,\n isValidating: !isEmptyObject(_formState.validatingFields),\n });\n }\n };\n\n const _updateFieldArray: BatchFieldArrayUpdate = (\n name,\n values = [],\n method,\n args,\n shouldSetValues = true,\n shouldUpdateFieldsAndState = true,\n ) => {\n if (args && method && !_options.disabled) {\n _state.action = true;\n if (shouldUpdateFieldsAndState && Array.isArray(get(_fields, name))) {\n const fieldValues = method(get(_fields, name), args.argA, args.argB);\n shouldSetValues && set(_fields, name, fieldValues);\n }\n\n if (\n shouldUpdateFieldsAndState &&\n Array.isArray(get(_formState.errors, name))\n ) {\n const errors = method(\n get(_formState.errors, name),\n args.argA,\n args.argB,\n );\n shouldSetValues && set(_formState.errors, name, errors);\n unsetEmptyArray(_formState.errors, name);\n }\n\n if (\n _proxyFormState.touchedFields &&\n shouldUpdateFieldsAndState &&\n Array.isArray(get(_formState.touchedFields, name))\n ) {\n const touchedFields = method(\n get(_formState.touchedFields, name),\n args.argA,\n args.argB,\n );\n shouldSetValues && set(_formState.touchedFields, name, touchedFields);\n }\n\n if (_proxyFormState.dirtyFields) {\n _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);\n }\n\n _subjects.state.next({\n name,\n isDirty: _getDirty(name, values),\n dirtyFields: _formState.dirtyFields,\n errors: _formState.errors,\n isValid: _formState.isValid,\n });\n } else {\n set(_formValues, name, values);\n }\n };\n\n const updateErrors = (name: InternalFieldName, error: FieldError) => {\n set(_formState.errors, name, error);\n _subjects.state.next({\n errors: _formState.errors,\n });\n };\n\n const _setErrors = (errors: FieldErrors<TFieldValues>) => {\n _formState.errors = errors;\n _subjects.state.next({\n errors: _formState.errors,\n isValid: false,\n });\n };\n\n const updateValidAndValue = (\n name: InternalFieldName,\n shouldSkipSetValueAs: boolean,\n value?: unknown,\n ref?: Ref,\n ) => {\n const field: Field = get(_fields, name);\n\n if (field) {\n const defaultValue = get(\n _formValues,\n name,\n isUndefined(value) ? get(_defaultValues, name) : value,\n );\n\n isUndefined(defaultValue) ||\n (ref && (ref as HTMLInputElement).defaultChecked) ||\n shouldSkipSetValueAs\n ? set(\n _formValues,\n name,\n shouldSkipSetValueAs ? defaultValue : getFieldValue(field._f),\n )\n : setFieldValue(name, defaultValue);\n\n _state.mount && _updateValid();\n }\n };\n\n const updateTouchAndDirty = (\n name: InternalFieldName,\n fieldValue: unknown,\n isBlurEvent?: boolean,\n shouldDirty?: boolean,\n shouldRender?: boolean,\n ): Partial<\n Pick<FormState<TFieldValues>, 'dirtyFields' | 'isDirty' | 'touchedFields'>\n > => {\n let shouldUpdateField = false;\n let isPreviousDirty = false;\n const output: Partial<FormState<TFieldValues>> & { name: string } = {\n name,\n };\n\n if (!_options.disabled) {\n const disabledField = !!(\n get(_fields, name) &&\n get(_fields, name)._f &&\n get(_fields, name)._f.disabled\n );\n if (!isBlurEvent || shouldDirty) {\n if (_proxyFormState.isDirty) {\n isPreviousDirty = _formState.isDirty;\n _formState.isDirty = output.isDirty = _getDirty();\n shouldUpdateField = isPreviousDirty !== output.isDirty;\n }\n\n const isCurrentFieldPristine =\n disabledField || deepEqual(get(_defaultValues, name), fieldValue);\n\n isPreviousDirty = !!(\n !disabledField && get(_formState.dirtyFields, name)\n );\n isCurrentFieldPristine || disabledField\n ? unset(_formState.dirtyFields, name)\n : set(_formState.dirtyFields, name, true);\n output.dirtyFields = _formState.dirtyFields;\n shouldUpdateField =\n shouldUpdateField ||\n (_proxyFormState.dirtyFields &&\n isPreviousDirty !== !isCurrentFieldPristine);\n }\n\n if (isBlurEvent) {\n const isPreviousFieldTouched = get(_formState.touchedFields, name);\n\n if (!isPreviousFieldTouched) {\n set(_formState.touchedFields, name, isBlurEvent);\n output.touchedFields = _formState.touchedFields;\n shouldUpdateField =\n shouldUpdateField ||\n (_proxyFormState.touchedFields &&\n isPreviousFieldTouched !== isBlurEvent);\n }\n }\n\n shouldUpdateField && shouldRender && _subjects.state.next(output);\n }\n\n return shouldUpdateField ? output : {};\n };\n\n const shouldRenderByError = (\n name: InternalFieldName,\n isValid?: boolean,\n error?: FieldError,\n fieldState?: {\n dirty?: FieldNamesMarkedBoolean<TFieldValues>;\n isDirty?: boolean;\n touched?: FieldNamesMarkedBoolean<TFieldValues>;\n },\n ) => {\n const previousFieldError = get(_formState.errors, name);\n const shouldUpdateValid =\n _proxyFormState.isValid &&\n isBoolean(isValid) &&\n _formState.isValid !== isValid;\n\n if (_options.delayError && error) {\n delayErrorCallback = debounce(() => updateErrors(name, error));\n delayErrorCallback(_options.delayError);\n } else {\n clearTimeout(timer);\n delayErrorCallback = null;\n error\n ? set(_formState.errors, name, error)\n : unset(_formState.errors, name);\n }\n\n if (\n (error ? !deepEqual(previousFieldError, error) : previousFieldError) ||\n !isEmptyObject(fieldState) ||\n shouldUpdateValid\n ) {\n const updatedFormState = {\n ...fieldState,\n ...(shouldUpdateValid && isBoolean(isValid) ? { isValid } : {}),\n errors: _formState.errors,\n name,\n };\n\n _formState = {\n ..._formState,\n ...updatedFormState,\n };\n\n _subjects.state.next(updatedFormState);\n }\n };\n\n const _executeSchema = async (name?: InternalFieldName[]) => {\n _updateIsValidating(name, true);\n const result = await _options.resolver!(\n _formValues as TFieldValues,\n _options.context,\n getResolverOptions(\n name || _names.mount,\n _fields,\n _options.criteriaMode,\n _options.shouldUseNativeValidation,\n ),\n );\n _updateIsValidating(name);\n return result;\n };\n\n const executeSchemaAndUpdateState = async (names?: InternalFieldName[]) => {\n const { errors } = await _executeSchema(names);\n\n if (names) {\n for (const name of names) {\n const error = get(errors, name);\n error\n ? set(_formState.errors, name, error)\n : unset(_formState.errors, name);\n }\n } else {\n _formState.errors = errors;\n }\n\n return errors;\n };\n\n const executeBuiltInValidation = async (\n fields: FieldRefs,\n shouldOnlyCheckValid?: boolean,\n context: {\n valid: boolean;\n } = {\n valid: true,\n },\n ) => {\n for (const name in fields) {\n const field = fields[name];\n\n if (field) {\n const { _f, ...fieldValue } = field as Field;\n\n if (_f) {\n const isFieldArrayRoot = _names.array.has(_f.name);\n const isPromiseFunction =\n field._f && hasPromiseValidation((field as Field)._f);\n\n if (isPromiseFunction && _proxyFormState.validatingFields) {\n _updateIsValidating([name], true);\n }\n\n const fieldError = await validateField(\n field as Field,\n _names.disabled,\n _formValues,\n shouldDisplayAllAssociatedErrors,\n _options.shouldUseNativeValidation && !shouldOnlyCheckValid,\n isFieldArrayRoot,\n );\n\n if (isPromiseFunction && _proxyFormState.validatingFields) {\n _updateIsValidating([name]);\n }\n\n if (fieldError[_f.name]) {\n context.valid = false;\n if (shouldOnlyCheckValid) {\n break;\n }\n }\n\n !shouldOnlyCheckValid &&\n (get(fieldError, _f.name)\n ? isFieldArrayRoot\n ? updateFieldArrayRootError(\n _formState.errors,\n fieldError,\n _f.name,\n )\n : set(_formState.errors, _f.name, fieldError[_f.name])\n : unset(_formState.errors, _f.name));\n }\n\n !isEmptyObject(fieldValue) &&\n (await executeBuiltInValidation(\n fieldValue,\n shouldOnlyCheckValid,\n context,\n ));\n }\n }\n\n return context.valid;\n };\n\n const _removeUnmounted = () => {\n for (const name of _names.unMount) {\n const field: Field = get(_fields, name);\n\n field &&\n (field._f.refs\n ? field._f.refs.every((ref) => !live(ref))\n : !live(field._f.ref)) &&\n unregister(name as FieldPath<TFieldValues>);\n }\n\n _names.unMount = new Set();\n };\n\n const _getDirty: GetIsDirty = (name, data) =>\n !_options.disabled &&\n (name && data && set(_formValues, name, data),\n !deepEqual(getValues(), _defaultValues));\n\n const _getWatch: WatchInternal<TFieldValues> = (\n names,\n defaultValue,\n isGlobal,\n ) =>\n generateWatchOutput(\n names,\n _names,\n {\n ...(_state.mount\n ? _formValues\n : isUndefined(defaultValue)\n ? _defaultValues\n : isString(names)\n ? { [names]: defaultValue }\n : defaultValue),\n },\n isGlobal,\n defaultValue,\n );\n\n const _getFieldArray = <TFieldArrayValues>(\n name: InternalFieldName,\n ): Partial<TFieldArrayValues>[] =>\n compact(\n get(\n _state.mount ? _formValues : _defaultValues,\n name,\n _options.shouldUnregister ? get(_defaultValues, name, []) : [],\n ),\n );\n\n const setFieldValue = (\n name: InternalFieldName,\n value: SetFieldValue<TFieldValues>,\n options: SetValueConfig = {},\n ) => {\n const field: Field = get(_fields, name);\n let fieldValue: unknown = value;\n\n if (field) {\n const fieldReference = field._f;\n\n if (fieldReference) {\n !fieldReference.disabled &&\n set(_formValues, name, getFieldValueAs(value, fieldReference));\n\n fieldValue =\n isHTMLElement(fieldReference.ref) && isNullOrUndefined(value)\n ? ''\n : value;\n\n if (isMultipleSelect(fieldReference.ref)) {\n [...fieldReference.ref.options].forEach(\n (optionRef) =>\n (optionRef.selected = (\n fieldValue as InternalFieldName[]\n ).includes(optionRef.value)),\n );\n } else if (fieldReference.refs) {\n if (isCheckBoxInput(fieldReference.ref)) {\n fieldReference.refs.length > 1\n ? fieldReference.refs.forEach(\n (checkboxRef) =>\n (!checkboxRef.defaultChecked || !checkboxRef.disabled) &&\n (checkboxRef.checked = Array.isArray(fieldValue)\n ? !!(fieldValue as []).find(\n (data: string) => data === checkboxRef.value,\n )\n : fieldValue === checkboxRef.value),\n )\n : fieldReference.refs[0] &&\n (fieldReference.refs[0].checked = !!fieldValue);\n } else {\n fieldReference.refs.forEach(\n (radioRef: HTMLInputElement) =>\n (radioRef.checked = radioRef.value === fieldValue),\n );\n }\n } else if (isFileInput(fieldReference.ref)) {\n fieldReference.ref.value = '';\n } else {\n fieldReference.ref.value = fieldValue;\n\n if (!fieldReference.ref.type) {\n _subjects.values.next({\n name,\n values: { ..._formValues },\n });\n }\n }\n }\n }\n\n (options.shouldDirty || options.shouldTouch) &&\n updateTouchAndDirty(\n name,\n fieldValue,\n options.shouldTouch,\n options.shouldDirty,\n true,\n );\n\n options.shouldValidate && trigger(name as Path<TFieldValues>);\n };\n\n const setValues = <\n T extends InternalFieldName,\n K extends SetFieldValue<TFieldValues>,\n U extends SetValueConfig,\n >(\n name: T,\n value: K,\n options: U,\n ) => {\n for (const fieldKey in value) {\n const fieldValue = value[fieldKey];\n const fieldName = `${name}.${fieldKey}`;\n const field = get(_fields, fieldName);\n\n (_names.array.has(name) ||\n isObject(fieldValue) ||\n (field && !field._f)) &&\n !isDateObject(fieldValue)\n ? setValues(fieldName, fieldValue, options)\n : setFieldValue(fieldName, fieldValue, options);\n }\n };\n\n const setValue: UseFormSetValue<TFieldValues> = (\n name,\n value,\n options = {},\n ) => {\n const field = get(_fields, name);\n const isFieldArray = _names.array.has(name);\n const cloneValue = cloneObject(value);\n\n set(_formValues, name, cloneValue);\n\n if (isFieldArray) {\n _subjects.array.next({\n name,\n values: { ..._formValues },\n });\n\n if (\n (_proxyFormState.isDirty || _proxyFormState.dirtyFields) &&\n options.shouldDirty\n ) {\n _subjects.state.next({\n name,\n dirtyFields: getDirtyFields(_defaultValues, _formValues),\n isDirty: _getDirty(name, cloneValue),\n });\n }\n } else {\n field && !field._f && !isNullOrUndefined(cloneValue)\n ? setValues(name, cloneValue, options)\n : setFieldValue(name, cloneValue, options);\n }\n\n isWatched(name, _names) && _subjects.state.next({ ..._formState });\n _subjects.values.next({\n name: _state.mount ? name : undefined,\n values: { ..._formValues },\n });\n };\n\n const onChange: ChangeHandler = async (event) => {\n _state.mount = true;\n const target = event.target;\n let name = target.name as string;\n let isFieldValueUpdated = true;\n const field: Field = get(_fields, name);\n const getCurrentFieldValue = () =>\n target.type ? getFieldValue(field._f) : getEventValue(event);\n const _updateIsFieldValueUpdated = (fieldValue: any): void => {\n isFieldValueUpdated =\n Number.isNaN(fieldValue) ||\n (isDateObject(fieldValue) && isNaN(fieldValue.getTime())) ||\n deepEqual(fieldValue, get(_formValues, name, fieldValue));\n };\n\n if (field) {\n let error;\n let isValid;\n const fieldValue = getCurrentFieldValue();\n const isBlurEvent =\n event.type === EVENTS.BLUR || event.type === EVENTS.FOCUS_OUT;\n const shouldSkipValidation =\n (!hasValidation(field._f) &&\n !_options.resolver &&\n !get(_formState.errors, name) &&\n !field._f.deps) ||\n skipValidation(\n isBlurEvent,\n get(_formState.touchedFields, name),\n _formState.isSubmitted,\n validationModeAfterSubmit,\n validationModeBeforeSubmit,\n );\n const watched = isWatched(name, _names, isBlurEvent);\n\n set(_formValues, name, fieldValue);\n\n if (isBlurEvent) {\n field._f.onBlur && field._f.onBlur(event);\n delayErrorCallback && delayErrorCallback(0);\n } else if (field._f.onChange) {\n field._f.onChange(event);\n }\n\n const fieldState = updateTouchAndDirty(\n name,\n fieldValue,\n isBlurEvent,\n false,\n );\n\n const shouldRender = !isEmptyObject(fieldState) || watched;\n\n !isBlurEvent &&\n _subjects.values.next({\n name,\n type: event.type,\n values: { ..._formValues },\n });\n\n if (shouldSkipValidation) {\n if (_proxyFormState.isValid) {\n if (_options.mode === 'onBlur' && isBlurEvent) {\n _updateValid();\n } else if (!isBlurEvent) {\n _updateValid();\n }\n }\n\n return (\n shouldRender &&\n _subjects.state.next({ name, ...(watched ? {} : fieldState) })\n );\n }\n\n !isBlurEvent && watched && _subjects.state.next({ ..._formState });\n\n if (_options.resolver) {\n const { errors } = await _executeSchema([name]);\n\n _updateIsFieldValueUpdated(fieldValue);\n\n if (isFieldValueUpdated) {\n const previousErrorLookupResult = schemaErrorLookup(\n _formState.errors,\n _fields,\n name,\n );\n const errorLookupResult = schemaErrorLookup(\n errors,\n _fields,\n previousErrorLookupResult.name || name,\n );\n\n error = errorLookupResult.error;\n name = errorLookupResult.name;\n\n isValid = isEmptyObject(errors);\n }\n } else {\n _updateIsValidating([name], true);\n error = (\n await validateField(\n field,\n _names.disabled,\n _formValues,\n shouldDisplayAllAssociatedErrors,\n _options.shouldUseNativeValidation,\n )\n )[name];\n _updateIsValidating([name]);\n\n _updateIsFieldValueUpdated(fieldValue);\n\n if (isFieldValueUpdated) {\n if (error) {\n isValid = false;\n } else if (_proxyFormState.isValid) {\n isValid = await executeBuiltInValidation(_fields, true);\n }\n }\n }\n\n if (isFieldValueUpdated) {\n field._f.deps &&\n trigger(\n field._f.deps as\n | FieldPath<TFieldValues>\n | FieldPath<TFieldValues>[],\n );\n shouldRenderByError(name, isValid, error, fieldState);\n }\n }\n };\n\n const _focusInput = (ref: Ref, key: string) => {\n if (get(_formState.errors, key) && ref.focus) {\n ref.focus();\n return 1;\n }\n return;\n };\n\n const trigger: UseFormTrigger<TFieldValues> = async (name, options = {}) => {\n let isValid;\n let validationResult;\n const fieldNames = convertToArrayPayload(name) as InternalFieldName[];\n\n if (_options.resolver) {\n const errors = await executeSchemaAndUpdateState(\n isUndefined(name) ? name : fieldNames,\n );\n\n isValid = isEmptyObject(errors);\n validationResult = name\n ? !fieldNames.some((name) => get(errors, name))\n : isValid;\n } else if (name) {\n validationResult = (\n await Promise.all(\n fieldNames.map(async (fieldName) => {\n const field = get(_fields, fieldName);\n return await executeBuiltInValidation(\n field && field._f ? { [fieldName]: field } : field,\n );\n }),\n )\n ).every(Boolean);\n !(!validationResult && !_formState.isValid) && _updateValid();\n } else {\n validationResult = isValid = await executeBuiltInValidation(_fields);\n }\n\n _subjects.state.next({\n ...(!isString(name) ||\n (_proxyFormState.isValid && isValid !== _formState.isValid)\n ? {}\n : { name }),\n ...(_options.resolver || !name ? { isValid } : {}),\n errors: _formState.errors,\n });\n\n options.shouldFocus &&\n !validationResult &&\n iterateFieldsByAction(\n _fields,\n _focusInput,\n name ? fieldNames : _names.mount,\n );\n\n return validationResult;\n };\n\n const getValues: UseFormGetValues<TFieldValues> = (\n fieldNames?:\n | FieldPath<TFieldValues>\n | ReadonlyArray<FieldPath<TFieldValues>>,\n ) => {\n const values = {\n ...(_state.mount ? _formValues : _defaultValues),\n };\n\n return isUndefined(fieldNames)\n ? values\n : isString(fieldNames)\n ? get(values, fieldNames)\n : fieldNames.map((name) => get(values, name));\n };\n\n const getFieldState: UseFormGetFieldState<TFieldValues> = (\n name,\n formState,\n ) => ({\n invalid: !!get((formState || _formState).errors, name),\n isDirty: !!get((formState || _formState).dirtyFields, name),\n error: get((formState || _formState).errors, name),\n isValidating: !!get(_formState.validatingFields, name),\n isTouched: !!get((formState || _formState).touchedFields, name),\n });\n\n const clearErrors: UseFormClearErrors<TFieldValues> = (name) => {\n name &&\n convertToArrayPayload(name).forEach((inputName) =>\n unset(_formState.errors, inputName),\n );\n\n _subjects.state.next({\n errors: name ? _formState.errors : {},\n });\n };\n\n const setError: UseFormSetError<TFieldValues> = (name, error, options) => {\n const ref = (get(_fields, name, { _f: {} })._f || {}).ref;\n const currentError = get(_formState.errors, name) || {};\n\n // Don't override existing error messages elsewhere in the object tree.\n const { ref: currentRef, message, type, ...restOfErrorTree } = currentError;\n\n set(_formState.errors, name, {\n ...restOfErrorTree,\n ...error,\n ref,\n });\n\n _subjects.state.next({\n name,\n errors: _formState.errors,\n isValid: false,\n });\n\n options && options.shouldFocus && ref && ref.focus && ref.focus();\n };\n\n const watch: UseFormWatch<TFieldValues> = (\n name?:\n | FieldPath<TFieldValues>\n | ReadonlyArray<FieldPath<TFieldValues>>\n | WatchObserver<TFieldValues>,\n defaultValue?: DeepPartial<TFieldValues>,\n ) =>\n isFunction(name)\n ? _subjects.values.subscribe({\n next: (payload) =>\n name(\n _getWatch(undefined, defaultValue),\n payload as {\n name?: FieldPath<TFieldValues>;\n type?: EventType;\n value?: unknown;\n },\n ),\n })\n : _getWatch(\n name as InternalFieldName | InternalFieldName[],\n defaultValue,\n true,\n );\n\n const unregister: UseFormUnregister<TFieldValues> = (name, options = {}) => {\n for (const fieldName of name ? convertToArrayPayload(name) : _names.mount) {\n _names.mount.delete(fieldName);\n _names.array.delete(fieldName);\n\n if (!options.keepValue) {\n unset(_fields, fieldName);\n unset(_formValues, fieldName);\n }\n\n !options.keepError && unset(_formState.errors, fieldName);\n !options.keepDirty && unset(_formState.dirtyFields, fieldName);\n !options.keepTouched && unset(_formState.touchedFields, fieldName);\n !options.keepIsValidating &&\n unset(_formState.validatingFields, fieldName);\n !_options.shouldUnregister &&\n !options.keepDefaultValue &&\n unset(_defaultValues, fieldName);\n }\n\n _subjects.values.next({\n values: { ..._formValues },\n });\n\n _subjects.state.next({\n ..._formState,\n ...(!options.keepDirty ? {} : { isDirty: _getDirty() }),\n });\n\n !options.keepIsValid && _updateValid();\n };\n\n const _updateDisabledField: Control<TFieldValues>['_updateDisabledField'] = ({\n disabled,\n name,\n field,\n fields,\n }) => {\n if (\n (isBoolean(disabled) && _state.mount) ||\n !!disabled ||\n _names.disabled.has(name)\n ) {\n disabled ? _names.disabled.add(name) : _names.disabled.delete(name);\n\n updateTouchAndDirty(\n name,\n getFieldValue(field ? field._f : get(fields, name)._f),\n false,\n false,\n true,\n );\n }\n };\n\n const register: UseFormRegister<TFieldValues> = (name, options = {}) => {\n let field = get(_fields, name);\n const disabledIsDefined =\n isBoolean(options.disabled) || isBoolean(_options.disabled);\n\n set(_fields, name, {\n ...(field || {}),\n _f: {\n ...(field && field._f ? field._f : { ref: { name } }),\n name,\n mount: true,\n ...options,\n },\n });\n _names.mount.add(name);\n\n if (field) {\n _updateDisabledField({\n field,\n disabled: isBoolean(options.disabled)\n ? options.disabled\n : _options.disabled,\n name,\n });\n } else {\n updateValidAndValue(name, true, options.value);\n }\n\n return {\n ...(disabledIsDefined\n ? { disabled: options.disabled || _options.disabled }\n : {}),\n ...(_options.progressive\n ? {\n required: !!options.required,\n min: getRuleValue(options.min),\n max: getRuleValue(options.max),\n minLength: getRuleValue<number>(options.minLength) as number,\n maxLength: getRuleValue(options.maxLength) as number,\n pattern: getRuleValue(options.pattern) as string,\n }\n : {}),\n name,\n onChange,\n onBlur: onChange,\n ref: (ref: HTMLInputElement | null): void => {\n if (ref) {\n register(name, options);\n field = get(_fields, name);\n\n const fieldRef = isUndefined(ref.value)\n ? ref.querySelectorAll\n ? (ref.querySelectorAll('input,select,textarea')[0] as Ref) || ref\n : ref\n : ref;\n const radioOrCheckbox = isRadioOrCheckbox(fieldRef);\n const refs = field._f.refs || [];\n\n if (\n radioOrCheckbox\n ? refs.find((option: Ref) => option === fieldRef)\n : fieldRef === field._f.ref\n ) {\n return;\n }\n\n set(_fields, name, {\n _f: {\n ...field._f,\n ...(radioOrCheckbox\n ? {\n refs: [\n ...refs.filter(live),\n fieldRef,\n ...(Array.isArray(get(_defaultValues, name)) ? [{}] : []),\n ],\n ref: { type: fieldRef.type, name },\n }\n : { ref: fieldRef }),\n },\n });\n\n updateValidAndValue(name, false, undefined, fieldRef);\n } else {\n field = get(_fields, name, {});\n\n if (field._f) {\n field._f.mount = false;\n }\n\n (_options.shouldUnregister || options.shouldUnregister) &&\n !(isNameInFieldArray(_names.array, name) && _state.action) &&\n _names.unMount.add(name);\n }\n },\n };\n };\n\n const _focusError = () =>\n _options.shouldFocusError &&\n iterateFieldsByAction(_fields, _focusInput, _names.mount);\n\n const _disableForm = (disabled?: boolean) => {\n if (isBoolean(disabled)) {\n _subjects.state.next({ disabled });\n iterateFieldsByAction(\n _fields,\n (ref, name) => {\n const currentField: Field = get(_fields, name);\n if (currentField) {\n ref.disabled = currentField._f.disabled || disabled;\n\n if (Array.isArray(currentField._f.refs)) {\n currentField._f.refs.forEach((inputRef) => {\n inputRef.disabled = currentField._f.disabled || disabled;\n });\n }\n }\n },\n 0,\n false,\n );\n }\n };\n\n const handleSubmit: UseFormHandleSubmit<TFieldValues> =\n (onValid, onInvalid) => async (e) => {\n let onValidError = undefined;\n if (e) {\n e.preventDefault && e.preventDefault();\n e.persist && e.persist();\n }\n\n let fieldValues = cloneObject(_formValues);\n\n if (_names.disabled.size) {\n for (const name of _names.disabled) {\n set(fieldValues, name, undefined);\n }\n }\n\n _subjects.state.next({\n isSubmitting: true,\n });\n\n if (_options.resolver) {\n const { errors, values } = await _executeSchema();\n _formState.errors = errors;\n fieldValues = values;\n } else {\n await executeBuiltInValidation(_fields);\n }\n\n unset(_formState.errors, 'root');\n\n if (isEmptyObject(_formState.errors)) {\n _subjects.state.next({\n errors: {},\n });\n try {\n await onValid(fieldValues as TFieldValues, e);\n } catch (error) {\n onValidError = error;\n }\n } else {\n if (onInvalid) {\n await onInvalid({ ..._formState.errors }, e);\n }\n _focusError();\n setTimeout(_focusError);\n }\n\n _subjects.state.next({\n isSubmitted: true,\n isSubmitting: false,\n isSubmitSuccessful: isEmptyObject(_formState.errors) && !onValidError,\n submitCount: _formState.submitCount + 1,\n errors: _formState.errors,\n });\n if (onValidError) {\n throw onValidError;\n }\n };\n\n const resetField: UseFormResetField<TFieldValues> = (name, options = {}) => {\n if (get(_fields, name)) {\n if (isUndefined(options.defaultValue)) {\n setValue(name, cloneObject(get(_defaultValues, name)));\n } else {\n setValue(\n name,\n options.defaultValue as PathValue<\n TFieldValues,\n FieldPath<TFieldValues>\n >,\n );\n set(_defaultValues, name, cloneObject(options.defaultValue));\n }\n\n if (!options.keepTouched) {\n unset(_formState.touchedFields, name);\n }\n\n if (!options.keepDirty) {\n unset(_formState.dirtyFields, name);\n _formState.isDirty = options.defaultValue\n ? _getDirty(name, cloneObject(get(_defaultValues, name)))\n : _getDirty();\n }\n\n if (!options.keepError) {\n unset(_formState.errors, name);\n _proxyFormState.isValid && _updateValid();\n }\n\n _subjects.state.next({ ..._formState });\n }\n };\n\n const _reset: UseFormReset<TFieldValues> = (\n formValues,\n keepStateOptions = {},\n ) => {\n const updatedValues = formValues ? cloneObject(formValues) : _defaultValues;\n const cloneUpdatedValues = cloneObject(updatedValues);\n const isEmptyResetValues = isEmptyObject(formValues);\n const values = isEmptyResetValues ? _defaultValues : cloneUpdatedValues;\n\n if (!keepStateOptions.keepDefaultValues) {\n _defaultValues = updatedValues;\n }\n\n if (!keepStateOptions.keepValues) {\n if (keepStateOptions.keepDirtyValues) {\n const fieldsToCheck = new Set([\n ..._names.mount,\n ...Object.keys(getDirtyFields(_defaultValues, _formValues)),\n ]);\n for (const fieldName of Array.from(fieldsToCheck)) {\n get(_formState.dirtyFields, fieldName)\n ? set(values, fieldName, get(_formValues, fieldName))\n : setValue(\n fieldName as FieldPath<TFieldValues>,\n get(values, fieldName),\n );\n }\n } else {\n if (isWeb && isUndefined(formValues)) {\n for (const name of _names.mount) {\n const field = get(_fields, name);\n if (field && field._f) {\n const fieldReference = Array.isArray(field._f.refs)\n ? field._f.refs[0]\n : field._f.ref;\n\n if (isHTMLElement(fieldReference)) {\n const form = fieldReference.closest('form');\n if (form) {\n form.reset();\n break;\n }\n }\n }\n }\n }\n\n _fields = {};\n }\n\n _formValues = _options.shouldUnregister\n ? keepStateOptions.keepDefaultValues\n ? cloneObject(_defaultValues)\n : {}\n : cloneObject(values);\n\n _subjects.array.next({\n values: { ...values },\n });\n\n _subjects.values.next({\n values: { ...values },\n });\n }\n\n _names = {\n mount: keepStateOptions.keepDirtyValues ? _names.mount : new Set(),\n unMount: new Set(),\n array: new Set(),\n disabled: new Set(),\n watch: new Set(),\n watchAll: false,\n focus: '',\n };\n\n _state.mount =\n !_proxyFormState.isValid ||\n !!keepStateOptions.keepIsValid ||\n !!keepStateOptions.keepDirtyValues;\n\n _state.watch = !!_options.shouldUnregister;\n\n _subjects.state.next({\n submitCount: keepStateOptions.keepSubmitCount\n ? _formState.submitCount\n : 0,\n isDirty: isEmptyResetValues\n ? false\n : keepStateOptions.keepDirty\n ? _formState.isDirty\n : !!(\n keepStateOptions.keepDefaultValues &&\n !deepEqual(formValues, _defaultValues)\n ),\n isSubmitted: keepStateOptions.keepIsSubmitted\n ? _formState.isSubmitted\n : false,\n dirtyFields: isEmptyResetValues\n ? {}\n : keepStateOptions.keepDirtyValues\n ? keepStateOptions.keepDefaultValues && _formValues\n ? getDirtyFields(_defaultValues, _formValues)\n : _formState.dirtyFields\n : keepStateOptions.keepDefaultValues && formValues\n ? getDirtyFields(_defaultValues, formValues)\n : keepStateOptions.keepDirty\n ? _formState.dirtyFields\n : {},\n touchedFields: keepStateOptions.keepTouched\n ? _formState.touchedFields\n : {},\n errors: keepStateOptions.keepErrors ? _formState.errors : {},\n isSubmitSuccessful: keepStateOptions.keepIsSubmitSuccessful\n ? _formState.isSubmitSuccessful\n : false,\n isSubmitting: false,\n });\n };\n\n const reset: UseFormReset<TFieldValues> = (formValues, keepStateOptions) =>\n _reset(\n isFunction(formValues)\n ? (formValues as Function)(_formValues as TFieldValues)\n : formValues,\n keepStateOptions,\n );\n\n const setFocus: UseFormSetFocus<TFieldValues> = (name, options = {}) => {\n const field = get(_fields, name);\n const fieldReference = field && field._f;\n\n if (fieldReference) {\n const fieldRef = fieldReference.refs\n ? fieldReference.refs[0]\n : fieldReference.ref;\n\n if (fieldRef.focus) {\n fieldRef.focus();\n options.shouldSelect &&\n isFunction(fieldRef.select) &&\n fieldRef.select();\n }\n }\n };\n\n const _updateFormState = (\n updatedFormState: Partial<FormState<TFieldValues>>,\n ) => {\n _formState = {\n ..._formState,\n ...updatedFormState,\n };\n };\n\n const _resetDefaultValues = () =>\n isFunction(_options.defaultValues) &&\n (_options.defaultValues as Function)().then((values: TFieldValues) => {\n reset(values, _options.resetOptions);\n _subjects.state.next({\n isLoading: false,\n });\n });\n\n return {\n control: {\n register,\n unregister,\n getFieldState,\n handleSubmit,\n setError,\n _executeSchema,\n _getWatch,\n _getDirty,\n _updateValid,\n _removeUnmounted,\n _updateFieldArray,\n _updateDisabledField,\n _getFieldArray,\n _reset,\n _resetDefaultValues,\n _updateFormState,\n _disableForm,\n _subjects,\n _proxyFormState,\n _setErrors,\n get _fields() {\n return _fields;\n },\n get _formValues() {\n return _formValues;\n },\n get _state() {\n return _state;\n },\n set _state(value) {\n _state = value;\n },\n get _defaultValues() {\n return _defaultValues;\n },\n get _names() {\n return _names;\n },\n set _names(value) {\n _names = value;\n },\n get _formState() {\n return _formState;\n },\n set _formState(value) {\n _formState = value;\n },\n get _options() {\n return _options;\n },\n set _options(value) {\n _options = {\n ..._options,\n ...value,\n };\n },\n },\n trigger,\n register,\n handleSubmit,\n watch,\n setValue,\n getValues,\n reset,\n resetField,\n clearErrors,\n unregister,\n setError,\n setFocus,\n getFieldState,\n };\n}\n", "import React from 'react';\n\nimport { createFormControl } from './logic/createFormControl';\nimport getProxyFormState from './logic/getProxyFormState';\nimport shouldRenderFormState from './logic/shouldRenderFormState';\nimport deepEqual from './utils/deepEqual';\nimport isFunction from './utils/isFunction';\nimport {\n FieldValues,\n FormState,\n InternalFieldName,\n UseFormProps,\n UseFormReturn,\n} from './types';\nimport { useSubscribe } from './useSubscribe';\n\n/**\n * Custom hook to manage the entire form.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useform) • [Demo](https://codesandbox.io/s/react-hook-form-get-started-ts-5ksmm) • [Video](https://www.youtube.com/watch?v=RkXv4AXXC_4)\n *\n * @param props - form configuration and validation parameters.\n *\n * @returns methods - individual functions to manage the form state. {@link UseFormReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, handleSubmit, watch, formState: { errors } } = useForm();\n * const onSubmit = data => console.log(data);\n *\n * console.log(watch(\"example\"));\n *\n * return (\n * <form onSubmit={handleSubmit(onSubmit)}>\n * <input defaultValue=\"test\" {...register(\"example\")} />\n * <input {...register(\"exampleRequired\", { required: true })} />\n * {errors.exampleRequired && <span>This field is required</span>}\n * <button>Submit</button>\n * </form>\n * );\n * }\n * ```\n */\nexport function useForm<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TTransformedValues extends FieldValues | undefined = undefined,\n>(\n props: UseFormProps<TFieldValues, TContext> = {},\n): UseFormReturn<TFieldValues, TContext, TTransformedValues> {\n const _formControl = React.useRef<\n UseFormReturn<TFieldValues, TContext, TTransformedValues> | undefined\n >(undefined);\n const _values = React.useRef<typeof props.values>(undefined);\n const [formState, updateFormState] = React.useState<FormState<TFieldValues>>({\n isDirty: false,\n isValidating: false,\n isLoading: isFunction(props.defaultValues),\n isSubmitted: false,\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: false,\n submitCount: 0,\n dirtyFields: {},\n touchedFields: {},\n validatingFields: {},\n errors: props.errors || {},\n disabled: props.disabled || false,\n defaultValues: isFunction(props.defaultValues)\n ? undefined\n : props.defaultValues,\n });\n\n if (!_formControl.current) {\n _formControl.current = {\n ...createFormControl(props),\n formState,\n };\n }\n\n const control = _formControl.current.control;\n control._options = props;\n\n useSubscribe({\n subject: control._subjects.state,\n next: (\n value: Partial<FormState<TFieldValues>> & { name?: InternalFieldName },\n ) => {\n if (\n shouldRenderFormState(\n value,\n control._proxyFormState,\n control._updateFormState,\n true,\n )\n ) {\n updateFormState({ ...control._formState });\n }\n },\n });\n\n React.useEffect(\n () => control._disableForm(props.disabled),\n [control, props.disabled],\n );\n\n React.useEffect(() => {\n if (control._proxyFormState.isDirty) {\n const isDirty = control._getDirty();\n if (isDirty !== formState.isDirty) {\n control._subjects.state.next({\n isDirty,\n });\n }\n }\n }, [control, formState.isDirty]);\n\n React.useEffect(() => {\n if (props.values && !deepEqual(props.values, _values.current)) {\n control._reset(props.values, control._options.resetOptions);\n _values.current = props.values;\n updateFormState((state) => ({ ...state }));\n } else {\n control._resetDefaultValues();\n }\n }, [props.values, control]);\n\n React.useEffect(() => {\n if (props.errors) {\n control._setErrors(props.errors);\n }\n }, [props.errors, control]);\n\n React.useEffect(() => {\n if (!control._state.mount) {\n control._updateValid();\n control._state.mount = true;\n }\n\n if (control._state.watch) {\n control._state.watch = false;\n control._subjects.state.next({ ...control._formState });\n }\n\n control._removeUnmounted();\n });\n\n React.useEffect(() => {\n props.shouldUnregister &&\n control._subjects.values.next({\n values: control._getWatch(),\n });\n }, [props.shouldUnregister, control]);\n\n _formControl.current.formState = getProxyFormState(formState, control);\n\n return _formControl.current;\n}\n", "import { useCallback, useMemo, useState, useRef, useEffect } from 'react';\nimport lodashDebounce from 'lodash/debounce';\n\nimport { SortPayload, FilterPayload } from '../../types';\nimport removeEmpty from '../../util/removeEmpty';\nimport {\n queryReducer,\n HIDE_FILTER,\n SET_FILTER,\n SET_PAGE,\n SET_PER_PAGE,\n SET_SORT,\n SHOW_FILTER,\n SORT_ASC,\n} from '../list';\n\n/**\n * Get the reference inputs parameters (page, sort, filters) and modifiers.\n *\n * @returns {Array} A tuple [parameters, modifiers].\n * Destructure as [\n * { page, perPage, sort, order, filter, filterValues, displayedFilters, requestSignature },\n * { setFilters, hideFilter, showFilter, setPage, setPerPage, setSort }\n * ]\n *\n * @example\n *\n * const [referenceParams, referenceParamsActions] = useReferenceParams({\n * resource: 'posts',\n * filterDefaultValues: {\n * published: true\n * },\n * sort: {\n * field: 'published_at',\n * order: 'DESC'\n * },\n * perPage: 25\n * });\n *\n * const {\n * page,\n * perPage,\n * sort,\n * order,\n * filter,\n * filterValues,\n * displayedFilters,\n * requestSignature\n * } = referenceParams;\n *\n * const {\n * setFilters,\n * hideFilter,\n * showFilter,\n * setPage,\n * setPerPage,\n * setSort,\n * } = referenceParamsActions;\n */\nexport const useReferenceParams = ({\n resource,\n filter,\n sort = defaultSort,\n page = 1,\n perPage = 10,\n debounce = 500,\n}: ReferenceParamsOptions): [Parameters, Modifiers] => {\n const [params, setParams] = useState(defaultParams);\n const tempParams = useRef<ReferenceParams>();\n\n const requestSignature = [\n resource,\n JSON.stringify(params),\n JSON.stringify(filter),\n JSON.stringify(sort),\n page,\n perPage,\n ];\n\n const query = useMemo(\n () =>\n getQuery({\n params: params,\n filterDefaultValues: filter,\n sort,\n page,\n perPage,\n }),\n requestSignature // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const changeParams = useCallback(action => {\n if (!tempParams.current) {\n // no other changeParams action dispatched this tick\n const newTempParams = queryReducer(query, action);\n tempParams.current = newTempParams;\n // schedule side effects for next tick\n setTimeout(() => {\n setParams(newTempParams);\n tempParams.current = undefined;\n }, 0);\n } else {\n // side effects already scheduled, just change the params\n tempParams.current = queryReducer(tempParams.current, action);\n }\n }, requestSignature); // eslint-disable-line react-hooks/exhaustive-deps\n\n const setSort = useCallback(\n (sort: SortPayload) =>\n changeParams({\n type: SET_SORT,\n payload: sort,\n }),\n requestSignature // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const setPage = useCallback(\n (newPage: number) => changeParams({ type: SET_PAGE, payload: newPage }),\n requestSignature // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const setPerPage = useCallback(\n (newPerPage: number) =>\n changeParams({ type: SET_PER_PAGE, payload: newPerPage }),\n requestSignature // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const filterValues = query.filter || emptyObject;\n const displayedFilterValues = query.displayedFilters || emptyObject;\n\n const debouncedSetFilters = useRef(\n lodashDebounce((filter, displayedFilters = undefined) => {\n changeParams({\n type: SET_FILTER,\n payload: {\n filter: removeEmpty(filter),\n displayedFilters,\n },\n });\n }, debounce)\n );\n useEffect(() => {\n return () => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n debouncedSetFilters.current.cancel();\n };\n }, []);\n\n const setFilters = useCallback(\n (filter, displayedFilters = undefined, debounce = false) => {\n debounce\n ? debouncedSetFilters.current(filter, displayedFilters)\n : changeParams({\n type: SET_FILTER,\n payload: {\n filter: removeEmpty(filter),\n displayedFilters,\n },\n });\n },\n requestSignature // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const hideFilter = useCallback((filterName: string) => {\n changeParams({\n type: HIDE_FILTER,\n payload: filterName,\n });\n }, requestSignature); // eslint-disable-line react-hooks/exhaustive-deps\n\n const showFilter = useCallback((filterName: string, defaultValue: any) => {\n changeParams({\n type: SHOW_FILTER,\n payload: {\n filterName,\n defaultValue,\n },\n });\n }, requestSignature); // eslint-disable-line react-hooks/exhaustive-deps\n return [\n {\n filterValues,\n requestSignature,\n ...query,\n displayedFilters: displayedFilterValues,\n },\n {\n changeParams,\n setPage,\n setPerPage,\n setSort,\n setFilters,\n hideFilter,\n showFilter,\n },\n ];\n};\n\nexport const validQueryParams = [\n 'page',\n 'perPage',\n 'sort',\n 'order',\n 'filter',\n 'displayedFilters',\n];\n\n/**\n * Merge list params from 2 different sources:\n * - the params stored in the local state\n * - the props passed to the List component (including the filter defaultValues)\n */\nexport const getQuery = ({\n params,\n filterDefaultValues,\n sort,\n page,\n perPage,\n}) => {\n const query: Partial<ReferenceParams> = hasCustomParams(params)\n ? { ...params }\n : { filter: filterDefaultValues || {} };\n\n if (!query.sort) {\n query.sort = sort.field;\n query.order = sort.order;\n }\n if (query.page == null) {\n query.page = page;\n }\n if (query.perPage == null) {\n query.perPage = perPage;\n }\n if (query.page == null) {\n query.page = 1;\n }\n\n return {\n ...query,\n page: getNumberOrDefault(query.page, 1),\n perPage: getNumberOrDefault(query.perPage, 10),\n } as ReferenceParams;\n};\n\n/**\n * Check if user has already set custom sort, page, or filters for this list\n *\n * User params come from the Redux store as the params props. By default,\n * this object is:\n *\n * { filter: {}, order: null, page: 1, perPage: null, sort: null }\n *\n * To check if the user has custom params, we must compare the params\n * to these initial values.\n *\n * @param {Object} params\n */\nexport const hasCustomParams = (params: ReferenceParams) => {\n return (\n params &&\n params.filter &&\n (Object.keys(params.filter).length > 0 ||\n params.order != null ||\n params.page !== 1 ||\n params.perPage != null ||\n params.sort != null)\n );\n};\n\nexport const getNumberOrDefault = (\n possibleNumber: string | number | undefined,\n defaultValue: number\n) => {\n if (typeof possibleNumber === 'undefined') {\n return defaultValue;\n }\n const parsedNumber =\n typeof possibleNumber === 'string'\n ? parseInt(possibleNumber, 10)\n : possibleNumber;\n\n return isNaN(parsedNumber) ? defaultValue : parsedNumber;\n};\n\nexport interface ReferenceParamsOptions {\n resource: string;\n page?: number;\n perPage?: number;\n sort?: SortPayload;\n // default value for a filter when displayed but not yet set\n filter?: FilterPayload;\n debounce?: number;\n}\n\nexport interface ReferenceParams {\n sort: string;\n order: 'ASC' | 'DESC';\n page: number;\n perPage: number;\n filter: any;\n displayedFilters: any;\n}\n\ninterface Parameters extends ReferenceParams {\n filterValues: object;\n displayedFilters: {\n [key: string]: boolean;\n };\n requestSignature: any[];\n}\n\ninterface Modifiers {\n changeParams: (action: any) => void;\n setPage: (page: number) => void;\n setPerPage: (pageSize: number) => void;\n setSort: (sort: SortPayload) => void;\n setFilters: (\n filters: any,\n displayedFilters?: any,\n debounce?: boolean\n ) => void;\n hideFilter: (filterName: string) => void;\n showFilter: (filterName: string, defaultValue: any) => void;\n}\n\nconst emptyObject = {};\n\nconst defaultSort = {\n field: 'id',\n order: SORT_ASC,\n} as const;\n\nconst defaultParams = {};\n", "import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useWatch } from 'react-hook-form';\nimport type { UseQueryOptions } from '@tanstack/react-query';\n\nimport { useGetList } from '../../dataProvider';\nimport { useReference } from '../useReference';\nimport { useReferenceParams } from './useReferenceParams';\nimport { useWrappedSource } from '../../core';\nimport type { FilterPayload, RaRecord, SortPayload } from '../../types';\nimport type { ChoicesContextValue } from '../../form';\n\n/**\n * A hook for choosing a reference record. Useful for foreign keys.\n *\n * This hook fetches the possible values in the reference resource\n * (using `dataProvider.getList()`), it returns the possible choices\n * as the `choices` attribute.\n *\n * @example\n * const {\n * choices, // the available reference resource\n * } = useReferenceInputController({\n * input, // the input props\n * resource: 'comments',\n * reference: 'posts',\n * source: 'post_id',\n * });\n *\n * The hook also allow to filter results. It returns a `setFilters`\n * function. It uses the value to create a filter for the query.\n * You can also add a permanentFilter to further filter the result:\n *\n * @example\n * const {\n * choices, // the available reference resource\n * setFilter,\n * } = useReferenceInputController({\n * input, // the input props\n * resource: 'comments',\n * reference: 'posts',\n * source: 'post_id',\n * permanentFilter: {\n * author: 'john'\n * },\n * });\n */\nexport const useReferenceInputController = <RecordType extends RaRecord = any>(\n props: UseReferenceInputControllerParams\n): ChoicesContextValue<RecordType> => {\n const {\n debounce,\n enableGetChoices,\n filter,\n page: initialPage = 1,\n perPage: initialPerPage = 25,\n sort: initialSort,\n queryOptions = {},\n reference,\n source,\n } = props;\n const { meta, ...otherQueryOptions } = queryOptions;\n\n const [params, paramsModifiers] = useReferenceParams({\n resource: reference,\n page: initialPage,\n perPage: initialPerPage,\n sort: initialSort,\n debounce,\n filter,\n });\n\n // selection logic\n const finalSource = useWrappedSource(source);\n const currentValue = useWatch({ name: finalSource });\n\n const isGetMatchingEnabled = enableGetChoices\n ? enableGetChoices(params.filterValues)\n : true;\n\n // fetch possible values\n const {\n data: possibleValuesData = [],\n total,\n pageInfo,\n isFetching: isFetchingPossibleValues,\n isLoading: isLoadingPossibleValues,\n isPending: isPendingPossibleValues,\n error: errorPossibleValues,\n refetch: refetchGetList,\n } = useGetList<RecordType>(\n reference,\n {\n pagination: {\n page: params.page,\n perPage: params.perPage,\n },\n sort: { field: params.sort, order: params.order },\n filter: { ...params.filter, ...filter },\n meta,\n },\n {\n enabled: isGetMatchingEnabled,\n placeholderData: previousData => previousData,\n ...otherQueryOptions,\n }\n );\n\n // fetch current value\n const {\n referenceRecord: currentReferenceRecord,\n refetch: refetchReference,\n error: errorReference,\n isLoading: isLoadingReference,\n isFetching: isFetchingReference,\n isPending: isPendingReference,\n } = useReference<RecordType>({\n id: currentValue,\n reference,\n // @ts-ignore the types of the queryOptions for the getMAny and getList are not compatible\n options: {\n enabled: currentValue != null && currentValue !== '',\n meta,\n ...otherQueryOptions,\n },\n });\n\n const isPending =\n // The reference query isn't enabled when there is no value yet but as it has no data, react-query will flag it as pending\n (currentValue != null && currentValue !== '' && isPendingReference) ||\n isPendingPossibleValues;\n\n // We need to delay the update of the referenceRecord and the finalData\n // to the next React state update, because otherwise it can raise a warning\n // with AutocompleteInput saying the current value is not in the list of choices\n const [referenceRecord, setReferenceRecord] = useState<\n RecordType | undefined\n >(undefined);\n useEffect(() => {\n setReferenceRecord(currentReferenceRecord);\n }, [currentReferenceRecord]);\n\n // add current value to possible sources\n let finalData: RecordType[], finalTotal: number | undefined;\n if (\n !referenceRecord ||\n possibleValuesData.find(record => record.id === referenceRecord.id)\n ) {\n finalData = possibleValuesData;\n finalTotal = total;\n } else {\n finalData = [referenceRecord, ...possibleValuesData];\n finalTotal = total == null ? undefined : total + 1;\n }\n\n const refetch = useCallback(() => {\n refetchGetList();\n refetchReference();\n }, [refetchGetList, refetchReference]);\n\n const currentSort = useMemo(\n () => ({\n field: params.sort,\n order: params.order,\n }),\n [params.sort, params.order]\n );\n return {\n sort: currentSort,\n allChoices: finalData,\n availableChoices: possibleValuesData,\n selectedChoices: referenceRecord ? [referenceRecord] : [],\n displayedFilters: params.displayedFilters,\n error: errorReference || errorPossibleValues,\n filter: params.filter,\n filterValues: params.filterValues,\n hideFilter: paramsModifiers.hideFilter,\n isFetching: isFetchingReference || isFetchingPossibleValues,\n isLoading: isLoadingReference || isLoadingPossibleValues,\n isPending: isPending,\n page: params.page,\n perPage: params.perPage,\n refetch,\n resource: reference,\n setFilters: paramsModifiers.setFilters,\n setPage: paramsModifiers.setPage,\n setPerPage: paramsModifiers.setPerPage,\n setSort: paramsModifiers.setSort,\n showFilter: paramsModifiers.showFilter,\n // we return source and not finalSource because child inputs (e.g. AutocompleteInput) already call useInput and compute the final source\n source,\n total: finalTotal,\n hasNextPage: pageInfo\n ? pageInfo.hasNextPage\n : total != null\n ? params.page * params.perPage < total\n : undefined,\n hasPreviousPage: pageInfo ? pageInfo.hasPreviousPage : params.page > 1,\n isFromReference: true,\n } as ChoicesContextValue<RecordType>;\n};\n\nexport interface UseReferenceInputControllerParams<\n RecordType extends RaRecord = any,\n> {\n debounce?: number;\n filter?: FilterPayload;\n queryOptions?: Omit<\n UseQueryOptions<{\n data: RecordType[];\n total?: number;\n pageInfo?: {\n hasNextPage?: boolean;\n hasPreviousPage?: boolean;\n };\n }>,\n 'queryFn' | 'queryKey'\n > & { meta?: any };\n page?: number;\n perPage?: number;\n record?: RaRecord;\n reference: string;\n resource?: string;\n sort?: SortPayload;\n source: string;\n enableGetChoices?: (filters: any) => boolean;\n}\n", "import React, { ReactNode } from 'react';\n\nimport { ResourceContextProvider } from '../../core';\nimport { ChoicesContextProvider, InputProps } from '../../form';\nimport {\n UseReferenceInputControllerParams,\n useReferenceInputController,\n} from './useReferenceInputController';\n\n/**\n * An Input component for choosing a reference record. Useful for foreign keys.\n *\n * This component fetches the possible values in the reference resource\n * (using `dataProvider.getList()`), and renders the child you passed\n * to which it passes the possible choices via a `ChoicesContext`.\n *\n * You must pass a child selection component to customize the way the reference\n * selector is displayed (e.g. using `<SelectInput>` or `<RadioButtonGroupInput>`\n * instead of `<AutocompleteInput>` ).\n *\n * Note that the child component should handle the error and loading cases as this base component does not.\n *\n * @example // using a SelectInput as selector\n * export const CommentEdit = () => (\n * <Edit>\n * <SimpleForm>\n * <ReferenceInputBase label=\"Post\" source=\"post_id\" reference=\"posts\">\n * <SelectInput optionText=\"title\" />\n * </ReferenceInputBase>\n * </SimpleForm>\n * </Edit>\n * );\n *\n * By default, restricts the possible values to 25. You can extend this limit\n * by setting the `perPage` prop.\n *\n * @example\n * <ReferenceInputBase source=\"post_id\" reference=\"posts\" perPage={100}/>\n *\n * By default, orders the possible values by id desc. You can change this order\n * by setting the `sort` prop (an object with `field` and `order` properties).\n *\n * @example\n * <ReferenceInputBase\n * source=\"post_id\"\n * reference=\"posts\"\n * sort={{ field: 'title', order: 'ASC' }}\n * >\n * <SelectInput optionText=\"title\" />\n * </ReferenceInputBase>\n *\n * Also, you can filter the query used to populate the possible values. Use the\n * `filter` prop for that.\n *\n * @example\n * <ReferenceInputBase\n * source=\"post_id\"\n * reference=\"posts\"\n * filter={{ is_published: true }}\n * >\n * <SelectInput optionText=\"title\" />\n * </ReferenceInputBase>\n *\n * The enclosed component may filter results. ReferenceInputBase create a ChoicesContext which provides\n * a `setFilters` function. You can call this function to filter the results.\n */\nexport const ReferenceInputBase = (props: ReferenceInputBaseProps) => {\n const {\n children,\n reference,\n sort = { field: 'id', order: 'DESC' },\n filter = {},\n } = props;\n\n const controllerProps = useReferenceInputController({\n ...props,\n sort,\n filter,\n });\n\n return (\n <ResourceContextProvider value={reference}>\n <ChoicesContextProvider value={controllerProps}>\n {children}\n </ChoicesContextProvider>\n </ResourceContextProvider>\n );\n};\n\nexport interface ReferenceInputBaseProps\n extends InputProps,\n UseReferenceInputControllerParams {\n children?: ReactNode;\n}\n", "import { createContext } from 'react';\nimport { UseGetListHookValue } from '../../dataProvider/useGetList';\nimport { FilterPayload, RaRecord, SortPayload } from '../../types';\n\n/**\n * Context to store choices and functions to retrieve them.\n *\n * Use the useChoicesContext() hook to read the context.\n */\nexport const ChoicesContext = createContext<ChoicesContextValue | undefined>(\n undefined\n);\n\nexport type ChoicesContextBaseValue<RecordType extends RaRecord = any> = {\n displayedFilters: any;\n filter?: FilterPayload;\n filterValues: any;\n hasNextPage?: boolean;\n hasPreviousPage?: boolean;\n hideFilter: (filterName: string) => void;\n isFetching: boolean;\n isLoading: boolean;\n page: number;\n perPage: number;\n refetch: (() => void) | UseGetListHookValue<RecordType>['refetch'];\n resource: string;\n setFilters: (\n filters: any,\n displayedFilters?: any,\n debounce?: boolean\n ) => void;\n setPage: (page: number) => void;\n setPerPage: (page: number) => void;\n setSort: (sort: SortPayload) => void;\n showFilter: (filterName: string, defaultValue: any) => void;\n sort: SortPayload;\n source: string;\n isFromReference: boolean;\n};\n\nexport interface ChoicesContextLoadingResult<RecordType extends RaRecord = any>\n extends ChoicesContextBaseValue<RecordType> {\n allChoices: undefined;\n availableChoices: undefined;\n selectedChoices: undefined;\n total: undefined;\n error: null;\n isPending: true;\n}\nexport interface ChoicesContextErrorResult<\n RecordType extends RaRecord = any,\n TError = Error,\n> extends ChoicesContextBaseValue<RecordType> {\n allChoices: undefined;\n availableChoices: undefined;\n selectedChoices: undefined;\n total: undefined;\n error: TError;\n isPending: false;\n}\nexport interface ChoicesContextRefetchErrorResult<\n RecordType extends RaRecord = any,\n TError = Error,\n> extends ChoicesContextBaseValue<RecordType> {\n allChoices: RecordType[];\n availableChoices: RecordType[];\n selectedChoices: RecordType[];\n total: number;\n error: TError;\n isPending: false;\n}\nexport interface ChoicesContextSuccessResult<RecordType extends RaRecord = any>\n extends ChoicesContextBaseValue<RecordType> {\n allChoices: RecordType[];\n availableChoices: RecordType[];\n selectedChoices: RecordType[];\n total: number;\n error: null;\n isPending: false;\n}\n\nexport type ChoicesContextValue<RecordType extends RaRecord = any> =\n | ChoicesContextLoadingResult<RecordType>\n | ChoicesContextErrorResult<RecordType>\n | ChoicesContextRefetchErrorResult<RecordType>\n | ChoicesContextSuccessResult<RecordType>;\n", "import * as React from 'react';\nimport { ReactNode } from 'react';\nimport { ChoicesContext, ChoicesContextValue } from './ChoicesContext';\n\nexport const ChoicesContextProvider = ({\n children,\n value,\n}: {\n children: ReactNode;\n value: ChoicesContextValue;\n}) => (\n <ChoicesContext.Provider value={value}>{children}</ChoicesContext.Provider>\n);\n", "import { useContext, useMemo } from 'react';\nimport { RaRecord } from '../../types';\nimport { useList } from '../../controller';\nimport { ChoicesContext, ChoicesContextValue } from './ChoicesContext';\n\nexport const useChoicesContext = <ChoicesType extends RaRecord = RaRecord>(\n options: Partial<ChoicesContextValue> & {\n choices?: ChoicesType[];\n } = {}\n): ChoicesContextValue<ChoicesType> => {\n const context = useContext(\n ChoicesContext\n ) as ChoicesContextValue<ChoicesType>;\n const choices =\n options.choices && isArrayOfStrings(options.choices)\n ? convertOptionsToChoices(options.choices)\n : options.choices;\n // @ts-ignore cannot satisfy the type of useList because of ability to pass partial options\n const { data, ...list } = useList<any>({\n data: choices,\n isLoading: options.isLoading ?? false,\n isPending: options.isPending ?? false,\n isFetching: options.isFetching ?? false,\n error: options.error,\n // When not in a ChoicesContext, paginating does not make sense (e.g. AutocompleteInput).\n perPage: Infinity,\n });\n const result = useMemo(() => {\n // Props take precedence over context.\n if (options.choices || !context) {\n return {\n allChoices: data,\n availableChoices: options.availableChoices ?? data,\n selectedChoices: options.selectedChoices ?? data,\n displayedFilters:\n options.selectedChoices ?? list.displayedFilters,\n error: options.error,\n filter: options.filter ?? list.filter,\n filterValues: options.filterValues ?? list.filterValues,\n hasNextPage: options.hasNextPage ?? list.hasNextPage,\n hasPreviousPage:\n options.hasPreviousPage ?? list.hasPreviousPage,\n hideFilter: options.hideFilter ?? list.hideFilter,\n isLoading: list.isLoading ?? false, // we must take the one for useList, otherwise the loading state isn't synchronized with the data\n isPending: list.isPending ?? false, // same\n isFetching: list.isFetching ?? false, // same\n page: options.page ?? list.page,\n perPage: options.perPage ?? list.perPage,\n refetch: options.refetch ?? list.refetch,\n resource: options.resource ?? list.resource,\n setFilters: options.setFilters ?? list.setFilters,\n setPage: options.setPage ?? list.setPage,\n setPerPage: options.setPerPage ?? list.setPerPage,\n setSort: options.setSort ?? list.setSort,\n showFilter: options.showFilter ?? list.showFilter,\n sort: options.sort ?? list.sort,\n source: options.source,\n total: options.total ?? list.total,\n isFromReference: false,\n };\n }\n return context;\n }, [context, data, list, options]);\n\n return result as ChoicesContextValue<ChoicesType>;\n};\n\nconst isArrayOfStrings = (choices: any[]): choices is string[] =>\n Array.isArray(choices) &&\n choices.every(choice => typeof choice === 'string');\n\nconst convertOptionsToChoices = (options: string[]) =>\n options.map(choice => ({\n id: choice,\n name: choice,\n }));\n", "import * as React from 'react';\nimport { ReactElement, isValidElement, useCallback } from 'react';\nimport get from 'lodash/get';\n\nimport { useTranslate } from '../../i18n';\nimport { RaRecord } from '../../types';\nimport { RecordContextProvider } from '../../controller';\n\nexport type OptionTextElement = ReactElement<{\n record: RaRecord;\n}>;\nexport type OptionTextFunc = (choice: any) => React.ReactNode;\nexport type OptionText = OptionTextElement | OptionTextFunc | string;\n\nexport interface ChoicesProps {\n choices?: any[];\n isFetching?: boolean;\n isLoading?: boolean;\n isPending?: boolean;\n optionValue?: string;\n optionText?: OptionText;\n translateChoice?: boolean;\n}\n\nexport interface UseChoicesOptions {\n optionValue?: string;\n optionText?: OptionText;\n disableValue?: string;\n translateChoice?: boolean;\n}\n\n/*\n * Returns helper functions for choices handling.\n *\n * @param optionText Either a string defining the property to use to get the choice text, a function or a React element\n * @param optionValue The property to use to get the choice value\n * @param translateChoice A boolean indicating whether to option text should be translated\n *\n * @returns An object with helper functions:\n * - getChoiceText: Returns the choice text or a React element\n * - getChoiceValue: Returns the choice value\n */\nexport const useChoices = ({\n optionText = 'name',\n optionValue = 'id',\n disableValue = 'disabled',\n translateChoice = true,\n}: UseChoicesOptions) => {\n const translate = useTranslate();\n\n const getChoiceText = useCallback(\n choice => {\n if (isValidElement<{ record: any }>(optionText)) {\n return (\n <RecordContextProvider value={choice}>\n {optionText}\n </RecordContextProvider>\n );\n }\n const choiceName =\n typeof optionText === 'function'\n ? optionText(choice)\n : get(choice, optionText);\n\n return isValidElement(choiceName)\n ? choiceName\n : translateChoice\n ? translate(String(choiceName), { _: choiceName })\n : String(choiceName);\n },\n [optionText, translate, translateChoice]\n );\n\n const getChoiceValue = useCallback(\n choice => get(choice, optionValue),\n [optionValue]\n );\n\n const getDisableValue = useCallback(\n choice => get(choice, disableValue),\n [disableValue]\n );\n\n return {\n getChoiceText,\n getChoiceValue,\n getDisableValue,\n };\n};\n", "import * as React from 'react';\nimport { ReactNode, useContext } from 'react';\nimport {\n FormProvider,\n FieldValues,\n UseFormProps,\n SubmitHandler,\n} from 'react-hook-form';\nimport {\n UNSAFE_DataRouterContext,\n UNSAFE_DataRouterStateContext,\n} from 'react-router';\n\nimport { FormGroupsProvider } from './groups/FormGroupsProvider';\nimport { RaRecord } from '../types';\nimport {\n useRecordContext,\n OptionalRecordContextProvider,\n SaveHandler,\n} from '../controller';\nimport {\n SourceContextProvider,\n SourceContextValue,\n useResourceContext,\n} from '../core';\nimport { ValidateForm } from './validation/getSimpleValidationResolver';\nimport { WarnWhenUnsavedChanges } from './WarnWhenUnsavedChanges';\nimport { useAugmentedForm } from './useAugmentedForm';\n\n/**\n * Creates a form element, initialized with the current record, calling the saveContext on submit\n *\n * Wrapper around react-hook-form's useForm, FormContextProvider, and <form>.\n * Also sets up a FormGroupContext, and handles submission validation.\n *\n * @example\n *\n * const MyForm = ({ record, defaultValues, validate }) => (\n * <Form record={record} defaultValues={defaultValues} validate={validate}>\n * <Stack>\n * <TextInput source=\"title\" />\n * <SaveButton />\n * </Stack>\n * </Form>\n * );\n *\n * @typedef {Object} Props the props you can use\n * @prop {Object} defaultValues\n * @prop {Function} validate\n * @prop {Function} save\n *\n * @see useForm\n * @see FormGroupContext\n *\n * @link https://react-hook-form.com/docs/useformcontext\n */\nexport function Form<RecordType = any>(props: FormProps<RecordType>) {\n const {\n children,\n id,\n className,\n noValidate = false,\n formRootPathname,\n warnWhenUnsavedChanges,\n WarnWhenUnsavedChangesComponent = WarnWhenUnsavedChanges,\n } = props;\n const record = useRecordContext(props);\n const resource = useResourceContext(props);\n const { form, formHandleSubmit } = useAugmentedForm(props);\n const sourceContext = React.useMemo<SourceContextValue>(\n () => ({\n getSource: (source: string) => source,\n getLabel: (source: string) =>\n `resources.${resource}.fields.${source}`,\n }),\n [resource]\n );\n const dataRouterContext = useContext(UNSAFE_DataRouterContext);\n const dataRouterStateContext = useContext(UNSAFE_DataRouterStateContext);\n if (\n warnWhenUnsavedChanges &&\n (!dataRouterContext || !dataRouterStateContext) &&\n process.env.NODE_ENV === 'development'\n ) {\n console.error(\n 'Cannot use the warnWhenUnsavedChanges feature outside of a DataRouter. ' +\n 'The warnWhenUnsavedChanges feature is disabled. ' +\n 'Remove the warnWhenUnsavedChanges prop or convert your custom router to a Data Router.'\n );\n }\n\n return (\n <OptionalRecordContextProvider value={record}>\n <SourceContextProvider value={sourceContext}>\n <FormProvider {...form}>\n <FormGroupsProvider>\n <form\n onSubmit={formHandleSubmit}\n noValidate={noValidate}\n id={id}\n className={className}\n >\n {children}\n </form>\n {warnWhenUnsavedChanges &&\n dataRouterContext &&\n dataRouterStateContext && (\n <WarnWhenUnsavedChangesComponent\n enable\n formRootPathName={formRootPathname}\n formControl={form.control}\n />\n )}\n </FormGroupsProvider>\n </FormProvider>\n </SourceContextProvider>\n </OptionalRecordContextProvider>\n );\n}\n\nexport type FormProps<RecordType = any> = FormOwnProps<RecordType> &\n Omit<UseFormProps, 'onSubmit'> & {\n validate?: ValidateForm;\n noValidate?: boolean;\n WarnWhenUnsavedChangesComponent?: React.ComponentType<{\n enable?: boolean;\n formRootPathName?: string;\n formControl?: any;\n }>;\n };\n\nexport interface FormOwnProps<RecordType = any> {\n children: ReactNode;\n className?: string;\n defaultValues?: any;\n formRootPathname?: string;\n id?: string;\n record?: Partial<RaRecord>;\n resource?: string;\n onSubmit?: SubmitHandler<FieldValues> | SaveHandler<RecordType>;\n warnWhenUnsavedChanges?: boolean;\n sanitizeEmptyValues?: boolean;\n disableInvalidFormNotification?: boolean;\n}\n", "import * as React from 'react';\nimport { ReactNode, useMemo, useRef } from 'react';\nimport {\n FormGroupsContext,\n FormGroupsContextValue,\n FormGroupSubscriber,\n} from './FormGroupsContext';\n\n/**\n * This component provides functions through context to manage form groups,\n * allowing to link or unlink an input to a group.\n * @see FormGroupContextProvider\n * @see useFormGroup\n * @see useFormGroups\n */\nexport const FormGroupsProvider = ({ children }: { children: ReactNode }) => {\n const formGroups = useRef<{ [key: string]: string[] }>({});\n const subscribers = useRef<{\n [key: string]: FormGroupSubscriber[];\n }>({});\n\n const formContextValue = useMemo<FormGroupsContextValue>(\n () => ({\n /**\n * Register a subscriber function for the specified group. The subscriber\n * will be called whenever the group content changes (fields added or removed).\n */\n subscribe: (group, subscriber) => {\n if (!subscribers.current[group]) {\n subscribers.current[group] = [];\n }\n subscribers.current[group].push(subscriber);\n\n return () => {\n subscribers.current[group] = subscribers.current[\n group\n ].filter(s => s !== subscriber);\n };\n },\n getGroupFields: name => formGroups.current[name] || [],\n registerGroup: name => {\n formGroups.current[name] = formGroups.current[name] || [];\n },\n unregisterGroup: name => {\n delete formGroups[name];\n },\n registerField: (source, group) => {\n if (group != null) {\n if (!(formGroups.current[group] || []).includes(source)) {\n formGroups.current[group] = [\n ...(formGroups.current[group] || []),\n source,\n ];\n // Notify subscribers that the group fields have changed\n if (subscribers.current[group]) {\n subscribers.current[group].forEach(subscriber =>\n subscriber()\n );\n }\n }\n }\n },\n unregisterField: (source, group) => {\n if (group != null) {\n if (!formGroups.current[group]) {\n console.warn(`Invalid form group ${group}`);\n } else {\n const fields = new Set(formGroups.current[group]);\n fields.delete(source);\n formGroups.current[group] = Array.from(fields);\n\n // Notify subscribers that the group fields have changed\n if (subscribers.current[group]) {\n subscribers.current[group].forEach(subscriber =>\n subscriber()\n );\n }\n }\n }\n },\n }),\n []\n );\n\n return (\n <FormGroupsContext.Provider value={formContextValue}>\n {children}\n </FormGroupsContext.Provider>\n );\n};\n", "import { createContext } from 'react';\n\nexport const FormGroupsContext = createContext<\n FormGroupsContextValue | undefined\n>(undefined);\n\nexport type FormGroupSubscriber = () => void;\n\nexport type FormGroupsContextValue = {\n registerGroup: (name: string) => void;\n unregisterGroup: (name: string) => void;\n registerField: (source: string, group?: string) => void;\n unregisterField: (source: string, group?: string) => void;\n getGroupFields: (name: string) => string[];\n /**\n * Subscribe to any changes of the group content (fields added or removed).\n * Subscribers can get the current fields of the group by calling getGroupFields.\n * Returns a function to unsubscribe.\n */\n subscribe: (name: string, subscriber: FormGroupSubscriber) => () => void;\n};\n", "import { useEffect, useState } from 'react';\nimport { Control, useFormState } from 'react-hook-form';\nimport { useBlocker } from 'react-router-dom';\nimport { useTranslate } from '../i18n';\n\n/**\n * Display a confirmation dialog if the form has unsaved changes.\n * - If the user confirms, the navigation continues and the changes are lost.\n * - If the user cancels, the navigation is cancelled and the changes are kept.\n */\nexport const useWarnWhenUnsavedChanges = (\n enable: boolean,\n formRootPathname?: string,\n control?: Control\n) => {\n const translate = useTranslate();\n const { isSubmitSuccessful, dirtyFields } = useFormState(\n control ? { control } : undefined\n );\n const isDirty = Object.keys(dirtyFields).length > 0;\n const [shouldNotify, setShouldNotify] = useState(false);\n\n const shouldNotBlock = !enable || !isDirty || isSubmitSuccessful;\n\n const blocker = useBlocker(({ currentLocation, nextLocation }) => {\n if (shouldNotBlock) return false;\n\n // Also check if the new location is inside the form\n const initialLocation = formRootPathname || currentLocation.pathname;\n const newLocationIsInsideCurrentLocation =\n nextLocation.pathname.startsWith(initialLocation);\n const newLocationIsShowView = nextLocation.pathname.startsWith(\n `${initialLocation}/show`\n );\n const newLocationIsInsideForm =\n newLocationIsInsideCurrentLocation && !newLocationIsShowView;\n if (newLocationIsInsideForm) return false;\n\n return true;\n });\n\n useEffect(() => {\n if (blocker.state === 'blocked') {\n // Corner case: the blocker might be triggered by a redirect in the onSuccess side effect,\n // happening during the same tick the form is reset after a successful save.\n // In that case, the blocker will block but shouldNotBlock will be true one tick after.\n // If we are in that case, we can proceed immediately.\n if (shouldNotBlock) {\n blocker.proceed();\n return;\n }\n\n setShouldNotify(true);\n }\n // This effect should only run when the blocker state changes, not when shouldNotBlock changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [blocker.state]);\n\n useEffect(() => {\n if (shouldNotify) {\n const shouldProceed = window.confirm(\n translate('ra.message.unsaved_changes')\n );\n if (shouldProceed) {\n blocker.proceed && blocker.proceed();\n } else {\n blocker.reset && blocker.reset();\n }\n }\n setShouldNotify(false);\n // Can't use blocker in the dependency array because it is not stable across rerenders\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shouldNotify, translate]);\n\n // This effect handles document navigation, e.g. closing the tab\n useEffect(() => {\n const beforeunload = (e: BeforeUnloadEvent) => {\n // Invoking event.preventDefault() will trigger a warning dialog when the user closes or navigates the tab\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event#examples\n e.preventDefault();\n // Included for legacy support, e.g. Chrome/Edge < 119\n e.returnValue = true;\n };\n\n if (shouldNotBlock) {\n return;\n }\n\n window.addEventListener('beforeunload', beforeunload);\n\n return () => {\n window.removeEventListener('beforeunload', beforeunload);\n };\n }, [shouldNotBlock]);\n};\n", "import { useWarnWhenUnsavedChanges } from './useWarnWhenUnsavedChanges';\n\nexport const WarnWhenUnsavedChanges = ({\n enable = true,\n formRootPathName,\n formControl,\n}) => {\n useWarnWhenUnsavedChanges(enable, formRootPathName, formControl);\n return null;\n};\n", "import {\n BaseSyntheticEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\nimport {\n FieldValues,\n SubmitHandler,\n useForm,\n UseFormProps,\n} from 'react-hook-form';\nimport merge from 'lodash/merge';\nimport { RaRecord } from '../types';\nimport { SaveHandler, useRecordContext, useSaveContext } from '../controller';\nimport getFormInitialValues from './getFormInitialValues';\nimport {\n getSimpleValidationResolver,\n ValidateForm,\n} from './validation/getSimpleValidationResolver';\nimport { setSubmissionErrors } from './validation/setSubmissionErrors';\nimport { useNotifyIsFormInvalid } from './validation/useNotifyIsFormInvalid';\nimport { sanitizeEmptyValues as sanitizeValues } from './sanitizeEmptyValues';\nimport { useRecordFromLocation } from './useRecordFromLocation';\n\n/**\n * Wrapper around react-hook-form's useForm\n *\n * This hook adds the following features to react-hook-form's useForm:\n *\n * - form initialization based on RecordContext\n * - validation based on a validate function\n * - sanitization of empty values\n * - notification on invalid form\n * - stop form submission event propagation\n */\nexport const useAugmentedForm = <RecordType = any>(\n props: UseAugmentedFormProps<RecordType>\n) => {\n const {\n criteriaMode = 'firstError',\n defaultValues,\n formRootPathname,\n resolver,\n reValidateMode = 'onChange',\n onSubmit,\n sanitizeEmptyValues,\n validate,\n disableInvalidFormNotification,\n ...rest\n } = props;\n const saveContext = useSaveContext();\n const record = useRecordContext(props);\n\n const defaultValuesIncludingRecord = useMemo(\n () => getFormInitialValues(defaultValues, record),\n // eslint-disable-next-line\n [\n // eslint-disable-next-line\n JSON.stringify({\n defaultValues:\n typeof defaultValues === 'function'\n ? 'function'\n : defaultValues,\n record,\n }),\n ]\n );\n\n const finalResolver = resolver\n ? resolver\n : validate\n ? getSimpleValidationResolver(validate)\n : undefined;\n\n const form = useForm({\n criteriaMode,\n values: defaultValuesIncludingRecord,\n reValidateMode,\n resolver: finalResolver,\n ...rest,\n });\n\n const formRef = useRef(form);\n\n // notify on invalid form\n useNotifyIsFormInvalid(form.control, !disableInvalidFormNotification);\n\n const recordFromLocation = useRecordFromLocation();\n const recordFromLocationApplied = useRef(false);\n const { reset } = form;\n useEffect(() => {\n if (recordFromLocation && !recordFromLocationApplied.current) {\n reset(merge({}, defaultValuesIncludingRecord, recordFromLocation), {\n keepDefaultValues: true,\n });\n recordFromLocationApplied.current = true;\n }\n }, [defaultValuesIncludingRecord, recordFromLocation, reset]);\n\n // submit callbacks\n const handleSubmit = useCallback(\n async (values, event) => {\n let errors;\n const finalValues = sanitizeEmptyValues\n ? sanitizeValues(values, record)\n : values;\n if (onSubmit) {\n errors = await onSubmit(finalValues, event);\n }\n if (onSubmit == null && saveContext?.save) {\n errors = await saveContext.save(finalValues, event);\n }\n if (errors != null) {\n setSubmissionErrors(errors, formRef.current.setError);\n }\n },\n [onSubmit, saveContext, sanitizeEmptyValues, record]\n );\n\n const formHandleSubmit = useCallback(\n (event: BaseSyntheticEvent) => {\n if (!event.defaultPrevented) {\n // Prevent outer forms to receive the event\n event.stopPropagation();\n form.handleSubmit(handleSubmit)(event);\n }\n return;\n },\n [form, handleSubmit]\n );\n\n return {\n form,\n handleSubmit,\n formHandleSubmit,\n };\n};\n\nexport type UseAugmentedFormProps<RecordType = any> =\n UseFormOwnProps<RecordType> &\n Omit<UseFormProps, 'onSubmit'> & {\n validate?: ValidateForm;\n };\n\nexport interface UseFormOwnProps<RecordType = any> {\n defaultValues?: any;\n formRootPathname?: string;\n record?: Partial<RaRecord>;\n onSubmit?: SubmitHandler<FieldValues> | SaveHandler<RecordType>;\n sanitizeEmptyValues?: boolean;\n disableInvalidFormNotification?: boolean;\n}\n", "import merge from 'lodash/merge';\nimport { RaRecord } from '../types';\n\nexport default function getFormInitialValues(\n defaultValues: DefaultValue,\n record?: Partial<RaRecord>\n) {\n const finalInitialValues = merge(\n {},\n getValues(defaultValues, record),\n record\n );\n return finalInitialValues;\n}\n\nfunction getValues(values, record) {\n if (typeof values === 'object') {\n return values;\n }\n\n if (typeof values === 'function') {\n return values(record);\n }\n\n return {};\n}\n\ninterface DefaultValueObject {\n [key: string]: any;\n}\ntype DefaultValueFunction = (record: RaRecord) => DefaultValueObject;\ntype DefaultValue = DefaultValueObject | DefaultValueFunction;\n", "import { FieldValues } from 'react-hook-form';\n\n/**\n * Convert a simple validation function that returns an object matching the form shape with errors\n * to a validation resolver compatible with react-hook-form.\n *\n * @example\n * const validate = (values: any) => {\n * if (values.username == null || values.username.trim() === '') {\n * return { username: 'Required' };\n * }\n * }\n *\n * const validationResolver = getSimpleValidationResolver(validate);\n *\n * const UserForm = () => (\n * <Form\n * defaultValues={{ username: 'John' }}\n * validationResolver={validationResolver}\n * >\n * <TextField source=\"username\" />\n * </Form>\n * );\n */\nexport const getSimpleValidationResolver =\n (validate: ValidateForm) => async (data: FieldValues) => {\n const errors = await validate(data);\n\n // If there are no errors, early return the form values\n if (!errors || isEmptyObject(errors)) {\n return { values: data, errors: {} };\n }\n\n // Else, we return an error object shaped like errors but having for each leaf\n // `type: 'manual'` and a `message` prop like react-hook-form expects it\n const transformedErrors = transformErrorFields(errors);\n\n // Sometimes we still need to transform the error object to realize there are actually\n // no errors in it.\n // e.g. with an ArrayInput we can get something like: `{backlinks: [{}, {}]}`\n // If, after transformation, there are no errors, we return the form values\n if (!transformedErrors || isEmptyObject(transformedErrors)) {\n return { values: data, errors: {} };\n }\n\n // Else return the errors and no values\n return {\n values: {},\n errors: transformedErrors,\n };\n };\n\nconst transformErrorFields = (error: object) => {\n return Object.keys(error).reduce((acc, field) => {\n // Handle arrays\n if (Array.isArray(error[field])) {\n let arrayHasErrors = false;\n const transformedArrayErrors = error[field].map(item => {\n if (!isEmptyObject(item)) {\n arrayHasErrors = true;\n }\n return transformErrorFields(item);\n });\n if (!arrayHasErrors) {\n return acc;\n }\n return {\n ...acc,\n [field]: transformedArrayErrors,\n };\n }\n\n // Handle objects\n if (isEmptyObject(error[field])) {\n return acc;\n }\n if (\n typeof error[field] === 'object' &&\n !isRaTranslationObj(error[field])\n ) {\n return {\n ...acc,\n [field]: transformErrorFields(error[field]),\n };\n }\n\n // Handle leaf (either primary type or RaTranslationObj)\n return {\n ...acc,\n [field]: addTypeAndMessage(error[field]),\n };\n }, {} as FieldValues);\n};\n\nconst addTypeAndMessage = (error: object) => ({\n type: 'manual',\n message: isRaTranslationObj(error) ? error : { message: error },\n});\n\nconst isRaTranslationObj = (obj: object) =>\n Object.keys(obj).includes('message') && Object.keys(obj).includes('args');\n\nconst isEmptyObject = (obj: object) =>\n obj == null || Object.getOwnPropertyNames(obj).length === 0;\n\nexport type ValidateForm = (\n data: FieldValues\n) => FieldValues | Promise<FieldValues>;\n", "import { FieldValues, UseFormSetError } from 'react-hook-form';\n\n/**\n * This internal function is used to convert an object matching the form shape with errors to a\n * format compatible with react-hook-form. It's used to handle submission errors. Only useful when\n * you are implementing a custom form without leveraging our Form component.\n *\n * @example\n * const MyForm = () => {\n * const { register, handleSubmit, setError } = useForm();\n * const onSubmit = data => {\n * return saveAsync(data).catch(error => setSubmissionErrors(error.body.details));\n * };\n *\n * return (\n * <form onSubmit={handleSubmit(onSubmit)}>\n * ...\n * </form>\n * );\n * };\n */\nexport const setSubmissionErrors = (\n errors: FieldValues,\n setError: UseFormSetError<FieldValues>\n) => {\n const setErrorFromObject = (errors: FieldValues, rootPath: string) => {\n Object.entries(errors).forEach(([name, error]) => {\n if (typeof error === 'object') {\n setErrorFromObject(error, `${rootPath}${name}.`);\n return;\n }\n setError(`${rootPath}${name}`, {\n type: 'server',\n message: error.toString(),\n });\n });\n };\n setErrorFromObject(errors, '');\n};\n", "import { useEffect, useRef } from 'react';\nimport { useFormState, Control } from 'react-hook-form';\nimport { useNotify } from '../../notification';\n\n/**\n * This hook display an error message on submit in Form and SaveButton.\n *\n * We can't do the form validity check in the form submit handler\n * as the form state may not have been updated yet when onSubmit validation mode is enabled\n * or when the form hasn't been touched at all.\n */\nexport const useNotifyIsFormInvalid = (\n control?: Control,\n enabled: boolean = true\n) => {\n const { submitCount, errors } = useFormState(\n control ? { control } : undefined\n );\n const submitCountRef = useRef(submitCount);\n const notify = useNotify();\n\n useEffect(() => {\n // Checking the submit count allows us to only display the notification after users\n // tried to submit\n if (submitCount > submitCountRef.current && enabled) {\n submitCountRef.current = submitCount;\n\n if (Object.keys(errors).length > 0) {\n const serverError =\n typeof errors.root?.serverError?.message === 'string'\n ? errors.root.serverError.message\n : undefined;\n notify(serverError || 'ra.message.invalid_form', {\n type: 'error',\n });\n }\n }\n }, [errors, submitCount, notify, enabled]);\n};\n", "/**\n * Remove empty strings from form state\n *\n * @example\n * sanitizeEmptyValues({ foo: '', bar: 'baz' }) // { bar: 'baz' }\n */\nexport const sanitizeEmptyValues = (values: any, record: any = {}): any => {\n const sanitizedValues = {};\n Object.keys(values).forEach(key => {\n if (values[key] == null || values[key] === '') {\n if (record.hasOwnProperty(key)) {\n // user has emptied a field, make the value null\n sanitizedValues[key] = null;\n } else {\n // user has emptied a field, but the initial value was undefined\n // so we don't include it in the sanitized values\n }\n } else {\n // this is a non-empty value, so we include it in the sanitized values\n sanitizedValues[key] = values[key];\n }\n });\n return sanitizedValues;\n};\n", "import { useEffect, useRef, useState } from 'react';\nimport { parse } from 'query-string';\nimport { Location, useLocation } from 'react-router-dom';\nimport isEqual from 'lodash/isEqual';\nimport { RaRecord } from '../types';\n\n/**\n * A hook that returns the record to use to override the values in a form\n * @param options The hook options\n * @param options.searchSource The key in the location search to use as a source for the record. Its content should be a stringified JSON object.\n * @param options.stateSource The key in the location state to use as a source for the record\n * @returns The record to use to override the values in a form\n */\nexport const useRecordFromLocation = (\n props: UseRecordFromLocationOptions = {}\n) => {\n const { searchSource, stateSource } = props;\n const location = useLocation();\n const [recordFromLocation, setRecordFromLocation] = useState(() =>\n getRecordFromLocation(location, {\n stateSource,\n searchSource,\n })\n );\n\n // To avoid having the form resets when the location changes but the final record is the same\n // This is needed for forms such as TabbedForm or WizardForm that may change the location for their sections\n const previousRecordRef = useRef(recordFromLocation);\n\n useEffect(() => {\n const newRecordFromLocation = getRecordFromLocation(location, {\n stateSource,\n searchSource,\n });\n\n if (!isEqual(newRecordFromLocation, previousRecordRef.current)) {\n previousRecordRef.current = newRecordFromLocation;\n setRecordFromLocation(newRecordFromLocation);\n }\n }, [location, stateSource, searchSource]);\n\n return recordFromLocation;\n};\n\nexport type UseRecordFromLocationOptions = {\n searchSource?: string;\n stateSource?: string;\n};\n\n/**\n * Get the initial record from the location, whether it comes from the location\n * state or is serialized in the url search part.\n */\nexport const getRecordFromLocation = (\n { state, search }: Location,\n {\n searchSource = 'source',\n stateSource = 'record',\n }: {\n searchSource?: string;\n stateSource?: string;\n } = {}\n): Partial<RaRecord> | null => {\n if (state && state[stateSource]) {\n return state[stateSource];\n }\n if (search) {\n try {\n const searchParams = parse(search);\n const source = searchParams[searchSource];\n if (source) {\n if (Array.isArray(source)) {\n console.error(\n `Failed to parse location ${searchSource} parameter '${search}'. To pre-fill some fields in the Create form, pass a stringified ${searchSource} parameter (e.g. '?${searchSource}={\"title\":\"foo\"}')`\n );\n return null;\n }\n return JSON.parse(source);\n }\n } catch (e) {\n console.error(\n `Failed to parse location ${searchSource} parameter '${search}'. To pre-fill some fields in the Create form, pass a stringified ${searchSource} parameter (e.g. '?${searchSource}={\"title\":\"foo\"}')`\n );\n }\n }\n return null;\n};\n", "import * as React from 'react';\nimport { ReactNode } from 'react';\nimport { useFormContext, FieldValues } from 'react-hook-form';\nimport get from 'lodash/get';\nimport { useFormValues } from './useFormValues';\nimport { useWrappedSource } from '../core';\n\n/**\n * Get the current (edited) value of the record from the form and pass it\n * to a child function\n *\n * @example\n *\n * const PostEdit = () => (\n * <Edit>\n * <SimpleForm<FieldValues>>\n * <BooleanInput source=\"hasEmail\" />\n * <FormDataConsumer>\n * {({ formData }) => formData.hasEmail &&\n * <TextInput source=\"email\" />\n * }\n * </FormDataConsumer>\n * </SimpleForm>\n * </Edit>\n * );\n *\n * @example\n *\n * const OrderEdit = () => (\n * <Edit>\n * <SimpleForm>\n * <SelectInput source=\"country\" choices={countries} />\n * <FormDataConsumer<FieldValues>>\n * {({ formData }) =>\n * <SelectInput\n * source=\"city\"\n * choices={getCitiesFor(formData.country)}\n * />\n * }\n * </FormDataConsumer>\n * </SimpleForm>\n * </Edit>\n * );\n */\nexport const FormDataConsumer = <\n TFieldValues extends FieldValues = FieldValues,\n>(\n props: ConnectedProps<TFieldValues>\n) => {\n const form = useFormContext<TFieldValues>();\n const {\n formState: {\n // Don't know exactly why, but this is needed for the form values to be updated\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isDirty,\n },\n } = form;\n const formData = useFormValues<TFieldValues>();\n return (\n <FormDataConsumerView<TFieldValues> formData={formData} {...props} />\n );\n};\n\nexport const FormDataConsumerView = <\n TFieldValues extends FieldValues = FieldValues,\n>(\n props: Props<TFieldValues>\n) => {\n const { children, formData, source } = props;\n let result;\n\n const finalSource = useWrappedSource(source || '');\n\n // Passes an empty string here as we don't have the children sources and we just want to know if we are in an iterator\n const matches = ArraySourceRegex.exec(finalSource);\n\n // If we have an index, we are in an iterator like component (such as the SimpleFormIterator)\n if (matches) {\n const scopedFormData = get(formData, matches[0]);\n result = children({ formData, scopedFormData });\n } else {\n result = children({ formData });\n }\n\n return result === undefined ? null : result;\n};\n\nconst ArraySourceRegex = new RegExp(/.+\\.\\d+$/);\n\nexport interface FormDataConsumerRenderParams<\n TFieldValues extends FieldValues = FieldValues,\n TScopedFieldValues extends FieldValues = TFieldValues,\n> {\n formData: TFieldValues;\n scopedFormData?: TScopedFieldValues;\n}\n\nexport type FormDataConsumerRender<\n TFieldValues extends FieldValues = FieldValues,\n> = (params: FormDataConsumerRenderParams<TFieldValues>) => ReactNode;\n\ninterface ConnectedProps<TFieldValues extends FieldValues = FieldValues> {\n children: FormDataConsumerRender<TFieldValues>;\n form?: string;\n record?: any;\n source?: string;\n [key: string]: any;\n}\n\ninterface Props<TFieldValues extends FieldValues> extends ConnectedProps {\n formData: TFieldValues;\n index?: number;\n}\n", "import { FieldValues, useFormContext, useWatch } from 'react-hook-form';\n\n// hook taken from https://react-hook-form.com/docs/usewatch/#rules\nexport const useFormValues = <\n TFieldValues extends FieldValues = FieldValues,\n>() => {\n const { getValues } = useFormContext<TFieldValues>();\n\n return {\n ...useWatch(), // subscribe to form value updates\n ...getValues(), // always merge with latest form values\n };\n};\n", "import { createContext } from 'react';\n\n/**\n * Context allowing inputs to register to a specific group.\n * This enables other components in the group to access group properties such as its\n * validation (valid/invalid) or whether its inputs have been updated (dirty/pristine).\n *\n * This should only be used through a FormGroupContextProvider.\n */\nexport const FormGroupContext = createContext<FormGroupContextValue | null>(\n null\n);\n\nexport type FormGroupContextValue = string;\n", "import * as React from 'react';\nimport { ReactNode, useEffect } from 'react';\nimport { FormGroupContext } from './FormGroupContext';\nimport { useFormGroups } from './useFormGroups';\n\n/**\n * This provider allows its input children to register to a specific group.\n * This enables other components in the group to access group properties such as its\n * validation (valid/invalid) or whether its inputs have been updated (dirty/pristine).\n *\n * @example\n * import { Edit, SimpleForm, TextInput, FormGroupContextProvider, useFormGroup } from 'react-admin';\n * import { Accordion, AccordionDetails, AccordionSummary, Typography } from '@mui/material';\n *\n * const PostEdit = () => (\n * <Edit>\n * <SimpleForm>\n * <TextInput source=\"title\" />\n * <FormGroupContextProvider name=\"options\">\n * <Accordion>\n * <AccordionSummary\n * expandIcon={<ExpandMoreIcon />}\n * aria-controls=\"options-content\"\n * id=\"options-header\"\n * >\n * <AccordionSectionTitle name=\"options\">Options</AccordionSectionTitle>\n * </AccordionSummary>\n * <AccordionDetails id=\"options-content\" aria-labelledby=\"options-header\">\n * <TextInput source=\"teaser\" validate={minLength(20)} />\n * </AccordionDetails>\n * </Accordion>\n * </FormGroupContextProvider>\n * </SimpleForm>\n * </Edit>\n * );\n *\n * const AccordionSectionTitle = ({ children, name }) => {\n * const formGroupState = useFormGroup(name);\n * return (\n * <Typography color={formGroupState.invalid && formGroupState.dirty ? 'error' : 'inherit'}>\n * {children}\n * </Typography>\n * );\n * }\n *\n * @param props The component props\n * @param {ReactNode} props.children The form group content\n * @param {String} props.name The form group name\n */\nexport const FormGroupContextProvider = ({\n children,\n name,\n}: {\n children: ReactNode;\n name: string;\n}) => {\n const formGroups = useFormGroups();\n\n useEffect(() => {\n if (\n !formGroups ||\n !formGroups.registerGroup ||\n !formGroups.unregisterGroup\n ) {\n console.warn(\n `The FormGroupContextProvider can only be used inside a FormContext such as provided by the SimpleForm and TabbedForm components`\n );\n return;\n }\n formGroups.registerGroup(name);\n\n return () => {\n formGroups.unregisterGroup(name);\n };\n }, [formGroups, name]);\n\n return (\n <FormGroupContext.Provider value={name}>\n {children}\n </FormGroupContext.Provider>\n );\n};\n", "import { useContext } from 'react';\nimport { FormGroupsContext } from './FormGroupsContext';\n\n/**\n * Retrieve the form groups management context. Used by inputs to register themselves into a form group.\n */\nexport const useFormGroups = () => {\n const context = useContext(FormGroupsContext);\n return context;\n};\n", "import { useEffect, useState } from 'react';\nimport get from 'lodash/get';\nimport isEqual from 'lodash/isEqual';\nimport { useFormState } from 'react-hook-form';\nimport { useFormGroups } from './useFormGroups';\nimport { useEvent } from '../../util';\n\ntype FieldState = {\n name: string;\n error?: any;\n isDirty: boolean;\n isTouched: boolean;\n isValid: boolean;\n isValidating: boolean;\n};\n\ntype FormGroupState = {\n errors?: object;\n isDirty: boolean;\n isTouched: boolean;\n isValid: boolean;\n isValidating: boolean;\n};\n\n/**\n * Retrieve a specific form group data such as its validation status (valid/invalid) or\n * or whether its inputs have been updated (dirty/pristine)\n *\n * @example\n * import { Edit, SimpleForm, TextInput, FormGroupContextProvider, useFormGroup, minLength } from 'react-admin';\n * import { Accordion, AccordionDetails, AccordionSummary, Typography } from '@mui/material';\n * import ExpandMoreIcon from '@mui/icons-material/ExpandMoreIcon';\n *\n * const PostEdit = () => (\n * <Edit>\n * <SimpleForm>\n * <TextInput source=\"title\" />\n * <FormGroupContextProvider name=\"options\">\n * <Accordion>\n * <AccordionSummary\n * expandIcon={<ExpandMoreIcon />}\n * aria-controls=\"options-content\"\n * id=\"options-header\"\n * >\n * <AccordionSectionTitle name=\"options\">Options</AccordionSectionTitle>\n * </AccordionSummary>\n * <AccordionDetails id=\"options-content\" aria-labelledby=\"options-header\">\n * <TextInput source=\"teaser\" validate={minLength(20)} />\n * </AccordionDetails>\n * </Accordion>\n * </FormGroupContextProvider>\n * </SimpleForm>\n * </Edit>\n * );\n *\n * const AccordionSectionTitle = ({ children, name }) => {\n * const formGroupState = useFormGroup(name);\n * return (\n * <Typography color={!formGroupState.isValid && formGroupState.isDirty ? 'error' : 'inherit'}>\n * {children}\n * </Typography>\n * );\n * }\n *\n * @param {string} name The form group name\n * @returns {FormGroupState} The form group state\n */\nexport const useFormGroup = (name: string): FormGroupState => {\n const { dirtyFields, touchedFields, validatingFields, errors } =\n useFormState();\n\n // dirtyFields, touchedFields, validatingFields and errors are objects with keys being the field names\n // Ex: { title: true }\n // However, they are not correctly serialized when using JSON.stringify\n // To avoid our effects to not be triggered when they should, we extract the keys and use that as a dependency\n const dirtyFieldsNames = Object.keys(dirtyFields);\n const touchedFieldsNames = Object.keys(touchedFields);\n const validatingFieldsNames = Object.keys(validatingFields);\n const errorsNames = Object.keys(errors);\n\n const formGroups = useFormGroups();\n const [state, setState] = useState<FormGroupState>({\n errors: undefined,\n isDirty: false,\n isTouched: false,\n isValid: true,\n isValidating: true,\n });\n\n const updateGroupState = useEvent(() => {\n if (!formGroups) return;\n const fields = formGroups.getGroupFields(name);\n const fieldStates = fields\n .map<FieldState>(field => {\n return {\n name: field,\n error: get(errors, field, undefined),\n isDirty: get(dirtyFields, field, false) !== false,\n isValid: get(errors, field, undefined) == null,\n isValidating:\n get(validatingFields, field, undefined) == null,\n isTouched: get(touchedFields, field, false) !== false,\n };\n })\n .filter(fieldState => fieldState != undefined); // eslint-disable-line\n\n const newState = getFormGroupState(fieldStates);\n setState(oldState => {\n if (!isEqual(oldState, newState)) {\n return newState;\n }\n\n return oldState;\n });\n });\n\n useEffect(\n () => {\n updateGroupState();\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(dirtyFieldsNames),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(errorsNames),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(touchedFieldsNames),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(validatingFieldsNames),\n updateGroupState,\n name,\n formGroups,\n ]\n );\n\n useEffect(() => {\n if (!formGroups) return;\n // Whenever the group content changes (input are added or removed)\n // we must update its state\n const unsubscribe = formGroups.subscribe(name, () => {\n updateGroupState();\n });\n return unsubscribe;\n }, [formGroups, name, updateGroupState]);\n\n return state;\n};\n\n/**\n * Get the state of a form group\n *\n * @param {FieldState[]} fieldStates A map of field states from react-hook-form where the key is the field name.\n * @returns {FormGroupState} The state of the group.\n */\nexport const getFormGroupState = (\n fieldStates: FieldState[]\n): FormGroupState => {\n return fieldStates.reduce<FormGroupState>(\n (acc, fieldState) => {\n let errors = acc.errors || {};\n\n if (fieldState.error) {\n errors[fieldState.name] = fieldState.error;\n }\n\n const newState = {\n isDirty: acc.isDirty || fieldState.isDirty,\n errors,\n isTouched: acc.isTouched || fieldState.isTouched,\n isValid: acc.isValid && fieldState.isValid,\n isValidating: acc.isValidating && fieldState.isValidating,\n };\n\n return newState;\n },\n {\n isDirty: false,\n errors: undefined,\n isValid: true,\n isTouched: false,\n isValidating: false,\n }\n );\n};\n", "import { useContext } from 'react';\nimport { FormGroupContext } from './FormGroupContext';\n\n/**\n * Retrieve the name of the form group the consumer belongs to. May be undefined if the consumer is not inside a form group.\n */\nexport const useFormGroupContext = () => {\n const context = useContext(FormGroupContext);\n return context;\n};\n", "import { useEffect } from 'react';\nimport {\n FieldValues,\n UseFieldArrayReturn,\n useFormContext,\n} from 'react-hook-form';\nimport get from 'lodash/get';\nimport { useRecordContext } from '../controller';\nimport { InputProps } from './useInput';\nimport { useWrappedSource } from '../core';\n\ninterface StandardInput {\n inputProps: Partial<InputProps> & { source: string };\n isArrayInput?: undefined;\n fieldArrayInputControl?: undefined;\n}\n\ninterface ArrayInput {\n inputProps: Partial<InputProps> & { source: string };\n isArrayInput: true;\n fieldArrayInputControl: UseFieldArrayReturn<FieldValues, string, 'id'>;\n}\n\ntype Props = StandardInput | ArrayInput;\n\n/*\n * This hook updates the input with the default value if default value is present\n * and field input is not already populated or dirty\n */\nexport const useApplyInputDefaultValues = ({\n inputProps,\n isArrayInput,\n fieldArrayInputControl,\n}: Props) => {\n const { defaultValue, source } = inputProps;\n const finalSource = useWrappedSource(source);\n\n const record = useRecordContext(inputProps);\n const { getValues, resetField, formState, reset } = useFormContext();\n const recordValue = get(record, finalSource);\n const formValue = get(getValues(), finalSource);\n const { dirtyFields } = formState;\n const isDirty = Object.keys(dirtyFields).includes(finalSource);\n\n useEffect(() => {\n if (\n defaultValue == null ||\n formValue != null ||\n recordValue != null ||\n isDirty\n ) {\n return;\n }\n\n // Side note: For Array Input but checked for all to avoid possible regression\n // Since we use get(record, source), if source is like foo.23.bar,\n // this effect will run. However we only want to set the default value\n // for the subfield bar if the record actually has a value for foo.23\n const pathContainsIndex = finalSource\n .split('.')\n .some(pathPart => numericRegex.test(pathPart));\n if (pathContainsIndex) {\n const parentPath = finalSource.split('.').slice(0, -1).join('.');\n const parentValue = get(getValues(), parentPath);\n if (parentValue == null) {\n // the parent is undefined, so we don't want to set the default value\n return;\n }\n }\n\n if (isArrayInput) {\n if (!fieldArrayInputControl) {\n throw new Error(\n 'useApplyInputDefaultValues: No fieldArrayInputControl passed in props for array input usage'\n );\n }\n\n // We need to update inputs nested in array using react hook forms\n // own array controller rather then the generic reset to prevent control losing\n // context of the nested inputs\n fieldArrayInputControl.replace(defaultValue);\n // resets the form so that control no longer sees the form as dirty after\n // defaults applied\n reset({}, { keepValues: true });\n\n return;\n }\n\n resetField(finalSource, { defaultValue });\n });\n};\n\nconst numericRegex = /^\\d+$/;\n", "import { ReactElement, useEffect, useId, FocusEvent } from 'react';\nimport {\n ControllerFieldState,\n ControllerRenderProps,\n useController,\n UseControllerProps,\n UseControllerReturn,\n UseFormStateReturn,\n} from 'react-hook-form';\nimport type { EditorEvents } from '@tiptap/react';\nimport get from 'lodash/get';\n\nimport { useRecordContext } from '../controller';\nimport { composeValidators, Validator, isRequired } from './validation';\nimport { useFormGroupContext, useFormGroups } from './groups';\nimport { useApplyInputDefaultValues } from './useApplyInputDefaultValues';\nimport { useEvent } from '../util';\nimport { useWrappedSource } from '../core';\n\n// replace null or undefined values by empty string to avoid controlled/uncontrolled input warning\nconst defaultFormat = (value: any) => (value == null ? '' : value);\n// parse empty string into null as it's more suitable for a majority of backends\nconst defaultParse = (value: string) => (value === '' ? null : value);\n\nexport const useInput = <ValueType = any>(\n props: InputProps<ValueType>\n): UseInputValue => {\n const {\n defaultValue,\n format = defaultFormat,\n id,\n isRequired: isRequiredOption,\n name,\n onBlur: initialOnBlur,\n onChange: initialOnChange,\n parse: parseProp = defaultParse,\n source,\n validate,\n ...options\n } = props;\n const finalSource = useWrappedSource(source);\n const finalName = name || finalSource;\n const formGroupName = useFormGroupContext();\n const formGroups = useFormGroups();\n const record = useRecordContext();\n // @ts-ignore\n const parse = useEvent(parseProp);\n const defaultId = useId();\n\n if (!finalName && process.env.NODE_ENV === 'development') {\n console.warn(\n 'Input components require either a source or a name prop.'\n );\n }\n\n useEffect(() => {\n if (!formGroups || formGroupName == null) {\n return;\n }\n\n formGroups.registerField(finalSource, formGroupName);\n\n return () => {\n formGroups.unregisterField(finalSource, formGroupName);\n };\n }, [formGroups, formGroupName, finalSource]);\n\n const sanitizedValidate = Array.isArray(validate)\n ? composeValidators(validate)\n : validate;\n\n // Fetch the defaultValue from the record if available or apply the provided defaultValue.\n // This ensures dynamically added inputs have their value set correctly (ArrayInput for example).\n // We don't do this for the form level defaultValues so that it works as it should in react-hook-form\n // (i.e. field level defaultValue override form level defaultValues for this field).\n const {\n field: controllerField,\n fieldState,\n formState,\n } = useController({\n name: finalName,\n defaultValue: get(record, finalSource, defaultValue),\n rules: {\n validate: async (value, values) => {\n if (!sanitizedValidate) return true;\n const error = await sanitizedValidate(value, values, {\n ...props,\n finalSource,\n });\n\n if (!error) return true;\n // react-hook-form expects errors to be plain strings but our validators can return objects\n // that have message and args.\n // To avoid double translation for users that validate with a schema instead of our validators\n // we use a special format for our validators errors.\n // The ValidationError component will check for this format and extract the message and args\n // to translate.\n return `@@react-admin@@${JSON.stringify(error)}`;\n },\n },\n ...options,\n });\n\n // Because our forms may receive an asynchronously loaded record for instance,\n // they may reset their default values which would override the input default value.\n // This hook ensures that the input default value is applied when a new record is loaded but has\n // no value for the input.\n useApplyInputDefaultValues({ inputProps: props });\n\n const onBlur = useEvent((...event: any[]) => {\n controllerField.onBlur();\n if (initialOnBlur) {\n initialOnBlur(...event);\n }\n });\n\n const onChange = useEvent((...event: any[]) => {\n const eventOrValue = (\n props.type === 'checkbox' && event[0]?.target?.value === 'on'\n ? event[0].target.checked\n : event[0]?.target?.value ?? event[0]\n ) as any;\n controllerField.onChange(parse ? parse(eventOrValue) : eventOrValue);\n if (initialOnChange) {\n initialOnChange(...event);\n }\n });\n\n const field = {\n ...controllerField,\n value: format ? format(controllerField.value) : controllerField.value,\n onBlur,\n onChange,\n };\n\n return {\n id: id || defaultId,\n field,\n fieldState,\n formState,\n isRequired: isRequiredOption || isRequired(validate),\n };\n};\n\nexport type InputProps<ValueType = any> = Omit<\n UseControllerProps,\n 'name' | 'defaultValue' | 'rules'\n> &\n Partial<UseControllerReturn> & {\n alwaysOn?: any;\n defaultValue?: any;\n format?: (value: ValueType) => any;\n id?: string;\n isRequired?: boolean;\n label?: string | ReactElement | false;\n helperText?: string | ReactElement | false;\n name?: string;\n onBlur?: (...event: any[]) => void;\n onChange?: (...event: any[]) => void;\n parse?: (value: any) => ValueType;\n type?: string;\n resource?: string;\n source: string;\n validate?: Validator | Validator[];\n readOnly?: boolean;\n disabled?: boolean;\n };\n\nexport type UseInputValue = {\n id: string;\n isRequired: boolean;\n field: Omit<ControllerRenderProps, 'onBlur'> & {\n onBlur: (\n event?: FocusEvent<HTMLElement> | EditorEvents['blur']\n ) => void;\n };\n formState: UseFormStateReturn<Record<string, string>>;\n fieldState: ControllerFieldState;\n};\n", "import {\n ValidationErrorMessage,\n ValidationErrorMessageWithArgs,\n} from './validate';\nimport { useTranslate } from '../../i18n';\n\n/**\n * @deprecated\n * This internal hook returns a function that can translate an error message.\n * It handles simple string errors and those which have a message and args.\n * Only useful if you are implementing custom inputs without leveraging our useInput hook.\n *\n * @example\n * const MyInput = props => {\n * const { field, fieldState } = useController(props);\n * useEffect(() => {\n * if (fieldState.error) {\n * const errorMessage = useGetValidationErrorMessage(fieldState.error);\n * alert(errorMessage);\n * }\n * }, [fieldState.error]);\n *\n * return (\n * <input {...field} />\n * );\n * }\n *\n * @see ValidationErrorMessage\n * @see ValidationErrorMessageWithArgs\n */\nexport const useGetValidationErrorMessage = () => {\n const translate = useTranslate();\n\n return (error: ValidationErrorMessage) => {\n if ((error as ValidationErrorMessageWithArgs).message != null) {\n const { message, args } = error as ValidationErrorMessageWithArgs;\n return translate(message, { _: message, ...args });\n }\n return translate(error as string, { _: error });\n };\n};\n", "import { useCallback, useRef } from 'react';\nimport merge from 'lodash/merge';\nimport set from 'lodash/set';\nimport { useResourceContext } from '../../core';\nimport { useDataProvider } from '../../dataProvider';\nimport { useTranslate, useTranslateLabel } from '../../i18n';\nimport { asyncDebounce } from '../../util';\nimport { useRecordContext } from '../../controller';\nimport { InputProps } from '../useInput';\nimport { isEmpty } from './validate';\n\n/**\n * A hook that returns a validation function checking for a record field uniqueness\n * by calling the dataProvider getList function with a filter.\n *\n * @example // Passing options at declaration time\n * const UserCreateForm = () => {\n * const unique = useUnique({ message: 'Username is already used'});\n * return (\n * <SimpleForm>\n * <TextInput source=\"username\" validate={unique()} />\n * </SimpleForm>\n * );\n * }\n *\n * @example // Passing options at call time\n * const UserCreateForm = () => {\n * const unique = useUnique();\n * return (\n * <SimpleForm>\n * <TextInput source=\"username\" validate={unique({ message: 'Username is already used'})} />\n * </SimpleForm>\n * );\n * }\n *\n * @example // With additional filters\n * const UserCreateForm = () => {\n * const unique = useUnique();\n * return (\n * <SimpleForm>\n * <ReferenceInput source=\"organization_id\" reference=\"organizations\" />\n * <FormDataConsumer>\n * {({ formData }) => (\n * <TextInput\n * source=\"username\"\n * validate={unique({ filter: { organization_id: formData.organization_id })}\n * />\n * )}\n * </FormDataConsumer>\n * </SimpleForm>\n * );\n * }\n */\nexport const useUnique = (options?: UseUniqueOptions) => {\n const dataProvider = useDataProvider();\n const translateLabel = useTranslateLabel();\n const resource = useResourceContext(options);\n if (!resource) {\n throw new Error('useUnique: missing resource prop or context');\n }\n const translate = useTranslate();\n const record = useRecordContext();\n\n const debouncedGetList = useRef(\n // The initial value is here to set the correct type on useRef\n asyncDebounce(\n dataProvider.getList,\n options?.debounce ?? DEFAULT_DEBOUNCE\n )\n );\n\n const validateUnique = useCallback(\n (callTimeOptions?: UseUniqueOptions) => {\n const {\n message,\n filter,\n debounce: interval,\n } = merge<UseUniqueOptions, any, any>(\n {\n debounce: DEFAULT_DEBOUNCE,\n filter: {},\n message: 'ra.validation.unique',\n },\n options,\n callTimeOptions\n );\n\n debouncedGetList.current = asyncDebounce(\n dataProvider.getList,\n interval\n );\n\n return async (value: any, allValues: any, props: InputProps) => {\n if (isEmpty(value)) {\n return undefined;\n }\n try {\n const finalFilter = set(\n merge({}, filter),\n props.source,\n value\n );\n const { data, total } = await debouncedGetList.current(\n resource,\n {\n filter: finalFilter,\n pagination: { page: 1, perPage: 1 },\n sort: { field: 'id', order: 'ASC' },\n }\n );\n\n if (\n typeof total !== 'undefined' &&\n total > 0 &&\n !data.some(r => r.id === record?.id)\n ) {\n return {\n message,\n args: {\n source: props.source,\n value,\n field: translateLabel({\n label: props.label,\n source: props.source,\n resource,\n }),\n },\n };\n }\n } catch (error) {\n return translate('ra.notification.http_error');\n }\n\n return undefined;\n };\n },\n [dataProvider, options, record, resource, translate, translateLabel]\n );\n\n return validateUnique;\n};\n\nconst DEFAULT_DEBOUNCE = 1000;\n\nexport type UseUniqueOptions = {\n debounce?: number;\n resource?: string;\n message?: string;\n filter?: Record<string, any>;\n};\n", "import lodashMemoize from 'lodash/memoize';\n\n/* eslint-disable no-underscore-dangle */\n/* @link http://stackoverflow.com/questions/46155/validate-email-address-in-javascript */\nconst EMAIL_REGEX =\n /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/; // eslint-disable-line no-useless-escape\n\nexport const isEmpty = (value: any) =>\n typeof value === 'undefined' ||\n value === null ||\n value === '' ||\n (Array.isArray(value) && value.length === 0);\n\nexport interface ValidationErrorMessageWithArgs {\n message: string;\n args: {\n [key: string]: ValidationErrorMessageWithArgs | any;\n };\n}\n\nexport type ValidationErrorMessage = string | ValidationErrorMessageWithArgs;\n\nexport type Validator = (\n value: any,\n values: any,\n props: any\n) =>\n | ValidationErrorMessage\n | null\n | undefined\n | Promise<ValidationErrorMessage | null | undefined>;\n\n// type predicate, see https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates\nfunction isValidationErrorMessageWithArgs(\n error: ReturnType<Validator>\n): error is ValidationErrorMessageWithArgs {\n return error ? error.hasOwnProperty('message') : false;\n}\n\ninterface MessageFuncParams {\n args: any;\n value: any;\n values: any;\n}\n\ntype MessageFunc = (params: MessageFuncParams) => ValidationErrorMessage;\n\nconst getMessage = (\n message: string | MessageFunc,\n messageArgs: any,\n value: any,\n values: any\n) =>\n typeof message === 'function'\n ? message({\n args: messageArgs,\n value,\n values,\n })\n : messageArgs\n ? {\n message,\n args: messageArgs,\n }\n : message;\n\ntype Memoize = <T extends (...args: any[]) => any>(\n func: T,\n resolver?: (...args: any[]) => any\n) => T;\n\n// If we define validation functions directly in JSX, it will\n// result in a new function at every render, and then trigger infinite re-render.\n// Hence, we memoize every built-in validator to prevent a \"Maximum call stack\" error.\nconst memoize: Memoize = (fn: any) =>\n lodashMemoize(fn, (...args) => JSON.stringify(args));\n\nconst isFunction = value => typeof value === 'function';\n\nexport const combine2Validators = (\n validator1: Validator,\n validator2: Validator\n): Validator => {\n return (value, values, meta) => {\n const result1 = validator1(value, values, meta);\n if (!result1) {\n return validator2(value, values, meta);\n }\n if (\n typeof result1 === 'string' ||\n isValidationErrorMessageWithArgs(result1)\n ) {\n return result1;\n }\n\n return result1.then(resolvedResult1 => {\n if (!resolvedResult1) {\n return validator2(value, values, meta);\n }\n return resolvedResult1;\n });\n };\n};\n\n// Compose multiple validators into a single one for use with react-hook-form\nexport const composeValidators = (...validators) => {\n const allValidators = (\n Array.isArray(validators[0]) ? validators[0] : validators\n ).filter(isFunction) as Validator[];\n return allValidators.reduce(combine2Validators, () => null);\n};\n\n// Compose multiple validators into a single one for use with react-hook-form\nexport const composeSyncValidators =\n (...validators) =>\n (value, values, meta) => {\n const allValidators = (\n Array.isArray(validators[0]) ? validators[0] : validators\n ).filter(isFunction) as Validator[];\n\n for (const validator of allValidators) {\n const error = validator(value, values, meta);\n\n if (error) {\n return error;\n }\n }\n };\n\n/**\n * Required validator\n *\n * Returns an error if the value is null, undefined, or empty\n *\n * @param {string|Function} message\n *\n * @example\n *\n * const titleValidators = [required('The title is required')];\n * <TextInput name=\"title\" validate={titleValidators} />\n */\nexport const required = memoize((message = 'ra.validation.required') =>\n Object.assign(\n (value, values) =>\n isEmpty(value)\n ? getMessage(message, undefined, value, values)\n : undefined,\n { isRequired: true }\n )\n);\n\n/**\n * Minimum length validator\n *\n * Returns an error if the value has a length less than the parameter\n *\n * @param {integer} min\n * @param {string|Function} message\n *\n * @example\n *\n * const passwordValidators = [minLength(10, 'Should be at least 10 characters')];\n * <TextInput type=\"password\" name=\"password\" validate={passwordValidators} />\n */\nexport const minLength = memoize(\n (min, message = 'ra.validation.minLength') =>\n (value, values) =>\n !isEmpty(value) && value.length < min\n ? getMessage(message, { min }, value, values)\n : undefined\n);\n\n/**\n * Maximum length validator\n *\n * Returns an error if the value has a length higher than the parameter\n *\n * @param {integer} max\n * @param {string|Function} message\n *\n * @example\n *\n * const nameValidators = [maxLength(10, 'Should be at most 10 characters')];\n * <TextInput name=\"name\" validate={nameValidators} />\n */\nexport const maxLength = memoize(\n (max, message = 'ra.validation.maxLength') =>\n (value, values) =>\n !isEmpty(value) && value.length > max\n ? getMessage(message, { max }, value, values)\n : undefined\n);\n\n/**\n * Minimum validator\n *\n * Returns an error if the value is less than the parameter\n *\n * @param {integer} min\n * @param {string|Function} message\n *\n * @example\n *\n * const fooValidators = [minValue(5, 'Should be more than 5')];\n * <NumberInput name=\"foo\" validate={fooValidators} />\n */\nexport const minValue = memoize(\n (min, message = 'ra.validation.minValue') =>\n (value, values) =>\n !isEmpty(value) && value < min\n ? getMessage(message, { min }, value, values)\n : undefined\n);\n\n/**\n * Maximum validator\n *\n * Returns an error if the value is higher than the parameter\n *\n * @param {integer} max\n * @param {string|Function} message\n *\n * @example\n *\n * const fooValidators = [maxValue(10, 'Should be less than 10')];\n * <NumberInput name=\"foo\" validate={fooValidators} />\n */\nexport const maxValue = memoize(\n (max, message = 'ra.validation.maxValue') =>\n (value, values) =>\n !isEmpty(value) && value > max\n ? getMessage(message, { max }, value, values)\n : undefined\n);\n\n/**\n * Number validator\n *\n * Returns an error if the value is not a number\n *\n * @param {string|Function} message\n *\n * @example\n *\n * const ageValidators = [number('Must be a number')];\n * <TextInput name=\"age\" validate={ageValidators} />\n */\nexport const number = memoize(\n (message = 'ra.validation.number') =>\n (value, values) =>\n !isEmpty(value) && isNaN(Number(value))\n ? getMessage(message, undefined, value, values)\n : undefined\n);\n\n/**\n * Regular expression validator\n *\n * Returns an error if the value does not match the pattern given as parameter\n *\n * @param {RegExp} pattern\n * @param {string|Function} message\n *\n * @example\n *\n * const zipValidators = [regex(/^\\d{5}(?:[-\\s]\\d{4})?$/, 'Must be a zip code')];\n * <TextInput name=\"zip\" validate={zipValidators} />\n */\nexport const regex = lodashMemoize(\n (pattern, message = 'ra.validation.regex') =>\n (value, values?) =>\n !isEmpty(value) && typeof value === 'string' && !pattern.test(value)\n ? getMessage(message, { pattern }, value, values)\n : undefined,\n (pattern, message) => {\n return pattern.toString() + message;\n }\n);\n\n/**\n * Email validator\n *\n * Returns an error if the value is not a valid email\n *\n * @param {string|Function} message\n *\n * @example\n *\n * const emailValidators = [email('Must be an email')];\n * <TextInput name=\"email\" validate={emailValidators} />\n */\nexport const email = memoize((message = 'ra.validation.email') =>\n regex(EMAIL_REGEX, message)\n);\n\nconst oneOfTypeMessage: MessageFunc = ({ args }) => ({\n message: 'ra.validation.oneOf',\n args,\n});\n\n/**\n * Choices validator\n *\n * Returns an error if the value is not among the list passed as parameter\n *\n * @param {array} list\n * @param {string|Function} message\n *\n * @example\n *\n * const genderValidators = [choices(['male', 'female'], 'Must be either Male or Female')];\n * <TextInput name=\"gender\" validate={genderValidators} />\n */\nexport const choices = memoize(\n (list, message = oneOfTypeMessage) =>\n (value, values) =>\n !isEmpty(value) && list.indexOf(value) === -1\n ? getMessage(message, { list }, value, values)\n : undefined\n);\n\n/**\n * Given a validator, returns a boolean indicating whether the field is required or not.\n */\nexport const isRequired = validate => {\n if (validate && validate.isRequired) {\n return true;\n }\n if (Array.isArray(validate)) {\n return !!validate.find(it => it.isRequired);\n }\n return false;\n};\n", "import * as React from 'react';\nimport {\n ValidationErrorMessage,\n ValidationErrorMessageWithArgs,\n} from './validate';\nimport { useTranslate } from '../../i18n';\n\nexport interface ValidationErrorProps {\n error: ValidationErrorMessage;\n}\n\nconst ValidationErrorSpecialFormatPrefix = '@@react-admin@@';\nexport const ValidationError = (props: ValidationErrorProps) => {\n const { error } = props;\n let errorMessage = error;\n const translate = useTranslate();\n // react-hook-form expects errors to be plain strings but our validators can return objects\n // that have message and args.\n // To avoid double translation for users that validate with a schema instead of our validators\n // we use a special format for our validators errors.\n // The useInput hook handle the special formatting\n if (\n typeof error === 'string' &&\n error.startsWith(ValidationErrorSpecialFormatPrefix)\n ) {\n errorMessage = JSON.parse(\n error.substring(ValidationErrorSpecialFormatPrefix.length)\n );\n }\n if ((errorMessage as ValidationErrorMessageWithArgs).message) {\n const { message, args } =\n errorMessage as ValidationErrorMessageWithArgs;\n return <>{translate(message, { _: message, ...args })}</>;\n }\n\n return <>{translate(errorMessage as string, { _: errorMessage })}</>;\n};\n", "import { useCallback, isValidElement, ReactElement } from 'react';\nimport set from 'lodash/set';\nimport {\n useChoices,\n OptionText,\n UseChoicesOptions,\n} from './choices/useChoices';\nimport { useTranslate } from '../i18n';\n\n/*\n * Returns helper functions for suggestions handling.\n *\n * @param allowDuplicates A boolean indicating whether a suggestion can be added several times\n * @param choices An array of available choices\n * @param limitChoicesToValue A boolean indicating whether the initial suggestions should be limited to the currently selected one(s)\n * @param matchSuggestion Optional unless `optionText` is a React element. Function which check whether a choice matches a filter. Must return a boolean.\n * @param optionText Either a string defining the property to use to get the choice text, a function or a React element\n * @param optionValue The property to use to get the choice value\n * @param selectedItem The currently selected item. Maybe an array of selected items\n * @param suggestionLimit The maximum number of suggestions returned\n * @param translateChoice A boolean indicating whether to option text should be translated\n *\n * @returns An object with helper functions:\n * - getChoiceText: Returns the choice text or a React element\n * - getChoiceValue: Returns the choice value\n * - getSuggestions: A function taking a filter value (string) and returning the matching suggestions\n */\nexport const useSuggestions = ({\n allowCreate,\n choices,\n createText = 'ra.action.create',\n createValue = '@@create',\n limitChoicesToValue,\n matchSuggestion,\n optionText,\n optionValue,\n selectedItem,\n suggestionLimit = 0,\n translateChoice,\n}: UseSuggestionsOptions) => {\n const translate = useTranslate();\n const { getChoiceText, getChoiceValue } = useChoices({\n optionText,\n optionValue,\n translateChoice,\n });\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const getSuggestions = useCallback(\n getSuggestionsFactory({\n allowCreate,\n choices,\n createText,\n createValue,\n getChoiceText,\n getChoiceValue,\n limitChoicesToValue,\n matchSuggestion,\n optionText,\n optionValue,\n selectedItem,\n suggestionLimit,\n }),\n [\n allowCreate,\n choices,\n createText,\n createValue,\n getChoiceText,\n getChoiceValue,\n limitChoicesToValue,\n matchSuggestion,\n optionText,\n optionValue,\n selectedItem,\n suggestionLimit,\n translate,\n ]\n );\n\n return {\n getChoiceText,\n getChoiceValue,\n getSuggestions,\n };\n};\n\nconst escapeRegExp = value =>\n value ? value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&') : ''; // $& means the whole matched string\n\nexport interface UseSuggestionsOptions extends UseChoicesOptions {\n allowCreate?: boolean;\n allowDuplicates?: boolean;\n choices?: any[];\n createText?: string;\n createValue?: any;\n limitChoicesToValue?: boolean;\n matchSuggestion?: (\n filter: string,\n suggestion: any,\n exact?: boolean\n ) => boolean;\n suggestionLimit?: number;\n selectedItem?: any | any[];\n}\n\n/**\n * Default matcher implementation which check whether the suggestion text matches the filter.\n */\nconst defaultMatchSuggestion =\n getChoiceText =>\n (filter, suggestion, exact = false) => {\n const suggestionText = getChoiceText(suggestion);\n\n const isReactElement = isValidElement(suggestionText);\n const regex = escapeRegExp(filter);\n\n return isReactElement\n ? false\n : suggestionText &&\n !!suggestionText.match(\n // We must escape any RegExp reserved characters to avoid errors\n // For example, the filter might contain * which must be escaped as \\*\n new RegExp(exact ? `^${regex}$` : regex, 'i')\n );\n };\n\n/**\n * Get the suggestions to display after applying a fuzzy search on the available choices\n *\n * @example\n *\n * getSuggestions({\n * choices: [{ id: 1, name: 'admin' }, { id: 2, name: 'publisher' }],\n * optionText: 'name',\n * optionValue: 'id',\n * getSuggestionText: choice => choice[optionText],\n * })('pub')\n *\n * // Will return [{ id: 2, name: 'publisher' }]\n * getSuggestions({\n * choices: [{ id: 1, name: 'admin' }, { id: 2, name: 'publisher' }],\n * optionText: 'name',\n * optionValue: 'id',\n * getSuggestionText: choice => choice[optionText],\n * })('pub')\n *\n * // Will return [{ id: 2, name: 'publisher' }]\n */\nexport const getSuggestionsFactory =\n ({\n allowCreate = false,\n choices = [],\n createText = 'ra.action.create',\n createValue = '@@create',\n optionText = 'name',\n optionValue = 'id',\n getChoiceText,\n getChoiceValue,\n limitChoicesToValue = false,\n matchSuggestion = defaultMatchSuggestion(getChoiceText),\n selectedItem,\n suggestionLimit = 0,\n }: UseSuggestionsOptions & {\n getChoiceText: (choice: any) => string | ReactElement;\n getChoiceValue: (choice: any) => string;\n }) =>\n filter => {\n let suggestions: any[] = [];\n // if an item is selected and matches the filter\n if (\n selectedItem &&\n !Array.isArray(selectedItem) &&\n matchSuggestion(filter, selectedItem)\n ) {\n if (limitChoicesToValue) {\n // display only the selected item\n suggestions = choices.filter(\n choice =>\n getChoiceValue(choice) === getChoiceValue(selectedItem)\n );\n } else {\n suggestions = [...choices];\n }\n } else {\n suggestions = choices.filter(\n choice =>\n matchSuggestion(filter, choice) ||\n (selectedItem != null &&\n (!Array.isArray(selectedItem)\n ? getChoiceValue(choice) ===\n getChoiceValue(selectedItem)\n : selectedItem.some(\n selected =>\n getChoiceValue(choice) ===\n getChoiceValue(selected)\n )))\n );\n }\n\n suggestions = limitSuggestions(suggestions, suggestionLimit);\n\n const hasExactMatch = suggestions.some(suggestion =>\n matchSuggestion(filter, suggestion, true)\n );\n\n if (allowCreate) {\n const filterIsSelectedItem =\n // If the selectedItem is an array (for example AutocompleteArrayInput)\n // we shouldn't try to match\n !!selectedItem && !Array.isArray(selectedItem)\n ? matchSuggestion(filter, selectedItem, true)\n : false;\n if (!hasExactMatch && !filterIsSelectedItem) {\n suggestions.push(\n getSuggestion({\n optionText,\n optionValue,\n text: createText,\n value: createValue,\n })\n );\n }\n }\n\n // Only keep unique items. Necessary because we might have fetched\n // the currently selected choice in addition of the possible choices\n // that may also contain it\n const result = suggestions.filter(\n (suggestion, index) => suggestions.indexOf(suggestion) === index\n );\n return result;\n };\n\n/**\n * @example\n *\n * limitSuggestions(\n * [{ id: 1, name: 'foo'}, { id: 2, name: 'bar' }],\n * 1\n * );\n *\n * // Will return [{ id: 1, name: 'foo' }]\n *\n * @param suggestions List of suggestions\n * @param limit\n */\nconst limitSuggestions = (suggestions: any[], limit: any = 0) =>\n Number.isInteger(limit) && limit > 0\n ? suggestions.slice(0, limit)\n : suggestions;\n\n/**\n * addSuggestion(\n * [{ id: 1, name: 'foo'}, { id: 2, name: 'bar' }],\n * );\n *\n * // Will return [{ id: null, name: '' }, { id: 1, name: 'foo' }, { id: 2, name: 'bar' }]\n *\n * @param suggestions List of suggestions\n * @param options\n * @param options.optionText\n */\nconst getSuggestion = ({\n optionText = 'name',\n optionValue = 'id',\n text = '',\n value = null,\n}: {\n optionText: OptionText;\n optionValue: string;\n text: string;\n value: any;\n}) => {\n const suggestion = {};\n set(suggestion, optionValue, value);\n if (typeof optionText === 'string') {\n set(suggestion, optionText, text);\n }\n\n return suggestion;\n};\n", "import * as React from 'react';\nimport isEqual from 'lodash/isEqual';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\nimport { ReactNode, useEffect } from 'react';\nimport { FormProvider, useForm, UseFormProps } from 'react-hook-form';\nimport {\n SourceContextProvider,\n SourceContextValue,\n useResourceContext,\n} from '../core';\nimport {\n FormGroupsProvider,\n getSimpleValidationResolver,\n ValidateForm,\n} from '.';\nimport { useDebouncedEvent } from '../util';\nimport { useListContext } from '../controller/list/useListContext';\n\n/**\n * This component offers a convenient way to create a form that automatically\n * updates the filters when the user changes its child input values.\n *\n * It fits nicely alongside a `<FilterList>` component, but you can also use it\n * at other places to create your own filter UI.\n *\n * @example\n * import MailIcon from '@mui/icons-material/MailOutline';\n * import TitleIcon from '@mui/icons-material/Title';\n * import { Card, CardContent } from '@mui/material';\n * import * as React from 'react';\n * import {\n * FilterLiveForm,\n * FilterList,\n * FilterListItem,\n * FilterListSection,\n * TextInput,\n * } from 'react-admin';\n *\n * export const BookListAside = () => (\n * <Card sx={{ order: -1, mr: 2, mt: 6, width: 250, height: 'fit-content' }}>\n * <CardContent>\n * <FilterList label=\"Subscribed to newsletter\" icon={<MailIcon />}>\n * <FilterListItem label=\"Yes\" value={{ has_newsletter: true }} />\n * <FilterListItem label=\"No\" value={{ has_newsletter: false }} />\n * </FilterList>\n * <FilterListSection label=\"Title\" icon={<TitleIcon />}>\n * <FilterLiveForm>\n * <TextInput source=\"title\" resettable helperText={false} />\n * </FilterLiveForm>\n * </FilterListSection>\n * </CardContent>\n * </Card>\n * );\n */\nexport const FilterLiveForm = (props: FilterLiveFormProps) => {\n const { filterValues, setFilters } = useListContext();\n const resource = useResourceContext(props);\n\n const {\n debounce = 500,\n resolver,\n validate,\n children,\n formComponent: Component = HTMLForm,\n ...rest\n } = props;\n\n const finalResolver = resolver\n ? resolver\n : validate\n ? getSimpleValidationResolver(validate)\n : undefined;\n\n const formContext = useForm({\n mode: 'onChange',\n defaultValues: filterValues,\n resolver: finalResolver,\n ...rest,\n });\n const { handleSubmit, getValues, reset, watch, formState } = formContext;\n const { isValid } = formState;\n\n // Ref tracking if there are internal changes pending, i.e. changes that\n // should not trigger a reset\n const formChangesPending = React.useRef(false);\n\n // Reapply filterValues when they change externally\n useEffect(() => {\n const newValues = getFilterFormValues(getValues(), filterValues);\n const previousValues = getValues();\n if (formChangesPending.current) {\n // The effect was triggered by a form change (i.e. internal change),\n // so we don't need to reset the form\n formChangesPending.current = false;\n return;\n }\n if (!isEqual(newValues, previousValues)) {\n reset(newValues);\n }\n // The reference to the filterValues object is not updated when it changes,\n // so we must stringify it to compare it by value.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(filterValues), getValues, reset]);\n\n const onSubmit = (values: any): void => {\n // Do not call setFilters if the form is invalid\n if (!isValid) {\n return;\n }\n formChangesPending.current = true;\n setFilters({\n ...filterValues,\n ...values,\n });\n };\n const debouncedOnSubmit = useDebouncedEvent(onSubmit, debounce || 0);\n\n // Submit the form on values change\n useEffect(() => {\n const { unsubscribe } = watch((values, { name }) => {\n // Check that the name is present to avoid setting filters when\n // watch was triggered by a reset\n if (name) {\n if (get(values, name) === '') {\n const newValues = cloneDeep(values);\n set(newValues, name, '');\n debouncedOnSubmit(newValues);\n } else {\n debouncedOnSubmit(values);\n }\n }\n });\n return () => unsubscribe();\n }, [watch, debouncedOnSubmit]);\n\n const sourceContext = React.useMemo<SourceContextValue>(\n () => ({\n getSource: (source: string) => source,\n getLabel: (source: string) =>\n `resources.${resource}.fields.${source}`,\n }),\n [resource]\n );\n\n return (\n <FormProvider {...formContext}>\n <FormGroupsProvider>\n <SourceContextProvider value={sourceContext}>\n <Component onSubmit={handleSubmit(onSubmit)}>\n {children}\n </Component>\n </SourceContextProvider>\n </FormGroupsProvider>\n </FormProvider>\n );\n};\n\nconst HTMLForm = (props: React.HTMLAttributes<HTMLFormElement>) => (\n <form {...props} />\n);\n\nexport interface FilterLiveFormProps\n extends Omit<UseFormProps, 'onSubmit' | 'defaultValues'> {\n children: ReactNode;\n validate?: ValidateForm;\n debounce?: number | false;\n resource?: string;\n formComponent?: React.ComponentType<\n Pick<React.HTMLAttributes<HTMLFormElement>, 'onSubmit'>\n >;\n}\n\n/**\n * Because we are using controlled inputs with react-hook-form, we must provide a default value\n * for each input when resetting the form. (see https://react-hook-form.com/docs/useform/reset).\n * To ensure we don't provide undefined which will result to the current input value being reapplied\n * and due to the dynamic nature of the filter form, we rebuild the filter form values from its current\n * values and make sure to pass at least an empty string for each input.\n */\nexport const getFilterFormValues = (\n formValues: Record<string, any>,\n filterValues: Record<string, any>\n) => {\n return Object.keys(formValues).reduce(\n (acc, key) => {\n acc[key] = getInputValue(formValues, key, filterValues);\n return acc;\n },\n cloneDeep(filterValues) ?? {}\n );\n};\n\nconst getInputValue = (\n formValues: Record<string, any>,\n key: string,\n filterValues: Record<string, any>\n) => {\n if (formValues[key] === undefined || formValues[key] === null) {\n return get(filterValues, key, '');\n }\n if (Array.isArray(formValues[key])) {\n return get(filterValues, key, '');\n }\n if (formValues[key] instanceof Date) {\n return get(filterValues, key, '');\n }\n if (typeof formValues[key] === 'object') {\n const inputValues = Object.keys(formValues[key]).reduce(\n (acc, innerKey) => {\n const nestedInputValue = getInputValue(\n formValues[key],\n innerKey,\n (filterValues || {})[key] ?? {}\n );\n acc[innerKey] = nestedInputValue;\n return acc;\n },\n {}\n );\n if (!Object.keys(inputValues).length) return '';\n return inputValues;\n }\n return get(filterValues, key, '');\n};\n", "import * as React from 'react';\n\nimport { RaRecord } from '../../types';\nimport { useShowController, ShowControllerProps } from './useShowController';\nimport { ShowContextProvider } from './ShowContextProvider';\nimport { OptionalResourceContextProvider } from '../../core';\nimport { useIsAuthPending } from '../../auth';\n\n/**\n * Call useShowController and put the value in a ShowContext\n *\n * Base class for <Show> components, without UI.\n *\n * Accepts any props accepted by useShowController:\n * - id: The record identifier\n * - resource: The resource\n *\n * @example // Custom show layout\n *\n * const PostShow = () => (\n * <ShowBase resource=\"posts\">\n * <Grid container>\n * <Grid item xs={8}>\n * <SimpleForm>\n * ...\n * </SimpleForm>\n * </Grid>\n * <Grid item xs={4}>\n * Show instructions...\n * </Grid>\n * </Grid>\n * <div>\n * Post related links...\n * </div>\n * </ShowBase>\n * );\n */\nexport const ShowBase = <RecordType extends RaRecord = any>({\n children,\n loading = null,\n ...props\n}: ShowBaseProps<RecordType>) => {\n const controllerProps = useShowController<RecordType>(props);\n\n const isAuthPending = useIsAuthPending({\n resource: controllerProps.resource,\n action: 'show',\n });\n\n if (isAuthPending && !props.disableAuthentication) {\n return loading;\n }\n\n return (\n // We pass props.resource here as we don't need to create a new ResourceContext if the props is not provided\n <OptionalResourceContextProvider value={props.resource}>\n <ShowContextProvider value={controllerProps}>\n {children}\n </ShowContextProvider>\n </OptionalResourceContextProvider>\n );\n};\n\nexport interface ShowBaseProps<RecordType extends RaRecord = RaRecord>\n extends ShowControllerProps<RecordType> {\n children: React.ReactNode;\n loading?: React.ReactNode;\n}\n", "import { useParams } from 'react-router-dom';\n\nimport { useAuthenticated, useRequireAccess } from '../../auth';\nimport { RaRecord } from '../../types';\nimport {\n useGetOne,\n useRefresh,\n UseGetOneHookValue,\n UseGetOneOptions,\n} from '../../dataProvider';\nimport { useTranslate } from '../../i18n';\nimport { useRedirect } from '../../routing';\nimport { useNotify } from '../../notification';\nimport {\n useResourceContext,\n useGetResourceLabel,\n useGetRecordRepresentation,\n} from '../../core';\n\n/**\n * Prepare data for the Show view.\n *\n * useShowController does a few things:\n * - it grabs the id from the URL and the resource name from the ResourceContext,\n * - it fetches the record via useGetOne,\n * - it prepares the page title.\n *\n * @param {Object} props The props passed to the Show component.\n *\n * @return {Object} controllerProps Fetched data and callbacks for the Show view\n *\n * @example\n *\n * import { useShowController } from 'react-admin';\n * import ShowView from './ShowView';\n *\n * const MyShow = () => {\n * const controllerProps = useShowController();\n * return <ShowView {...controllerProps} />;\n * };\n *\n * @example // useShowController can also take its parameters from props\n *\n * import { useShowController } from 'react-admin';\n * import ShowView from './ShowView';\n *\n * const MyShow = () => {\n * const controllerProps = useShowController({ resource: 'posts', id: 1234 });\n * return <ShowView {...controllerProps} />;\n * };\n */\nexport const useShowController = <\n RecordType extends RaRecord = any,\n ErrorType = Error,\n>(\n props: ShowControllerProps<RecordType, ErrorType> = {}\n): ShowControllerResult<RecordType, ErrorType> => {\n const {\n disableAuthentication = false,\n id: propsId,\n queryOptions = {},\n } = props;\n const resource = useResourceContext(props);\n if (!resource) {\n throw new Error(\n `useShowController requires a non-empty resource prop or context`\n );\n }\n\n const { isPending: isPendingAuthenticated } = useAuthenticated({\n enabled: !disableAuthentication,\n });\n\n const { isPending: isPendingCanAccess } = useRequireAccess<RecordType>({\n action: 'show',\n resource,\n // If disableAuthentication is true then isPendingAuthenticated will always be true so this hook is disabled\n enabled: !isPendingAuthenticated,\n });\n\n const getRecordRepresentation = useGetRecordRepresentation(resource);\n const translate = useTranslate();\n const notify = useNotify();\n const redirect = useRedirect();\n const refresh = useRefresh();\n const { id: routeId } = useParams<'id'>();\n if (!routeId && !propsId) {\n throw new Error(\n 'useShowController requires an id prop or a route with an /:id? parameter.'\n );\n }\n const id = propsId != null ? propsId : routeId;\n const { meta, ...otherQueryOptions } = queryOptions;\n\n const {\n data: record,\n error,\n isLoading,\n isFetching,\n isPending,\n refetch,\n } = useGetOne<RecordType, ErrorType>(\n resource,\n { id, meta },\n {\n enabled:\n (!isPendingAuthenticated && !isPendingCanAccess) ||\n disableAuthentication,\n onError: () => {\n notify('ra.notification.item_doesnt_exist', {\n type: 'error',\n });\n redirect('list', resource);\n refresh();\n },\n retry: false,\n ...otherQueryOptions,\n }\n );\n\n // eslint-disable-next-line eqeqeq\n if (record && record.id && record.id != id) {\n throw new Error(\n `useShowController: Fetched record's id attribute (${record.id}) must match the requested 'id' (${id})`\n );\n }\n\n const getResourceLabel = useGetResourceLabel();\n const recordRepresentation = getRecordRepresentation(record);\n const defaultTitle = translate('ra.page.show', {\n name: getResourceLabel(resource, 1),\n id,\n record,\n recordRepresentation:\n typeof recordRepresentation === 'string'\n ? recordRepresentation\n : '',\n });\n\n return {\n defaultTitle,\n error,\n isLoading,\n isFetching,\n isPending,\n record,\n refetch,\n resource,\n } as ShowControllerResult<RecordType, ErrorType>;\n};\n\nexport interface ShowControllerProps<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> {\n disableAuthentication?: boolean;\n id?: RecordType['id'];\n queryOptions?: UseGetOneOptions<RecordType, ErrorType>;\n resource?: string;\n}\n\nexport interface ShowControllerBaseResult<RecordType extends RaRecord = any> {\n defaultTitle?: string;\n isFetching: boolean;\n isLoading: boolean;\n resource: string;\n record?: RecordType;\n refetch: UseGetOneHookValue<RecordType>['refetch'];\n}\n\nexport interface ShowControllerLoadingResult<RecordType extends RaRecord = any>\n extends ShowControllerBaseResult<RecordType> {\n record: undefined;\n error: null;\n isPending: true;\n}\nexport interface ShowControllerLoadingErrorResult<\n RecordType extends RaRecord = any,\n TError = Error,\n> extends ShowControllerBaseResult<RecordType> {\n record: undefined;\n error: TError;\n isPending: false;\n}\nexport interface ShowControllerRefetchErrorResult<\n RecordType extends RaRecord = any,\n TError = Error,\n> extends ShowControllerBaseResult<RecordType> {\n record: RecordType;\n error: TError;\n isPending: false;\n}\nexport interface ShowControllerSuccessResult<RecordType extends RaRecord = any>\n extends ShowControllerBaseResult<RecordType> {\n record: RecordType;\n error: null;\n isPending: false;\n}\n\nexport type ShowControllerResult<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> =\n | ShowControllerLoadingResult<RecordType>\n | ShowControllerLoadingErrorResult<RecordType, ErrorType>\n | ShowControllerRefetchErrorResult<RecordType, ErrorType>\n | ShowControllerSuccessResult<RecordType>;\n", "import * as React from 'react';\nimport { ReactNode } from 'react';\nimport { RaRecord } from '../../types';\nimport { RecordContextProvider } from '../record/RecordContext';\nimport { ShowContext } from './ShowContext';\nimport { ShowControllerResult } from './useShowController';\n\n/**\n * Create a Show Context.\n *\n * @example\n *\n * const MyShow = (props) => {\n * const controllerProps = useShowController(props);\n * return (\n * <ShowContextProvider value={controllerProps}>\n * <MyShowView>\n * </ShowContextProvider>\n * );\n * };\n *\n * const MyShowView = () => {\n * const record = useRecordContext();\n * }\n *\n * @see ShowContext\n * @see RecordContext\n */\nexport const ShowContextProvider = ({\n children,\n value,\n}: {\n children: ReactNode;\n value: ShowControllerResult;\n}) => (\n <ShowContext.Provider value={value}>\n <RecordContextProvider<Partial<RaRecord>> value={value && value.record}>\n {children}\n </RecordContextProvider>\n </ShowContext.Provider>\n);\n", "import { createContext } from 'react';\nimport { ShowControllerResult } from './useShowController';\n\n/**\n * Context to store the result of the useShowController() hook.\n *\n * Use the useShowContext() hook to read the context. That's what the Show components do in react-admin.\n *\n * @example\n *\n * import { useShowController, ShowContextProvider } from 'ra-core';\n *\n * const Show = props => {\n * const controllerProps = useShowController(props);\n * return (\n * <ShowContextProvider value={controllerProps}>\n * ...\n * </ShowContextProvider>\n * );\n * };\n */\nexport const ShowContext = createContext<ShowControllerResult | null>(null);\n\nShowContext.displayName = 'ShowContext';\n", "import { ReactNode } from 'react';\nimport { RaRecord } from '../../types';\nimport {\n useShowController,\n ShowControllerProps,\n ShowControllerResult,\n} from './useShowController';\n\n/**\n * Render prop version of the useShowController hook\n *\n * @see useShowController\n * @example\n *\n * const ShowView = () => <div>...</div>\n * const MyShow = () => (\n * <ShowController>\n * {controllerProps => <ShowView {...controllerProps} {...props} />}\n * </ShowController>\n * );\n */\nexport const ShowController = <\n RecordType extends RaRecord = any,\n ErrorType = Error,\n>({\n children,\n ...props\n}: {\n children: (\n params: ShowControllerResult<RecordType, ErrorType>\n ) => ReactNode;\n} & ShowControllerProps<RecordType, ErrorType>) => {\n const controllerProps = useShowController<RecordType, ErrorType>(props);\n return children(controllerProps);\n};\n", "import { useContext } from 'react';\n\nimport { RaRecord } from '../../types';\nimport { ShowContext } from './ShowContext';\nimport { ShowControllerResult } from './useShowController';\n\n/**\n * Hook to read the show controller props from the ShowContext.\n *\n * Used within a <ShowContextProvider> (e.g. as a descendent of <Show>).\n *\n * @returns {ShowControllerResult} create controller props\n *\n * @see useShowController for how it is filled\n */\nexport const useShowContext = <\n RecordType extends RaRecord = any,\n ErrorType = Error,\n>(): ShowControllerResult<RecordType, ErrorType> => {\n const context = useContext(ShowContext);\n // Props take precedence over the context\n if (!context) {\n throw new Error(\n 'useShowContext must be used inside a ShowContextProvider'\n );\n }\n return context as ShowControllerResult<RecordType, ErrorType>;\n};\n", "import {\n UseQueryOptions,\n useQuery,\n useQueryClient,\n} from '@tanstack/react-query';\nimport { useResourceContext } from '../core';\nimport { useDataProvider } from '../dataProvider';\nimport { useStore } from '../store';\nimport { FilterPayload, RaRecord, SortPayload } from '../types';\nimport { ListParams, SORT_ASC } from './list';\nimport { useRecordContext } from './record';\nimport { useCreatePath } from '../routing';\n\n/**\n * A hook used to fetch the previous and next record identifiers for a given record and resource.\n *\n * It fetches the list of records according to the filters\n * and the sort order configured in the list, and merges\n * the filters and the sorting order passed as props.\n *\n * usePrevNextController can be used anywhere a record context is provided\n * (often inside a `<Show>` or `<Edit>` component).\n *\n * @example <caption>Simple usage</caption>\n *\n * import { usePrevNextControllerProps } from 'ra-core';\n * const {\n * hasPrev,\n * hasNext,\n * prevPath,\n * nextPath,\n * index,\n * total,\n * error,\n * isPending,\n * } = usePrevNextController(props);\n *\n * @example <caption>Custom PrevNextButton</caption>\n *\n * import { UsePrevNextControllerProps, useTranslate } from 'ra-core';\n * import NavigateBefore from '@mui/icons-material/NavigateBefore';\n * import NavigateNext from '@mui/icons-material/NavigateNext';\n * import ErrorIcon from '@mui/icons-material/Error';\n * import { Link } from 'react-router-dom';\n * import { CircularProgress, IconButton } from '@mui/material';\n *\n * const MyPrevNextButtons = props => {\n * const {\n * hasPrev,\n * hasNext,\n * nextPath,\n * prevPath,\n * index,\n * total,\n * error,\n * isPending,\n * } = usePrevNextController(props);\n *\n * const translate = useTranslate();\n *\n * if (isPending) {\n * return <CircularProgress size={14} />;\n * }\n *\n * if (error) {\n * return (\n * <ErrorIcon\n * color=\"error\"\n * fontSize=\"small\"\n * titleAccess=\"error\"\n * aria-errormessage={error.message}\n * />\n * );\n * }\n *\n * return (\n * <ul>\n * <li>\n * <IconButton\n * component={hasPrev ? Link : undefined}\n * to={navigateToPrev}\n * aria-label={translate('ra.navigation.previous')}\n * disabled={!hasPrev}\n * >\n * <NavigateBefore />\n * </IconButton>\n * </li>\n * {typeof index === 'number' && (\n * <li>\n * {index + 1} / {total}\n * </li>\n * )}\n * <li>\n * <IconButton\n * component={hasNext ? Link : undefined}\n * to={navigateToNext}\n * aria-label={translate('ra.navigation.next')}\n * disabled={!hasNext}\n * >\n * <NavigateNext />\n * </IconButton>\n * </li>\n * </ul>\n * );\n * };\n */\n\nexport const usePrevNextController = <RecordType extends RaRecord = any>(\n props: UsePrevNextControllerProps<RecordType>\n): UsePrevNextControllerResult => {\n const {\n linkType = 'edit',\n storeKey,\n limit = 1000,\n sort: initialSort = { field: 'id', order: SORT_ASC },\n filter: permanentFilter = {},\n filterDefaultValues = {},\n queryOptions = {\n staleTime: 5 * 60 * 1000,\n },\n } = props;\n\n const record = useRecordContext<RecordType>(props);\n const resource = useResourceContext(props);\n const createPath = useCreatePath();\n\n if (!resource) {\n throw new Error(\n `useNextPrevController was called outside of a ResourceContext and without a resource prop. You must set the resource prop.`\n );\n }\n\n const [storedParams] = useStore<ListParams>(\n storeKey || `${resource}.listParams`,\n {\n filter: filterDefaultValues,\n order: initialSort.order,\n sort: initialSort.field,\n page: 1,\n perPage: 10,\n displayedFilters: {},\n }\n );\n\n const dataProvider = useDataProvider();\n const queryClient = useQueryClient();\n const pagination = { page: 1, perPage: limit };\n const sort = {\n field: storedParams.sort,\n order: storedParams.order,\n };\n const filter = { ...storedParams.filter, ...permanentFilter };\n const { meta, ...otherQueryOptions } = queryOptions;\n const params = { pagination, sort, filter, meta };\n\n // try to use data from the cache first\n const queryData = queryClient.getQueryData<{\n data: RaRecord[];\n total: number;\n }>([\n resource,\n 'getList',\n {\n ...params,\n pagination: {\n page: storedParams.page,\n perPage: storedParams.perPage,\n },\n },\n ]);\n const recordIndexInQueryData = queryData?.data?.findIndex(\n r => r.id === record?.id\n );\n const isRecordIndexFirstInNonFirstPage =\n recordIndexInQueryData === 0 && storedParams.page > 1;\n const isRecordIndexLastInNonLastPage =\n queryData?.data && queryData?.total\n ? recordIndexInQueryData === queryData?.data?.length - 1 &&\n storedParams.page < queryData?.total / storedParams.perPage\n : undefined;\n const canUseCacheData =\n record &&\n queryData?.data &&\n recordIndexInQueryData !== -1 &&\n !isRecordIndexFirstInNonFirstPage &&\n !isRecordIndexLastInNonLastPage;\n\n // If the previous and next ids are not in the cache, fetch the entire list.\n // This is necessary e.g. when coming directly to a detail page,\n // without displaying the list first\n const { data, error, isFetching, isLoading, isPending } = useQuery({\n queryKey: [resource, 'getList', params],\n queryFn: queryParams => {\n return dataProvider.getList(resource, {\n ...params,\n signal:\n dataProvider.supportAbortSignal === true\n ? queryParams.signal\n : undefined,\n });\n },\n enabled: !canUseCacheData,\n ...otherQueryOptions,\n });\n\n const finalData = canUseCacheData ? queryData.data : data?.data || [];\n\n if (!record || (isPending && !canUseCacheData))\n return {\n isFetching: true,\n isLoading: true,\n isPending: true,\n prevPath: undefined,\n nextPath: undefined,\n index: undefined,\n total: undefined,\n hasPrev: false,\n hasNext: false,\n };\n\n const ids = finalData.map(record => record.id);\n const index = ids.indexOf(record.id);\n const previousId =\n typeof ids[index - 1] !== 'undefined' ? ids[index - 1] : null; // could be 0\n const nextId =\n index !== -1 && index < ids.length - 1 ? ids[index + 1] : null;\n\n return {\n hasPrev: previousId !== null,\n hasNext: nextId !== null,\n prevPath:\n previousId !== null\n ? createPath({\n type: linkType,\n resource,\n id: previousId,\n })\n : undefined,\n nextPath:\n nextId !== null\n ? createPath({\n type: linkType,\n resource,\n id: nextId,\n })\n : undefined,\n index:\n index === -1\n ? undefined\n : index +\n (canUseCacheData\n ? (storedParams.perPage ?? 0) *\n ((storedParams.page ?? 1) - 1)\n : 0),\n total: canUseCacheData ? queryData?.total : data?.total,\n error,\n isFetching: canUseCacheData ? false : isFetching,\n isLoading: canUseCacheData ? false : isLoading,\n isPending: canUseCacheData ? false : isPending,\n };\n};\n\nexport interface UsePrevNextControllerProps<RecordType extends RaRecord = any> {\n linkType?: 'edit' | 'show';\n storeKey?: string | false;\n limit?: number;\n filter?: FilterPayload;\n filterDefaultValues?: FilterPayload;\n sort?: SortPayload;\n resource?: string;\n queryOptions?: Omit<\n UseQueryOptions<{\n data: RecordType[];\n total?: number;\n pageInfo?: {\n hasNextPage?: boolean;\n hasPreviousPage?: boolean;\n };\n }>,\n 'queryFn' | 'queryKey'\n > & { meta?: any };\n}\n\nexport type UsePrevNextControllerResult = {\n isFetching: boolean;\n isLoading: boolean;\n isPending: boolean;\n hasPrev: boolean;\n hasNext: boolean;\n prevPath: string | undefined;\n nextPath: string | undefined;\n index: number | undefined;\n total: number | undefined;\n error?: any;\n};\n", "import { useParams } from 'react-router-dom';\nimport { useRecordContext } from '../controller';\nimport { Identifier, RaRecord } from '../types';\n\n/**\n * Helper hook to get the current `recordId`.\n *\n * `recordId` is obtained from parameters if passed as a parameter, or from the `RecordContext` if there is one, or, lastly, from the react-router URL.\n *\n * @param {any} recordId optional if used inside a RecordContextProvider or if recordId can be guessed from the URL\n *\n * @returns The `recordId` determined in this manner.\n *\n * @example\n * const recordId = useGetRecordId();\n */\nexport function useGetRecordId(recordId?: Identifier): Identifier {\n const contextRecord = useRecordContext<RaRecord>();\n const { id: routeId } = useParams<'id'>();\n const actualRecordId = recordId ?? contextRecord?.id ?? routeId;\n if (actualRecordId == null)\n throw new Error(\n `useGetRecordId could not find the current record id. You need to use it inside a RecordContextProvider, or inside a supported route, or provide the record id to the hook yourself.`\n );\n\n return actualRecordId;\n}\n", "import { useMemo, useRef } from 'react';\nimport {\n useMutation,\n UseMutationOptions,\n UseMutationResult,\n useQueryClient,\n MutateOptions,\n} from '@tanstack/react-query';\n\nimport { useDataProvider } from './useDataProvider';\nimport { RaRecord, CreateParams, Identifier, DataProvider } from '../types';\nimport { useEvent } from '../util';\n\n/**\n * Get a callback to call the dataProvider.create() method, the result and the loading state.\n *\n * @param {string} resource\n * @param {Params} params The create parameters { data }\n * @param {Object} options Options object to pass to the queryClient.\n * May include side effects to be executed upon success or failure, e.g. { onSuccess: () => { refresh(); } }\n *\n * @typedef Params\n * @prop params.data The record to create, e.g. { title: 'hello, world' }\n *\n * @returns The current mutation state. Destructure as [create, { data, error, isPending }].\n *\n * The return value updates according to the request state:\n *\n * - initial: [create, { isPending: false, isIdle: true }]\n * - start: [create, { isPending: true }]\n * - success: [create, { data: [data from response], isPending: false, isSuccess: true }]\n * - error: [create, { error: [error from response], isPending: false, isError: true }]\n *\n * The create() function must be called with a resource and a parameter object: create(resource, { data, meta }, options)\n *\n * This hook uses react-query useMutation under the hood.\n * This means the state object contains mutate, isIdle, reset and other react-query methods.\n *\n * @see https://tanstack.com/query/v5/docs/react/reference/useMutation\n *\n * @example // set params when calling the create callback\n *\n * import { useCreate, useRecordContext } from 'react-admin';\n *\n * const LikeButton = () => {\n * const record = useRecordContext();\n * const like = { postId: record.id };\n * const [create, { isPending, error }] = useCreate();\n * const handleClick = () => {\n * create('likes', { data: like })\n * }\n * if (error) { return <p>ERROR</p>; }\n * return <button disabled={isPending} onClick={handleClick}>Like</button>;\n * };\n *\n * @example // set params when calling the hook\n *\n * import { useCreate, useRecordContext } from 'react-admin';\n *\n * const LikeButton = () => {\n * const record = useRecordContext();\n * const like = { postId: record.id };\n * const [create, { isPending, error }] = useCreate('likes', { data: like });\n * if (error) { return <p>ERROR</p>; }\n * return <button disabled={isPending} onClick={() => create()}>Like</button>;\n * };\n *\n * @example // TypeScript\n * const [create, { data }] = useCreate<Product>('products', { data: product });\n * \\-- data is Product\n */\nexport const useCreate = <\n RecordType extends Omit<RaRecord, 'id'> = any,\n MutationError = unknown,\n ResultRecordType extends RaRecord = RecordType & { id: Identifier },\n>(\n resource?: string,\n params: Partial<CreateParams<Partial<RecordType>>> = {},\n options: UseCreateOptions<RecordType, MutationError, ResultRecordType> = {}\n): UseCreateResult<RecordType, boolean, MutationError, ResultRecordType> => {\n const dataProvider = useDataProvider();\n const queryClient = useQueryClient();\n const paramsRef =\n useRef<Partial<CreateParams<Partial<RecordType>>>>(params);\n const hasCallTimeOnError = useRef(false);\n const hasCallTimeOnSuccess = useRef(false);\n const hasCallTimeOnSettled = useRef(false);\n const { getMutateWithMiddlewares, ...mutationOptions } = options;\n const mutation = useMutation<\n ResultRecordType,\n MutationError,\n Partial<UseCreateMutateParams<RecordType>>\n >({\n mutationFn: ({\n resource: callTimeResource = resource,\n data: callTimeData = paramsRef.current.data,\n meta: callTimeMeta = paramsRef.current.meta,\n } = {}) => {\n if (!callTimeResource) {\n throw new Error(\n 'useCreate mutation requires a non-empty resource'\n );\n }\n if (!callTimeData) {\n throw new Error(\n 'useCreate mutation requires a non-empty data object'\n );\n }\n if (getMutateWithMiddlewares) {\n const createWithMiddlewares = getMutateWithMiddlewares(\n dataProvider.create.bind(dataProvider)\n );\n return createWithMiddlewares(callTimeResource, {\n data: callTimeData,\n meta: callTimeMeta,\n }).then(({ data }) => data);\n }\n return dataProvider\n .create<RecordType, ResultRecordType>(callTimeResource, {\n data: callTimeData,\n meta: callTimeMeta,\n })\n .then(({ data }) => data);\n },\n ...mutationOptions,\n onError: (error, variables, context) => {\n if (options.onError && !hasCallTimeOnError.current) {\n return options.onError(error, variables, context);\n }\n },\n onSuccess: (\n data: ResultRecordType,\n variables: Partial<UseCreateMutateParams<RecordType>> = {},\n context: unknown\n ) => {\n const { resource: callTimeResource = resource } = variables;\n queryClient.setQueryData(\n [callTimeResource, 'getOne', { id: String(data.id) }],\n data\n );\n queryClient.invalidateQueries({\n queryKey: [callTimeResource, 'getList'],\n });\n queryClient.invalidateQueries({\n queryKey: [callTimeResource, 'getInfiniteList'],\n });\n queryClient.invalidateQueries({\n queryKey: [callTimeResource, 'getMany'],\n });\n queryClient.invalidateQueries({\n queryKey: [callTimeResource, 'getManyReference'],\n });\n\n if (options.onSuccess && !hasCallTimeOnSuccess.current) {\n options.onSuccess(data, variables, context);\n }\n },\n onSettled: (data, error, variables, context) => {\n if (options.onSettled && !hasCallTimeOnSettled.current) {\n return options.onSettled(data, error, variables, context);\n }\n },\n });\n\n const create = (\n callTimeResource: string | undefined = resource,\n callTimeParams: Partial<CreateParams<Partial<RecordType>>> = {},\n callTimeOptions: MutateOptions<\n ResultRecordType,\n MutationError,\n Partial<UseCreateMutateParams<RecordType>>,\n unknown\n > & { returnPromise?: boolean } = {}\n ) => {\n const {\n returnPromise = options.returnPromise,\n ...otherCallTimeOptions\n } = callTimeOptions;\n\n hasCallTimeOnError.current = !!otherCallTimeOptions.onError;\n hasCallTimeOnSuccess.current = !!otherCallTimeOptions.onSuccess;\n hasCallTimeOnSettled.current = !!otherCallTimeOptions.onSettled;\n\n if (returnPromise) {\n return mutation.mutateAsync(\n { resource: callTimeResource, ...callTimeParams },\n otherCallTimeOptions\n );\n }\n return mutation.mutate(\n { resource: callTimeResource, ...callTimeParams },\n otherCallTimeOptions\n );\n };\n\n const mutationResult = useMemo(\n () => ({\n isLoading: mutation.isPending,\n ...mutation,\n }),\n [mutation]\n );\n\n return [useEvent(create), mutationResult];\n};\n\nexport interface UseCreateMutateParams<\n RecordType extends Omit<RaRecord, 'id'> = any,\n> {\n resource?: string;\n data?: Partial<Omit<RecordType, 'id'>>;\n meta?: any;\n}\n\nexport type UseCreateOptions<\n RecordType extends Omit<RaRecord, 'id'> = any,\n MutationError = unknown,\n ResultRecordType extends RaRecord = RecordType & { id: Identifier },\n> = Omit<\n UseMutationOptions<\n ResultRecordType,\n MutationError,\n Partial<UseCreateMutateParams<RecordType>>\n >,\n 'mutationFn'\n> & {\n returnPromise?: boolean;\n getMutateWithMiddlewares?: <\n CreateFunctionType extends\n DataProvider['create'] = DataProvider['create'],\n >(\n mutate: CreateFunctionType\n ) => (\n ...Params: Parameters<CreateFunctionType>\n ) => ReturnType<CreateFunctionType>;\n};\n\nexport type CreateMutationFunction<\n RecordType extends Omit<RaRecord, 'id'> = any,\n TReturnPromise extends boolean = boolean,\n MutationError = unknown,\n ResultRecordType extends RaRecord = RecordType & { id: Identifier },\n> = (\n resource?: string,\n params?: Partial<CreateParams<Partial<RecordType>>>,\n options?: MutateOptions<\n ResultRecordType,\n MutationError,\n Partial<UseCreateMutateParams<RecordType>>,\n unknown\n > & { returnPromise?: TReturnPromise }\n) => TReturnPromise extends true ? Promise<ResultRecordType> : void;\n\nexport type UseCreateResult<\n RecordType extends Omit<RaRecord, 'id'> = any,\n TReturnPromise extends boolean = boolean,\n MutationError = unknown,\n ResultRecordType extends RaRecord = RecordType & { id: Identifier },\n> = [\n CreateMutationFunction<\n RecordType,\n TReturnPromise,\n MutationError,\n ResultRecordType\n >,\n UseMutationResult<\n ResultRecordType,\n MutationError,\n Partial<UseCreateMutateParams<RecordType>>,\n unknown\n > & { isLoading: boolean },\n];\n", "import { useMemo, useRef } from 'react';\nimport {\n useMutation,\n useQueryClient,\n UseMutationOptions,\n UseMutationResult,\n MutateOptions,\n QueryKey,\n UseInfiniteQueryResult,\n InfiniteData,\n} from '@tanstack/react-query';\n\nimport { useDataProvider } from './useDataProvider';\nimport { useAddUndoableMutation } from './undo/useAddUndoableMutation';\nimport {\n RaRecord,\n UpdateParams,\n MutationMode,\n GetListResult as OriginalGetListResult,\n GetInfiniteListResult,\n DataProvider,\n} from '../types';\nimport { useEvent } from '../util';\n\n/**\n * Get a callback to call the dataProvider.update() method, the result and the loading state.\n *\n * @param {string} resource\n * @param {Params} params The update parameters { id, data, previousData, meta }\n * @param {Object} options Options object to pass to the queryClient.\n * May include side effects to be executed upon success or failure, e.g. { onSuccess: () => { refresh(); } }\n * May include a mutation mode (optimistic/pessimistic/undoable), e.g. { mutationMode: 'undoable' }\n *\n * @typedef Params\n * @prop params.id The resource identifier, e.g. 123\n * @prop params.data The updates to merge into the record, e.g. { views: 10 }\n * @prop params.previousData The record before the update is applied\n * @prop params.meta Optional meta data\n *\n * @returns The current mutation state. Destructure as [update, { data, error, isPending }].\n *\n * The return value updates according to the request state:\n *\n * - initial: [update, { isPending: false, isIdle: true }]\n * - start: [update, { isPending: true }]\n * - success: [update, { data: [data from response], isPending: false, isSuccess: true }]\n * - error: [update, { error: [error from response], isPending: false, isError: true }]\n *\n * The update() function must be called with a resource and a parameter object: update(resource, { id, data, previousData }, options)\n *\n * This hook uses react-query useMutation under the hood.\n * This means the state object contains mutate, isIdle, reset and other react-query methods.\n *\n * @see https://react-query-v3.tanstack.com/reference/useMutation\n *\n * @example // set params when calling the update callback\n *\n * import { useUpdate, useRecordContext } from 'react-admin';\n *\n * const IncreaseLikeButton = () => {\n * const record = useRecordContext();\n * const diff = { likes: record.likes + 1 };\n * const [update, { isPending, error }] = useUpdate();\n * const handleClick = () => {\n * update('likes', { id: record.id, data: diff, previousData: record })\n * }\n * if (error) { return <p>ERROR</p>; }\n * return <button disabled={isPending} onClick={handleClick}>Like</div>;\n * };\n *\n * @example // set params when calling the hook\n *\n * import { useUpdate, useRecordContext } from 'react-admin';\n *\n * const IncreaseLikeButton = () => {\n * const record = useRecordContext();\n * const diff = { likes: record.likes + 1 };\n * const [update, { isPending, error }] = useUpdate('likes', { id: record.id, data: diff, previousData: record });\n * if (error) { return <p>ERROR</p>; }\n * return <button disabled={isPending} onClick={() => update()}>Like</button>;\n * };\n *\n * @example // TypeScript\n * const [update, { data }] = useUpdate<Product>('products', { id, data: diff, previousData: product });\n * \\-- data is Product\n */\nexport const useUpdate = <RecordType extends RaRecord = any, ErrorType = Error>(\n resource?: string,\n params: Partial<UpdateParams<RecordType>> = {},\n options: UseUpdateOptions<RecordType, ErrorType> = {}\n): UseUpdateResult<RecordType, boolean, ErrorType> => {\n const dataProvider = useDataProvider();\n const queryClient = useQueryClient();\n const addUndoableMutation = useAddUndoableMutation();\n const { id, data, meta } = params;\n const {\n mutationMode = 'pessimistic',\n getMutateWithMiddlewares,\n ...mutationOptions\n } = options;\n const mode = useRef<MutationMode>(mutationMode);\n const paramsRef = useRef<Partial<UpdateParams<RecordType>>>(params);\n const snapshot = useRef<Snapshot>([]);\n // Ref that stores the mutation with middlewares to avoid losing them if the calling component is unmounted\n const mutateWithMiddlewares = useRef(dataProvider.update);\n // We need to store the call-time onError and onSettled in refs to be able to call them in the useMutation hook even\n // when the calling component is unmounted\n const callTimeOnError =\n useRef<UseUpdateOptions<RecordType, ErrorType>['onError']>();\n const callTimeOnSettled =\n useRef<UseUpdateOptions<RecordType, ErrorType>['onSettled']>();\n\n // We don't need to keep a ref on the onSuccess callback as we call it ourselves for optimistic and\n // undoable mutations. There is a limitation though: if one of the side effects applied by the onSuccess callback\n // unmounts the component that called the useUpdate hook (redirect for instance), it must be the last one applied,\n // otherwise the other side effects may not applied.\n const hasCallTimeOnSuccess = useRef(false);\n\n const updateCache = ({ resource, id, data, meta }) => {\n // hack: only way to tell react-query not to fetch this query for the next 5 seconds\n // because setQueryData doesn't accept a stale time option\n const now = Date.now();\n const updatedAt = mode.current === 'undoable' ? now + 5 * 1000 : now;\n // Stringify and parse the data to remove undefined values.\n // If we don't do this, an update with { id: undefined } as payload\n // would remove the id from the record, which no real data provider does.\n const clonedData = JSON.parse(JSON.stringify(data));\n\n const updateColl = (old: RecordType[]) => {\n if (!old) return old;\n const index = old.findIndex(\n // eslint-disable-next-line eqeqeq\n record => record.id == id\n );\n if (index === -1) {\n return old;\n }\n return [\n ...old.slice(0, index),\n { ...old[index], ...clonedData } as RecordType,\n ...old.slice(index + 1),\n ];\n };\n\n type GetListResult = Omit<OriginalGetListResult, 'data'> & {\n data?: RecordType[];\n };\n\n queryClient.setQueryData(\n [resource, 'getOne', { id: String(id), meta }],\n (record: RecordType) => ({ ...record, ...clonedData }),\n { updatedAt }\n );\n queryClient.setQueriesData(\n { queryKey: [resource, 'getList'] },\n (res: GetListResult) =>\n res && res.data ? { ...res, data: updateColl(res.data) } : res,\n { updatedAt }\n );\n queryClient.setQueriesData(\n { queryKey: [resource, 'getInfiniteList'] },\n (\n res: UseInfiniteQueryResult<\n InfiniteData<GetInfiniteListResult>\n >['data']\n ) =>\n res && res.pages\n ? {\n ...res,\n pages: res.pages.map(page => ({\n ...page,\n data: updateColl(page.data),\n })),\n }\n : res,\n { updatedAt }\n );\n queryClient.setQueriesData(\n { queryKey: [resource, 'getMany'] },\n (coll: RecordType[]) =>\n coll && coll.length > 0 ? updateColl(coll) : coll,\n { updatedAt }\n );\n queryClient.setQueriesData(\n { queryKey: [resource, 'getManyReference'] },\n (res: GetListResult) =>\n res && res.data\n ? { data: updateColl(res.data), total: res.total }\n : res,\n { updatedAt }\n );\n };\n\n const mutation = useMutation<\n RecordType,\n ErrorType,\n Partial<UseUpdateMutateParams<RecordType>>\n >({\n mutationFn: ({\n resource: callTimeResource = resource,\n id: callTimeId = paramsRef.current.id,\n data: callTimeData = paramsRef.current.data,\n meta: callTimeMeta = paramsRef.current.meta,\n previousData: callTimePreviousData = paramsRef.current.previousData,\n } = {}) => {\n if (!callTimeResource) {\n throw new Error(\n 'useUpdate mutation requires a non-empty resource'\n );\n }\n if (callTimeId == null) {\n throw new Error('useUpdate mutation requires a non-empty id');\n }\n if (!callTimeData) {\n throw new Error(\n 'useUpdate mutation requires a non-empty data object'\n );\n }\n\n return mutateWithMiddlewares\n .current(callTimeResource, {\n id: callTimeId,\n data: callTimeData,\n previousData: callTimePreviousData,\n meta: callTimeMeta,\n })\n .then(({ data }) => data);\n },\n ...mutationOptions,\n onMutate: async (\n variables: Partial<UseUpdateMutateParams<RecordType>>\n ) => {\n if (mutationOptions.onMutate) {\n const userContext =\n (await mutationOptions.onMutate(variables)) || {};\n return {\n snapshot: snapshot.current,\n // @ts-ignore\n ...userContext,\n };\n } else {\n // Return a context object with the snapshot value\n return { snapshot: snapshot.current };\n }\n },\n onError: (error, variables = {}, context: { snapshot: Snapshot }) => {\n if (mode.current === 'optimistic' || mode.current === 'undoable') {\n // If the mutation fails, use the context returned from onMutate to rollback\n context.snapshot.forEach(([key, value]) => {\n queryClient.setQueryData(key, value);\n });\n }\n\n if (callTimeOnError.current) {\n return callTimeOnError.current(error, variables, context);\n }\n if (mutationOptions.onError) {\n return mutationOptions.onError(error, variables, context);\n }\n // call-time error callback is executed by react-query\n },\n onSuccess: (\n data: RecordType,\n variables: Partial<UseUpdateMutateParams<RecordType>> = {},\n context: unknown\n ) => {\n if (mode.current === 'pessimistic') {\n // update the getOne and getList query cache with the new result\n const {\n resource: callTimeResource = resource,\n id: callTimeId = id,\n meta: callTimeMeta = meta,\n } = variables;\n updateCache({\n resource: callTimeResource,\n id: callTimeId,\n data,\n meta: callTimeMeta,\n });\n\n if (\n mutationOptions.onSuccess &&\n !hasCallTimeOnSuccess.current\n ) {\n mutationOptions.onSuccess(data, variables, context);\n }\n }\n },\n onSettled: (\n data,\n error,\n variables = {},\n context: { snapshot: Snapshot }\n ) => {\n if (mode.current === 'optimistic' || mode.current === 'undoable') {\n // Always refetch after error or success:\n context.snapshot.forEach(([queryKey]) => {\n queryClient.invalidateQueries({ queryKey });\n });\n }\n\n if (callTimeOnSettled.current) {\n return callTimeOnSettled.current(\n data,\n error,\n variables,\n context\n );\n }\n if (mutationOptions.onSettled) {\n return mutationOptions.onSettled(\n data,\n error,\n variables,\n context\n );\n }\n },\n });\n\n const update = async (\n callTimeResource: string | undefined = resource,\n callTimeParams: Partial<UpdateParams<RecordType>> = {},\n callTimeOptions: MutateOptions<\n RecordType,\n ErrorType,\n Partial<UseUpdateMutateParams<RecordType>>,\n unknown\n > & { mutationMode?: MutationMode; returnPromise?: boolean } = {}\n ) => {\n const {\n mutationMode,\n returnPromise = mutationOptions.returnPromise,\n onError,\n onSettled,\n onSuccess,\n ...otherCallTimeOptions\n } = callTimeOptions;\n\n // Store the mutation with middlewares to avoid losing them if the calling component is unmounted\n if (getMutateWithMiddlewares) {\n mutateWithMiddlewares.current = getMutateWithMiddlewares(\n dataProvider.update.bind(dataProvider)\n );\n } else {\n mutateWithMiddlewares.current = dataProvider.update;\n }\n\n // We need to keep the onSuccess callback here and not in the useMutation for undoable mutations\n hasCallTimeOnSuccess.current = !!onSuccess;\n // We need to store the onError and onSettled callbacks here to be able to call them in the useMutation hook\n // so that they are called even when the calling component is unmounted\n callTimeOnError.current = onError;\n callTimeOnSettled.current = onSettled;\n\n // store the hook time params *at the moment of the call*\n // because they may change afterwards, which would break the undoable mode\n // as the previousData would be overwritten by the optimistic update\n paramsRef.current = params;\n\n if (mutationMode) {\n mode.current = mutationMode;\n }\n\n if (returnPromise && mode.current !== 'pessimistic') {\n console.warn(\n 'The returnPromise parameter can only be used if the mutationMode is set to pessimistic'\n );\n }\n\n if (mode.current === 'pessimistic') {\n if (returnPromise) {\n return mutation.mutateAsync(\n { resource: callTimeResource, ...callTimeParams },\n // We don't pass onError and onSettled here as we will call them in the useMutation hook side effects\n { onSuccess, ...otherCallTimeOptions }\n );\n }\n return mutation.mutate(\n { resource: callTimeResource, ...callTimeParams },\n // We don't pass onError and onSettled here as we will call them in the useMutation hook side effects\n { onSuccess, ...otherCallTimeOptions }\n );\n }\n\n const {\n id: callTimeId = id,\n data: callTimeData = data,\n meta: callTimeMeta = meta,\n } = callTimeParams;\n\n // optimistic update as documented in https://react-query-v3.tanstack.com/guides/optimistic-updates\n // except we do it in a mutate wrapper instead of the onMutate callback\n // to have access to success side effects\n\n const previousRecord = queryClient.getQueryData<RecordType>([\n callTimeResource,\n 'getOne',\n { id: String(callTimeId), meta: callTimeMeta },\n ]);\n\n const queryKeys = [\n [\n callTimeResource,\n 'getOne',\n { id: String(callTimeId), meta: callTimeMeta },\n ],\n [callTimeResource, 'getList'],\n [callTimeResource, 'getInfiniteList'],\n [callTimeResource, 'getMany'],\n [callTimeResource, 'getManyReference'],\n ];\n\n /**\n * Snapshot the previous values via queryClient.getQueriesData()\n *\n * The snapshotData ref will contain an array of tuples [query key, associated data]\n *\n * @example\n * [\n * [['posts', 'getOne', { id: '1' }], { id: 1, title: 'Hello' }],\n * [['posts', 'getList'], { data: [{ id: 1, title: 'Hello' }], total: 1 }],\n * [['posts', 'getMany'], [{ id: 1, title: 'Hello' }]],\n * ]\n *\n * @see https://react-query-v3.tanstack.com/reference/QueryClient#queryclientgetqueriesdata\n */\n snapshot.current = queryKeys.reduce(\n (prev, queryKey) =>\n prev.concat(queryClient.getQueriesData({ queryKey })),\n [] as Snapshot\n );\n\n // Cancel any outgoing re-fetches (so they don't overwrite our optimistic update)\n await Promise.all(\n snapshot.current.map(([queryKey]) =>\n queryClient.cancelQueries({ queryKey })\n )\n );\n\n // Optimistically update to the new value\n updateCache({\n resource: callTimeResource,\n id: callTimeId,\n data: callTimeData,\n meta: callTimeMeta,\n });\n\n // run the success callbacks during the next tick\n setTimeout(() => {\n if (onSuccess) {\n onSuccess(\n { ...previousRecord, ...callTimeData } as RecordType,\n { resource: callTimeResource, ...callTimeParams },\n { snapshot: snapshot.current }\n );\n } else if (\n mutationOptions.onSuccess &&\n !hasCallTimeOnSuccess.current\n ) {\n mutationOptions.onSuccess(\n { ...previousRecord, ...callTimeData } as RecordType,\n { resource: callTimeResource, ...callTimeParams },\n { snapshot: snapshot.current }\n );\n }\n }, 0);\n\n if (mode.current === 'optimistic') {\n // call the mutate method without success side effects\n return mutation.mutate({\n resource: callTimeResource,\n // We don't pass onError and onSettled here as we will call them in the useMutation hook side effects\n ...callTimeParams,\n });\n } else {\n // Undoable mutation: add the mutation to the undoable queue.\n // The Notification component will dequeue it when the user confirms or cancels the message.\n addUndoableMutation(({ isUndo }) => {\n if (isUndo) {\n // rollback\n snapshot.current.forEach(([key, value]) => {\n queryClient.setQueryData(key, value);\n });\n } else {\n // call the mutate method without success side effects\n mutation.mutate({\n resource: callTimeResource,\n ...callTimeParams,\n });\n }\n });\n }\n };\n\n const mutationResult = useMemo(\n () => ({\n isLoading: mutation.isPending,\n ...mutation,\n }),\n [mutation]\n );\n\n return [useEvent(update), mutationResult];\n};\n\ntype Snapshot = [key: QueryKey, value: any][];\n\nexport interface UseUpdateMutateParams<RecordType extends RaRecord = any> {\n resource?: string;\n id?: RecordType['id'];\n data?: Partial<RecordType>;\n previousData?: any;\n meta?: any;\n}\n\nexport type UseUpdateOptions<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> = UseMutationOptions<\n RecordType,\n ErrorType,\n Partial<Omit<UseUpdateMutateParams<RecordType>, 'mutationFn'>>\n> & {\n mutationMode?: MutationMode;\n returnPromise?: boolean;\n getMutateWithMiddlewares?: <\n UpdateFunctionType extends\n DataProvider['update'] = DataProvider['update'],\n >(\n mutate: UpdateFunctionType\n ) => (\n ...Params: Parameters<UpdateFunctionType>\n ) => ReturnType<UpdateFunctionType>;\n};\n\nexport type UpdateMutationFunction<\n RecordType extends RaRecord = any,\n TReturnPromise extends boolean = boolean,\n ErrorType = Error,\n> = (\n resource?: string,\n params?: Partial<UpdateParams<RecordType>>,\n options?: MutateOptions<\n RecordType,\n ErrorType,\n Partial<UseUpdateMutateParams<RecordType>>,\n unknown\n > & { mutationMode?: MutationMode; returnPromise?: TReturnPromise }\n) => Promise<TReturnPromise extends true ? RecordType : void>;\n\nexport type UseUpdateResult<\n RecordType extends RaRecord = any,\n TReturnPromise extends boolean = boolean,\n ErrorType = Error,\n> = [\n UpdateMutationFunction<RecordType, TReturnPromise, ErrorType>,\n UseMutationResult<\n RecordType,\n ErrorType,\n Partial<UpdateParams<RecordType> & { resource?: string }>,\n unknown\n > & { isLoading: boolean },\n];\n", "import { useContext } from 'react';\nimport { AddUndoableMutationContext } from './AddUndoableMutationContext';\n\nexport const useAddUndoableMutation = () =>\n useContext(AddUndoableMutationContext);\n", "import { createContext } from 'react';\n\nimport type { UndoableMutation } from './types';\n\nexport const AddUndoableMutationContext = createContext<\n (mutation: UndoableMutation) => void\n>(() => {});\n", "import { useMemo, useRef } from 'react';\nimport {\n useMutation,\n useQueryClient,\n UseMutationOptions,\n UseMutationResult,\n MutateOptions,\n QueryKey,\n UseInfiniteQueryResult,\n InfiniteData,\n} from '@tanstack/react-query';\n\nimport { useDataProvider } from './useDataProvider';\nimport { useAddUndoableMutation } from './undo/useAddUndoableMutation';\nimport {\n RaRecord,\n UpdateManyParams,\n MutationMode,\n GetListResult as OriginalGetListResult,\n GetInfiniteListResult,\n} from '../types';\nimport { useEvent } from '../util';\nimport { Identifier } from '..';\n\n/**\n * Get a callback to call the dataProvider.updateMany() method, the result and the loading state.\n *\n * @param {string} resource\n * @param {Params} params The updateMany parameters { ids, data, meta }\n * @param {Object} options Options object to pass to the queryClient.\n * May include side effects to be executed upon success or failure, e.g. { onSuccess: () => { refresh(); } }\n * May include a mutation mode (optimistic/pessimistic/undoable), e.g. { mutationMode: 'undoable' }\n *\n * @typedef Params\n * @prop params.ids The resource identifiers, e.g. [123, 456]\n * @prop params.data The updates to merge into the record, e.g. { views: 10 }\n * @prop params.meta Optional meta parameters\n *\n * @returns The current mutation state. Destructure as [updateMany, { data, error, isPending }].\n *\n * The return value updates according to the request state:\n *\n * - initial: [updateMany, { isPending: false, isIdle: true }]\n * - start: [updateMany, { isPending: true }]\n * - success: [updateMany, { data: [data from response], isPending: false, isSuccess: true }]\n * - error: [updateMany, { error: [error from response], isPending: false, isError: true }]\n *\n * The updateMany() function must be called with a resource and a parameter object: updateMany(resource, { ids, data, previousData }, options)\n *\n * This hook uses react-query useMutation under the hood.\n * This means the state object contains mutate, isIdle, reset and other react-query methods.\n *\n * @see https://tanstack.com/query/v5/docs/react/reference/useMutation\n *\n * @example // set params when calling the updateMany callback\n *\n * import { useUpdateMany, useListContext } from 'react-admin';\n *\n * const BulkResetViewsButton = () => {\n * const { selectedIds } = useListContext();\n * const [updateMany, { isPending, error }] = useUpdateMany();\n * const handleClick = () => {\n * updateMany('posts', { ids: selectedIds, data: { views: 0 } });\n * }\n * if (error) { return <p>ERROR</p>; }\n * return <button disabled={isPending} onClick={handleClick}>Reset views</button>;\n * };\n *\n * @example // set params when calling the hook\n *\n * import { useUpdateMany, useListContext } from 'react-admin';\n *\n * const BulkResetViewsButton = () => {\n * const { selectedIds } = useListContext();\n * const [updateMany, { isPending, error }] = useUpdateMany('posts', { ids: selectedIds, data: { views: 0 } });\n * if (error) { return <p>ERROR</p>; }\n * return <button disabled={isPending} onClick={() => updateMany()}>Reset views</button>;\n * };\n */\nexport const useUpdateMany = <\n RecordType extends RaRecord = any,\n MutationError = unknown,\n>(\n resource?: string,\n params: Partial<UpdateManyParams<Partial<RecordType>>> = {},\n options: UseUpdateManyOptions<RecordType, MutationError> = {}\n): UseUpdateManyResult<RecordType, boolean, MutationError> => {\n const dataProvider = useDataProvider();\n const queryClient = useQueryClient();\n const addUndoableMutation = useAddUndoableMutation();\n const { ids, data, meta } = params;\n const { mutationMode = 'pessimistic', ...mutationOptions } = options;\n const mode = useRef<MutationMode>(mutationMode);\n const paramsRef =\n useRef<Partial<UpdateManyParams<Partial<RecordType>>>>(params);\n const snapshot = useRef<Snapshot>([]);\n const hasCallTimeOnError = useRef(false);\n const hasCallTimeOnSuccess = useRef(false);\n const hasCallTimeOnSettled = useRef(false);\n\n const updateCache = async ({\n resource,\n ids,\n data,\n meta,\n }: {\n resource: string;\n ids: Identifier[];\n data: any;\n meta?: any;\n }) => {\n // hack: only way to tell react-query not to fetch this query for the next 5 seconds\n // because setQueryData doesn't accept a stale time option\n const updatedAt =\n mode.current === 'undoable' ? Date.now() + 1000 * 5 : Date.now();\n // Stringify and parse the data to remove undefined values.\n // If we don't do this, an update with { id: undefined } as payload\n // would remove the id from the record, which no real data provider does.\n const clonedData = JSON.parse(JSON.stringify(data));\n\n const updateColl = (old: RecordType[]) => {\n if (!old) return old;\n let newCollection = [...old];\n ids.forEach(id => {\n // eslint-disable-next-line eqeqeq\n const index = old.findIndex(record => record.id == id);\n if (index === -1) {\n return;\n }\n newCollection = [\n ...newCollection.slice(0, index),\n { ...newCollection[index], ...clonedData },\n ...newCollection.slice(index + 1),\n ];\n });\n return newCollection;\n };\n\n type GetListResult = Omit<OriginalGetListResult, 'data'> & {\n data?: RecordType[];\n };\n\n ids.forEach(id => {\n queryClient.setQueryData(\n [resource, 'getOne', { id: String(id), meta }],\n (record: RecordType) => ({ ...record, ...clonedData }),\n { updatedAt }\n );\n });\n queryClient.setQueriesData(\n { queryKey: [resource, 'getList'] },\n (res: GetListResult) =>\n res && res.data ? { ...res, data: updateColl(res.data) } : res,\n { updatedAt }\n );\n queryClient.setQueriesData(\n { queryKey: [resource, 'getInfiniteList'] },\n (\n res: UseInfiniteQueryResult<\n InfiniteData<GetInfiniteListResult>\n >['data']\n ) =>\n res && res.pages\n ? {\n ...res,\n pages: res.pages.map(page => ({\n ...page,\n data: updateColl(page.data),\n })),\n }\n : res,\n { updatedAt }\n );\n queryClient.setQueriesData(\n { queryKey: [resource, 'getMany'] },\n (coll: RecordType[]) =>\n coll && coll.length > 0 ? updateColl(coll) : coll,\n { updatedAt }\n );\n queryClient.setQueriesData(\n { queryKey: [resource, 'getManyReference'] },\n (res: GetListResult) =>\n res && res.data\n ? { data: updateColl(res.data), total: res.total }\n : res,\n { updatedAt }\n );\n };\n\n const mutation = useMutation<\n Array<RecordType['id']>,\n MutationError,\n Partial<UseUpdateManyMutateParams<RecordType>>\n >({\n mutationFn: ({\n resource: callTimeResource = resource,\n ids: callTimeIds = paramsRef.current.ids,\n data: callTimeData = paramsRef.current.data,\n meta: callTimeMeta = paramsRef.current.meta,\n } = {}) => {\n if (!callTimeResource) {\n throw new Error(\n 'useUpdateMany mutation requires a non-empty resource'\n );\n }\n if (!callTimeIds) {\n throw new Error(\n 'useUpdateMany mutation requires an array of ids'\n );\n }\n if (!callTimeData) {\n throw new Error(\n 'useUpdateMany mutation requires a non-empty data object'\n );\n }\n return dataProvider\n .updateMany<RecordType>(callTimeResource, {\n ids: callTimeIds,\n data: callTimeData,\n meta: callTimeMeta,\n })\n .then(({ data }) => data || []);\n },\n ...mutationOptions,\n onMutate: async (\n variables: Partial<UseUpdateManyMutateParams<RecordType>>\n ) => {\n if (mutationOptions.onMutate) {\n const userContext =\n (await mutationOptions.onMutate(variables)) || {};\n return {\n snapshot: snapshot.current,\n // @ts-ignore\n ...userContext,\n };\n } else {\n // Return a context object with the snapshot value\n return { snapshot: snapshot.current };\n }\n },\n onError: (\n error: MutationError,\n variables: Partial<UseUpdateManyMutateParams<RecordType>> = {},\n context: { snapshot: Snapshot }\n ) => {\n if (mode.current === 'optimistic' || mode.current === 'undoable') {\n // If the mutation fails, use the context returned from onMutate to rollback\n context.snapshot.forEach(([key, value]) => {\n queryClient.setQueryData(key, value);\n });\n }\n\n if (mutationOptions.onError && !hasCallTimeOnError.current) {\n return mutationOptions.onError(error, variables, context);\n }\n // call-time error callback is executed by react-query\n },\n onSuccess: (\n dataFromResponse: Array<RecordType['id']>,\n variables: Partial<UseUpdateManyMutateParams<RecordType>> = {},\n context: unknown\n ) => {\n if (mode.current === 'pessimistic') {\n // update the getOne and getList query cache with the new result\n const {\n resource: callTimeResource = resource,\n ids: callTimeIds = ids,\n data: callTimeData = data,\n meta: callTimeMeta = meta,\n } = variables;\n if (!callTimeResource) {\n throw new Error(\n 'useUpdateMany mutation requires a non-empty resource'\n );\n }\n if (!callTimeIds) {\n throw new Error(\n 'useUpdateMany mutation requires an array of ids'\n );\n }\n updateCache({\n resource: callTimeResource,\n ids: callTimeIds,\n data: callTimeData,\n meta: callTimeMeta,\n });\n\n if (\n mutationOptions.onSuccess &&\n !hasCallTimeOnSuccess.current\n ) {\n mutationOptions.onSuccess(\n dataFromResponse,\n variables,\n context\n );\n }\n }\n },\n onSettled: (\n data: Array<RecordType['id']>,\n error: MutationError,\n variables: Partial<UseUpdateManyMutateParams<RecordType>> = {},\n context: { snapshot: Snapshot }\n ) => {\n if (mode.current === 'optimistic' || mode.current === 'undoable') {\n // Always refetch after error or success:\n context.snapshot.forEach(([queryKey]) => {\n queryClient.invalidateQueries({ queryKey });\n });\n }\n\n if (mutationOptions.onSettled && !hasCallTimeOnSettled.current) {\n return mutationOptions.onSettled(\n data,\n error,\n variables,\n context\n );\n }\n },\n });\n\n const updateMany = async (\n callTimeResource: string | undefined = resource,\n callTimeParams: Partial<UpdateManyParams<RecordType>> = {},\n callTimeOptions: MutateOptions<\n Array<RecordType['id']>,\n unknown,\n Partial<UseUpdateManyMutateParams<RecordType>>,\n unknown\n > & { mutationMode?: MutationMode; returnPromise?: boolean } = {}\n ) => {\n if (!callTimeResource) {\n throw new Error(\n 'useUpdateMany mutation requires a non-empty resource'\n );\n }\n const {\n mutationMode,\n returnPromise = mutationOptions.returnPromise,\n ...otherCallTimeOptions\n } = callTimeOptions;\n\n hasCallTimeOnError.current = !!otherCallTimeOptions.onError;\n hasCallTimeOnSuccess.current = !!otherCallTimeOptions.onSuccess;\n hasCallTimeOnSettled.current = !!otherCallTimeOptions.onSettled;\n\n // store the hook time params *at the moment of the call*\n // because they may change afterwards, which would break the undoable mode\n // as the previousData would be overwritten by the optimistic update\n paramsRef.current = params;\n\n if (mutationMode) {\n mode.current = mutationMode;\n }\n\n if (returnPromise && mode.current !== 'pessimistic') {\n console.warn(\n 'The returnPromise parameter can only be used if the mutationMode is set to pessimistic'\n );\n }\n\n if (mode.current === 'pessimistic') {\n if (returnPromise) {\n return mutation.mutateAsync(\n { resource: callTimeResource, ...callTimeParams },\n otherCallTimeOptions\n );\n }\n return mutation.mutate(\n { resource: callTimeResource, ...callTimeParams },\n otherCallTimeOptions\n );\n }\n\n const {\n ids: callTimeIds = ids,\n data: callTimeData = data,\n meta: callTimeMeta = meta,\n } = callTimeParams;\n if (!callTimeIds) {\n throw new Error('useUpdateMany mutation requires an array of ids');\n }\n\n // optimistic update as documented in https://react-query-v5.tanstack.com/guides/optimistic-updates\n // except we do it in a mutate wrapper instead of the onMutate callback\n // to have access to success side effects\n\n const queryKeys = [\n [callTimeResource, 'getOne'],\n [callTimeResource, 'getList'],\n [callTimeResource, 'getInfiniteList'],\n [callTimeResource, 'getMany'],\n [callTimeResource, 'getManyReference'],\n ];\n\n /**\n * Snapshot the previous values via queryClient.getQueriesData()\n *\n * The snapshotData ref will contain an array of tuples [query key, associated data]\n *\n * @example\n * [\n * [['posts', 'getOne', { id: '1' }], { id: 1, title: 'Hello' }],\n * [['posts', 'getList'], { data: [{ id: 1, title: 'Hello' }], total: 1 }],\n * [['posts', 'getMany'], [{ id: 1, title: 'Hello' }]],\n * ]\n *\n * @see https://tanstack.com/query/v5/docs/react/reference/QueryClient#queryclientgetqueriesdata\n */\n snapshot.current = queryKeys.reduce(\n (prev, queryKey) =>\n prev.concat(queryClient.getQueriesData({ queryKey })),\n [] as Snapshot\n );\n\n // Cancel any outgoing re-fetches (so they don't overwrite our optimistic update)\n await Promise.all(\n snapshot.current.map(([queryKey]) =>\n queryClient.cancelQueries({ queryKey })\n )\n );\n\n // Optimistically update to the new data\n await updateCache({\n resource: callTimeResource,\n ids: callTimeIds,\n data: callTimeData,\n meta: callTimeMeta,\n });\n\n // run the success callbacks during the next tick\n setTimeout(() => {\n if (otherCallTimeOptions.onSuccess) {\n otherCallTimeOptions.onSuccess(\n callTimeIds,\n { resource: callTimeResource, ...callTimeParams },\n { snapshot: snapshot.current }\n );\n } else if (mutationOptions.onSuccess) {\n mutationOptions.onSuccess(\n callTimeIds,\n { resource: callTimeResource, ...callTimeParams },\n { snapshot: snapshot.current }\n );\n }\n }, 0);\n\n if (mode.current === 'optimistic') {\n // call the mutate method without success side effects\n return mutation.mutate(\n { resource: callTimeResource, ...callTimeParams },\n {\n onSettled: otherCallTimeOptions.onSettled,\n onError: otherCallTimeOptions.onError,\n }\n );\n } else {\n // Undoable mutation: add the mutation to the undoable queue.\n // The Notification component will dequeue it when the user confirms or cancels the message.\n addUndoableMutation(({ isUndo }) => {\n if (isUndo) {\n // rollback\n snapshot.current.forEach(([key, value]) => {\n queryClient.setQueryData(key, value);\n });\n } else {\n // call the mutate method without success side effects\n mutation.mutate(\n { resource: callTimeResource, ...callTimeParams },\n {\n onSettled: otherCallTimeOptions.onSettled,\n onError: otherCallTimeOptions.onError,\n }\n );\n }\n });\n }\n };\n\n const mutationResult = useMemo(\n () => ({\n isLoading: mutation.isPending,\n ...mutation,\n }),\n [mutation]\n );\n\n return [useEvent(updateMany), mutationResult];\n};\n\ntype Snapshot = [key: QueryKey, value: any][];\n\nexport interface UseUpdateManyMutateParams<RecordType extends RaRecord = any> {\n resource?: string;\n ids?: Array<RecordType['id']>;\n data?: Partial<RecordType>;\n previousData?: any;\n meta?: any;\n}\n\nexport type UseUpdateManyOptions<\n RecordType extends RaRecord = any,\n MutationError = unknown,\n> = UseMutationOptions<\n Array<RecordType['id']>,\n MutationError,\n Partial<Omit<UseUpdateManyMutateParams<RecordType>, 'mutationFn'>>\n> & { mutationMode?: MutationMode; returnPromise?: boolean };\n\nexport type UseUpdateManyResult<\n RecordType extends RaRecord = any,\n TReturnPromise extends boolean = boolean,\n MutationError = unknown,\n> = [\n (\n resource?: string,\n params?: Partial<UpdateManyParams<RecordType>>,\n options?: MutateOptions<\n Array<RecordType['id']>,\n MutationError,\n Partial<UseUpdateManyMutateParams<RecordType>>,\n unknown\n > & { mutationMode?: MutationMode; returnPromise?: TReturnPromise }\n ) => Promise<TReturnPromise extends true ? Array<RecordType['id']> : void>,\n UseMutationResult<\n Array<RecordType['id']>,\n MutationError,\n Partial<UpdateManyParams<Partial<RecordType>> & { resource?: string }>,\n unknown\n > & { isLoading: boolean },\n];\n", "import { useMemo, useRef } from 'react';\nimport {\n useMutation,\n useQueryClient,\n UseMutationOptions,\n UseMutationResult,\n MutateOptions,\n QueryKey,\n UseInfiniteQueryResult,\n InfiniteData,\n} from '@tanstack/react-query';\n\nimport { useDataProvider } from './useDataProvider';\nimport { useAddUndoableMutation } from './undo/useAddUndoableMutation';\nimport {\n RaRecord,\n DeleteParams,\n MutationMode,\n GetListResult as OriginalGetListResult,\n GetInfiniteListResult,\n} from '../types';\nimport { useEvent } from '../util';\n\n/**\n * Get a callback to call the dataProvider.delete() method, the result and the loading state.\n *\n * @param {string} resource\n * @param {Params} params The delete parameters { id, previousData }\n * @param {Object} options Options object to pass to the queryClient.\n * May include side effects to be executed upon success or failure, e.g. { onSuccess: () => { refresh(); } }\n * May include a mutation mode (optimistic/pessimistic/undoable), e.g. { mutationMode: 'undoable' }\n *\n * @typedef Params\n * @prop params.id The resource identifier, e.g. 123\n * @prop params.previousData The record before the update is applied\n *\n * @returns The current mutation state. Destructure as [deleteOne, { data, error, isPending }].\n *\n * The return value updates according to the request state:\n *\n * - initial: [deleteOne, { isPending: false, isIdle: true }]\n * - start: [deleteOne, { isPending: true }]\n * - success: [deleteOne, { data: [data from response], isPending: false, isSuccess: true }]\n * - error: [deleteOne, { error: [error from response], isPending: false, isError: true }]\n *\n * The deleteOne() function must be called with a resource and a parameter object: deleteOne(resource, { id, previousData, meta }, options)\n *\n * This hook uses react-query useMutation under the hood.\n * This means the state object contains mutate, isIdle, reset and other react-query methods.\n *\n * @see https://tanstack.com/query/v5/docs/react/reference/useMutation\n *\n * @example // set params when calling the deleteOne callback\n *\n * import { useDelete, useRecordContext } from 'react-admin';\n *\n * const DeleteButton = () => {\n * const record = useRecordContext();\n * const [deleteOne, { isPending, error }] = useDelete();\n * const handleClick = () => {\n * deleteOne('likes', { id: record.id, previousData: record })\n * }\n * if (error) { return <p>ERROR</p>; }\n * return <button disabled={isPending} onClick={handleClick}>Delete</div>;\n * };\n *\n * @example // set params when calling the hook\n *\n * import { useDelete, useRecordContext } from 'react-admin';\n *\n * const DeleteButton = () => {\n * const record = useRecordContext();\n * const [deleteOne, { isPending, error }] = useDelete('likes', { id: record.id, previousData: record });\n * if (error) { return <p>ERROR</p>; }\n * return <button disabled={isPending} onClick={() => deleteOne()}>Delete</button>;\n * };\n *\n * @example // TypeScript\n * const [delete, { data }] = useDelete<Product>('products', { id, previousData: product });\n * \\-- data is Product\n */\nexport const useDelete = <\n RecordType extends RaRecord = any,\n MutationError = unknown,\n>(\n resource?: string,\n params: Partial<DeleteParams<RecordType>> = {},\n options: UseDeleteOptions<RecordType, MutationError> = {}\n): UseDeleteResult<RecordType, MutationError> => {\n const dataProvider = useDataProvider();\n const queryClient = useQueryClient();\n const addUndoableMutation = useAddUndoableMutation();\n const { id, previousData } = params;\n const { mutationMode = 'pessimistic', ...mutationOptions } = options;\n const mode = useRef<MutationMode>(mutationMode);\n const paramsRef = useRef<Partial<DeleteParams<RecordType>>>(params);\n const snapshot = useRef<Snapshot>([]);\n const hasCallTimeOnError = useRef(false);\n const hasCallTimeOnSuccess = useRef(false);\n const hasCallTimeOnSettled = useRef(false);\n\n const updateCache = ({ resource, id }) => {\n // hack: only way to tell react-query not to fetch this query for the next 5 seconds\n // because setQueryData doesn't accept a stale time option\n const now = Date.now();\n const updatedAt = mode.current === 'undoable' ? now + 5 * 1000 : now;\n\n const updateColl = (old: RecordType[]) => {\n if (!old) return old;\n const index = old.findIndex(\n // eslint-disable-next-line eqeqeq\n record => record.id == id\n );\n if (index === -1) {\n return old;\n }\n return [...old.slice(0, index), ...old.slice(index + 1)];\n };\n\n type GetListResult = Omit<OriginalGetListResult, 'data'> & {\n data?: RecordType[];\n };\n\n queryClient.setQueriesData(\n { queryKey: [resource, 'getList'] },\n (res: GetListResult) => {\n if (!res || !res.data) return res;\n const newCollection = updateColl(res.data);\n const recordWasFound = newCollection.length < res.data.length;\n return recordWasFound\n ? {\n data: newCollection,\n total: res.total ? res.total - 1 : undefined,\n pageInfo: res.pageInfo,\n }\n : res;\n },\n { updatedAt }\n );\n queryClient.setQueriesData(\n { queryKey: [resource, 'getInfiniteList'] },\n (\n res: UseInfiniteQueryResult<\n InfiniteData<GetInfiniteListResult>\n >['data']\n ) => {\n if (!res || !res.pages) return res;\n return {\n ...res,\n pages: res.pages.map(page => {\n const newCollection = updateColl(page.data);\n const recordWasFound =\n newCollection.length < page.data.length;\n return recordWasFound\n ? {\n ...page,\n data: newCollection,\n total: page.total\n ? page.total - 1\n : undefined,\n pageInfo: page.pageInfo,\n }\n : page;\n }),\n };\n },\n { updatedAt }\n );\n queryClient.setQueriesData(\n { queryKey: [resource, 'getMany'] },\n (coll: RecordType[]) =>\n coll && coll.length > 0 ? updateColl(coll) : coll,\n { updatedAt }\n );\n queryClient.setQueriesData(\n { queryKey: [resource, 'getManyReference'] },\n (res: GetListResult) => {\n if (!res || !res.data) return res;\n const newCollection = updateColl(res.data);\n const recordWasFound = newCollection.length < res.data.length;\n return recordWasFound\n ? {\n data: newCollection,\n total: res.total! - 1,\n }\n : res;\n },\n { updatedAt }\n );\n };\n\n const mutation = useMutation<\n RecordType,\n MutationError,\n Partial<UseDeleteMutateParams<RecordType>>\n >({\n mutationFn: ({\n resource: callTimeResource = resource,\n id: callTimeId = paramsRef.current.id,\n previousData: callTimePreviousData = paramsRef.current.previousData,\n meta: callTimeMeta = paramsRef.current.meta,\n } = {}) => {\n if (!callTimeResource) {\n throw new Error(\n 'useDelete mutation requires a non-empty resource'\n );\n }\n if (callTimeId == null) {\n throw new Error('useDelete mutation requires a non-empty id');\n }\n return dataProvider\n .delete<RecordType>(callTimeResource, {\n id: callTimeId,\n previousData: callTimePreviousData,\n meta: callTimeMeta,\n })\n .then(({ data }) => data);\n },\n ...mutationOptions,\n onMutate: async (\n variables: Partial<UseDeleteMutateParams<RecordType>>\n ) => {\n if (mutationOptions.onMutate) {\n const userContext =\n (await mutationOptions.onMutate(variables)) || {};\n return {\n snapshot: snapshot.current,\n // @ts-ignore\n ...userContext,\n };\n } else {\n // Return a context object with the snapshot value\n return { snapshot: snapshot.current };\n }\n },\n onError: (\n error: MutationError,\n variables: Partial<UseDeleteMutateParams<RecordType>> = {},\n context: { snapshot: Snapshot }\n ) => {\n if (mode.current === 'optimistic' || mode.current === 'undoable') {\n // If the mutation fails, use the context returned from onMutate to rollback\n context.snapshot.forEach(([key, value]) => {\n queryClient.setQueryData(key, value);\n });\n }\n\n if (mutationOptions.onError && !hasCallTimeOnError.current) {\n return mutationOptions.onError(error, variables, context);\n }\n // call-time error callback is executed by react-query\n },\n onSuccess: (\n data: RecordType,\n variables: Partial<UseDeleteMutateParams<RecordType>> = {},\n context: unknown\n ) => {\n if (mode.current === 'pessimistic') {\n // update the getOne and getList query cache with the new result\n const {\n resource: callTimeResource = resource,\n id: callTimeId = id,\n } = variables;\n updateCache({\n resource: callTimeResource,\n id: callTimeId,\n });\n\n if (\n mutationOptions.onSuccess &&\n !hasCallTimeOnSuccess.current\n ) {\n mutationOptions.onSuccess(data, variables, context);\n }\n // call-time success callback is executed by react-query\n }\n },\n onSettled: (\n data: RecordType,\n error: MutationError,\n variables: Partial<UseDeleteMutateParams<RecordType>> = {},\n context: { snapshot: Snapshot }\n ) => {\n // Always refetch after error or success:\n context.snapshot.forEach(([queryKey]) => {\n queryClient.invalidateQueries({ queryKey });\n });\n\n if (mutationOptions.onSettled && !hasCallTimeOnSettled.current) {\n return mutationOptions.onSettled(\n data,\n error,\n variables,\n context\n );\n }\n },\n });\n\n const mutate = async (\n callTimeResource: string | undefined = resource,\n callTimeParams: Partial<DeleteParams<RecordType>> = {},\n callTimeOptions: MutateOptions<\n RecordType,\n MutationError,\n Partial<UseDeleteMutateParams<RecordType>>,\n unknown\n > & {\n mutationMode?: MutationMode;\n onSuccess?: (\n data: RecordType | undefined,\n variables: Partial<UseDeleteMutateParams<RecordType>>,\n context: unknown\n ) => void;\n } = {}\n ) => {\n const { mutationMode, ...otherCallTimeOptions } = callTimeOptions;\n hasCallTimeOnError.current = !!callTimeOptions.onError;\n hasCallTimeOnSuccess.current = !!callTimeOptions.onSuccess;\n hasCallTimeOnSettled.current = !!callTimeOptions.onSettled;\n\n // store the hook time params *at the moment of the call*\n // because they may change afterwards, which would break the undoable mode\n // as the previousData would be overwritten by the optimistic update\n paramsRef.current = params;\n\n if (mutationMode) {\n mode.current = mutationMode;\n }\n\n const {\n id: callTimeId = id,\n previousData: callTimePreviousData = previousData,\n } = callTimeParams;\n\n // optimistic update as documented in https://react-query-v5.tanstack.com/guides/optimistic-updates\n // except we do it in a mutate wrapper instead of the onMutate callback\n // to have access to success side effects\n\n const queryKeys = [\n [callTimeResource, 'getList'],\n [callTimeResource, 'getInfiniteList'],\n [callTimeResource, 'getMany'],\n [callTimeResource, 'getManyReference'],\n ];\n\n /**\n * Snapshot the previous values via queryClient.getQueriesData()\n *\n * The snapshotData ref will contain an array of tuples [query key, associated data]\n *\n * @example\n * [\n * [['posts', 'getList'], { data: [{ id: 1, title: 'Hello' }], total: 1 }],\n * [['posts', 'getMany'], [{ id: 1, title: 'Hello' }]],\n * ]\n *\n * @see https://tanstack.com/query/v5/docs/react/reference/QueryClient#queryclientgetqueriesdata\n */\n snapshot.current = queryKeys.reduce(\n (prev, queryKey) =>\n prev.concat(queryClient.getQueriesData({ queryKey })),\n [] as Snapshot\n );\n\n if (mode.current === 'pessimistic') {\n return mutation.mutate(\n { resource: callTimeResource, ...callTimeParams },\n otherCallTimeOptions\n );\n }\n\n // Cancel any outgoing re-fetches (so they don't overwrite our optimistic update)\n await Promise.all(\n snapshot.current.map(([queryKey]) =>\n queryClient.cancelQueries({ queryKey })\n )\n );\n\n // Optimistically update to the new value\n updateCache({\n resource: callTimeResource,\n id: callTimeId,\n });\n\n // run the success callbacks during the next tick\n setTimeout(() => {\n if (callTimeOptions.onSuccess) {\n callTimeOptions.onSuccess(\n callTimePreviousData,\n { resource: callTimeResource, ...callTimeParams },\n { snapshot: snapshot.current }\n );\n } else if (mutationOptions.onSuccess) {\n mutationOptions.onSuccess(\n callTimePreviousData,\n { resource: callTimeResource, ...callTimeParams },\n { snapshot: snapshot.current }\n );\n }\n }, 0);\n\n if (mode.current === 'optimistic') {\n // call the mutate method without success side effects\n return mutation.mutate(\n { resource: callTimeResource, ...callTimeParams },\n {\n onSettled: callTimeOptions.onSettled,\n onError: callTimeOptions.onError,\n }\n );\n } else {\n // Undoable mutation: add the mutation to the undoable queue.\n // The Notification component will dequeue it when the user confirms or cancels the message.\n addUndoableMutation(({ isUndo }) => {\n if (isUndo) {\n // rollback\n snapshot.current.forEach(([key, value]) => {\n queryClient.setQueryData(key, value);\n });\n } else {\n // call the mutate method without success side effects\n mutation.mutate(\n { resource: callTimeResource, ...callTimeParams },\n {\n onSettled: callTimeOptions.onSettled,\n onError: callTimeOptions.onError,\n }\n );\n }\n });\n }\n };\n\n const mutationResult = useMemo(\n () => ({\n isLoading: mutation.isPending,\n ...mutation,\n }),\n [mutation]\n );\n\n return [useEvent(mutate), mutationResult];\n};\n\ntype Snapshot = [key: QueryKey, value: any][];\n\nexport interface UseDeleteMutateParams<RecordType extends RaRecord = any> {\n resource?: string;\n id?: RecordType['id'];\n data?: Partial<RecordType>;\n previousData?: any;\n meta?: any;\n}\n\nexport type UseDeleteOptions<\n RecordType extends RaRecord = any,\n MutationError = unknown,\n> = UseMutationOptions<\n RecordType,\n MutationError,\n Partial<UseDeleteMutateParams<RecordType>>\n> & {\n mutationMode?: MutationMode;\n onSuccess?: (\n data: RecordType | undefined,\n variables: Partial<UseDeleteMutateParams<RecordType>>,\n context: unknown\n ) => void;\n};\n\nexport type UseDeleteResult<\n RecordType extends RaRecord = any,\n MutationError = unknown,\n> = [\n (\n resource?: string,\n params?: Partial<DeleteParams<RecordType>>,\n options?: MutateOptions<\n RecordType,\n MutationError,\n Partial<UseDeleteMutateParams<RecordType>>,\n unknown\n > & {\n mutationMode?: MutationMode;\n }\n ) => Promise<void>,\n UseMutationResult<\n RecordType,\n MutationError,\n Partial<DeleteParams<RecordType> & { resource?: string }>,\n unknown\n > & { isLoading: boolean },\n];\n", "import { useMemo, useRef } from 'react';\nimport {\n useMutation,\n useQueryClient,\n UseMutationOptions,\n UseMutationResult,\n MutateOptions,\n QueryKey,\n UseInfiniteQueryResult,\n InfiniteData,\n} from '@tanstack/react-query';\n\nimport { useDataProvider } from './useDataProvider';\nimport { useAddUndoableMutation } from './undo/useAddUndoableMutation';\nimport {\n RaRecord,\n DeleteManyParams,\n MutationMode,\n GetListResult as OriginalGetListResult,\n GetInfiniteListResult,\n} from '../types';\nimport { useEvent } from '../util';\n\n/**\n * Get a callback to call the dataProvider.delete() method, the result and the loading state.\n *\n * @param {string} resource\n * @param {Params} params The delete parameters { ids }\n * @param {Object} options Options object to pass to the queryClient.\n * May include side effects to be executed upon success or failure, e.g. { onSuccess: () => { refresh(); } }\n * May include a mutation mode (optimistic/pessimistic/undoable), e.g. { mutationMode: 'undoable' }\n *\n * @typedef Params\n * @prop params.ids The resource identifiers, e.g. [123, 456]\n *\n * @returns The current mutation state. Destructure as [deleteMany, { data, error, isPending }].\n *\n * The return value updates according to the request state:\n *\n * - initial: [deleteMany, { isPending: false, isIdle: true }]\n * - start: [deleteMany, { isPending: true }]\n * - success: [deleteMany, { data: [data from response], isPending: false, isSuccess: true }]\n * - error: [deleteMany, { error: [error from response], isPending: false, isError: true }]\n *\n * The deleteMany() function must be called with a resource and a parameter object: deleteMany(resource, { ids, meta }, options)\n *\n * This hook uses react-query useMutation under the hood.\n * This means the state object contains mutate, isIdle, reset and other react-query methods.\n *\n * @see https://tanstack.com/query/v5/docs/react/reference/useMutation\n *\n * @example // set params when calling the deleteMany callback\n *\n * import { useDeleteMany } from 'react-admin';\n *\n * const BulkDeletePostsButton = ({ selectedIds }) => {\n * const [deleteMany, { isPending, error }] = useDeleteMany();\n * const handleClick = () => {\n * deleteMany('posts', { ids: selectedIds })\n * }\n * if (error) { return <p>ERROR</p>; }\n * return <button disabled={isPending} onClick={handleClick}>Delete selected posts</button>;\n * };\n *\n * @example // set params when calling the hook\n *\n * import { useDeleteMany } from 'react-admin';\n *\n * const BulkDeletePostsButton = ({ selectedIds }) => {\n * const [deleteMany, { isPending, error }] = useDeleteMany('posts', { ids: selectedIds });\n * const handleClick = () => {\n * deleteMany()\n * }\n * if (error) { return <p>ERROR</p>; }\n * return <button disabled={isPending} onClick={handleClick}>Delete selected posts</button>;\n * };\n *\n * @example // TypeScript\n * const [deleteMany, { data }] = useDeleteMany<Product>('products', { ids });\n * \\-- data is Product\n */\nexport const useDeleteMany = <\n RecordType extends RaRecord = any,\n MutationError = unknown,\n>(\n resource?: string,\n params: Partial<DeleteManyParams<RecordType>> = {},\n options: UseDeleteManyOptions<RecordType, MutationError> = {}\n): UseDeleteManyResult<RecordType, MutationError> => {\n const dataProvider = useDataProvider();\n const queryClient = useQueryClient();\n const addUndoableMutation = useAddUndoableMutation();\n const { ids } = params;\n const { mutationMode = 'pessimistic', ...mutationOptions } = options;\n const mode = useRef<MutationMode>(mutationMode);\n const paramsRef = useRef<Partial<DeleteManyParams<RecordType>>>({});\n const snapshot = useRef<Snapshot>([]);\n const hasCallTimeOnError = useRef(false);\n const hasCallTimeOnSuccess = useRef(false);\n const hasCallTimeOnSettled = useRef(false);\n\n const updateCache = ({ resource, ids }) => {\n // hack: only way to tell react-query not to fetch this query for the next 5 seconds\n // because setQueryData doesn't accept a stale time option\n const now = Date.now();\n const updatedAt = mode.current === 'undoable' ? now + 5 * 1000 : now;\n\n const updateColl = (old: RecordType[]) => {\n if (!old) return old;\n let newCollection = [...old];\n ids.forEach(id => {\n const index = newCollection.findIndex(\n // eslint-disable-next-line eqeqeq\n record => record.id == id\n );\n if (index === -1) {\n return;\n }\n newCollection = [\n ...newCollection.slice(0, index),\n ...newCollection.slice(index + 1),\n ];\n });\n return newCollection;\n };\n\n type GetListResult = Omit<OriginalGetListResult, 'data'> & {\n data?: RecordType[];\n };\n\n queryClient.setQueriesData(\n { queryKey: [resource, 'getList'] },\n (res: GetListResult) => {\n if (!res || !res.data) return res;\n const newCollection = updateColl(res.data);\n const recordWasFound = newCollection.length < res.data.length;\n return recordWasFound\n ? {\n data: newCollection,\n total: res.total\n ? res.total -\n (res.data.length - newCollection.length)\n : undefined,\n pageInfo: res.pageInfo,\n }\n : res;\n },\n { updatedAt }\n );\n queryClient.setQueriesData(\n { queryKey: [resource, 'getInfiniteList'] },\n (\n res: UseInfiniteQueryResult<\n InfiniteData<GetInfiniteListResult>\n >['data']\n ) => {\n if (!res || !res.pages) return res;\n return {\n ...res,\n pages: res.pages.map(page => {\n const newCollection = updateColl(page.data);\n const recordWasFound =\n newCollection.length < page.data.length;\n return recordWasFound\n ? {\n ...page,\n data: newCollection,\n total: page.total\n ? page.total -\n (page.data.length -\n newCollection.length)\n : undefined,\n pageInfo: page.pageInfo,\n }\n : page;\n }),\n };\n },\n { updatedAt }\n );\n queryClient.setQueriesData(\n { queryKey: [resource, 'getMany'] },\n (coll: RecordType[]) =>\n coll && coll.length > 0 ? updateColl(coll) : coll,\n { updatedAt }\n );\n queryClient.setQueriesData(\n { queryKey: [resource, 'getManyReference'] },\n (res: GetListResult) => {\n if (!res || !res.data) return res;\n const newCollection = updateColl(res.data);\n const recordWasFound = newCollection.length < res.data.length;\n if (!recordWasFound) {\n return res;\n }\n if (res.total) {\n return {\n data: newCollection,\n total:\n res.total -\n (res.data.length - newCollection.length),\n };\n }\n if (res.pageInfo) {\n return {\n data: newCollection,\n pageInfo: res.pageInfo,\n };\n }\n throw new Error(\n 'Found getList result in cache without total or pageInfo'\n );\n },\n { updatedAt }\n );\n };\n\n const mutation = useMutation<\n RecordType['id'][],\n MutationError,\n Partial<UseDeleteManyMutateParams<RecordType>>\n >({\n mutationFn: ({\n resource: callTimeResource = resource,\n ids: callTimeIds = paramsRef.current.ids,\n meta: callTimeMeta = paramsRef.current.meta,\n } = {}) => {\n if (!callTimeResource) {\n throw new Error(\n 'useDeleteMany mutation requires a non-empty resource'\n );\n }\n if (!callTimeIds) {\n throw new Error(\n 'useDeleteMany mutation requires an array of ids'\n );\n }\n if (callTimeIds.length === 0) {\n return Promise.resolve([]);\n }\n return dataProvider\n .deleteMany<RecordType>(callTimeResource, {\n ids: callTimeIds,\n meta: callTimeMeta,\n })\n .then(({ data }) => data || []);\n },\n ...mutationOptions,\n onMutate: async (\n variables: Partial<UseDeleteManyMutateParams<RecordType>>\n ) => {\n if (mutationOptions.onMutate) {\n const userContext =\n (await mutationOptions.onMutate(variables)) || {};\n return {\n snapshot: snapshot.current,\n // @ts-ignore\n ...userContext,\n };\n } else {\n // Return a context object with the snapshot value\n return { snapshot: snapshot.current };\n }\n },\n onError: (\n error: MutationError,\n variables: Partial<UseDeleteManyMutateParams<RecordType>> = {},\n context: { snapshot: Snapshot }\n ) => {\n if (mode.current === 'optimistic' || mode.current === 'undoable') {\n // If the mutation fails, use the context returned from onMutate to rollback\n context.snapshot.forEach(([key, value]) => {\n queryClient.setQueryData(key, value);\n });\n }\n\n if (mutationOptions.onError && !hasCallTimeOnError.current) {\n return mutationOptions.onError(error, variables, context);\n }\n // call-time error callback is executed by react-query\n },\n onSuccess: (\n data: RecordType['id'][],\n variables: Partial<UseDeleteManyMutateParams<RecordType>> = {},\n context: unknown\n ) => {\n if (mode.current === 'pessimistic') {\n // update the getOne and getList query cache with the new result\n const {\n resource: callTimeResource = resource,\n ids: callTimeIds = ids,\n } = variables;\n updateCache({\n resource: callTimeResource,\n ids: callTimeIds,\n });\n\n if (\n mutationOptions.onSuccess &&\n !hasCallTimeOnSuccess.current\n ) {\n mutationOptions.onSuccess(data, variables, context);\n }\n // call-time success callback is executed by react-query\n }\n },\n onSettled: (\n data: RecordType['id'][],\n error: MutationError,\n variables: Partial<UseDeleteManyMutateParams<RecordType>> = {},\n context: { snapshot: Snapshot }\n ) => {\n if (mode.current === 'optimistic' || mode.current === 'undoable') {\n // Always refetch after error or success:\n context.snapshot.forEach(([queryKey]) => {\n queryClient.invalidateQueries({ queryKey });\n });\n }\n\n if (mutationOptions.onSettled && !hasCallTimeOnSettled.current) {\n return mutationOptions.onSettled(\n data,\n error,\n variables,\n context\n );\n }\n },\n });\n\n const mutate = async (\n callTimeResource: string | undefined = resource,\n callTimeParams: Partial<DeleteManyParams<RecordType>> = {},\n callTimeOptions: MutateOptions<\n RecordType['id'][],\n unknown,\n Partial<UseDeleteManyMutateParams<RecordType>>,\n unknown\n > & { mutationMode?: MutationMode } = {}\n ) => {\n const { mutationMode, ...otherCallTimeOptions } = callTimeOptions;\n hasCallTimeOnError.current = !!callTimeOptions.onError;\n hasCallTimeOnSuccess.current = !!callTimeOptions.onSuccess;\n hasCallTimeOnSettled.current = !!callTimeOptions.onSettled;\n // store the hook time params *at the moment of the call*\n // because they may change afterwards, which would break the undoable mode\n // as the previousData would be overwritten by the optimistic update\n paramsRef.current = params;\n\n if (mutationMode) {\n mode.current = mutationMode;\n }\n\n if (mode.current === 'pessimistic') {\n return mutation.mutate(\n { resource: callTimeResource, ...callTimeParams },\n {\n onSuccess: otherCallTimeOptions.onSuccess,\n onSettled: otherCallTimeOptions.onSettled,\n onError: otherCallTimeOptions.onError,\n }\n );\n }\n\n const { ids: callTimeIds = ids } = callTimeParams;\n if (!callTimeIds) {\n throw new Error('useDeleteMany mutation requires an array of ids');\n }\n\n // optimistic update as documented in https://react-query-v5.tanstack.com/guides/optimistic-updates\n // except we do it in a mutate wrapper instead of the onMutate callback\n // to have access to success side effects\n\n const queryKeys = [\n [callTimeResource, 'getList'],\n [callTimeResource, 'getInfiniteList'],\n [callTimeResource, 'getMany'],\n [callTimeResource, 'getManyReference'],\n ];\n\n /**\n * Snapshot the previous values via queryClient.getQueriesData()\n *\n * The snapshotData ref will contain an array of tuples [query key, associated data]\n *\n * @example\n * [\n * [['posts', 'getList'], { data: [{ id: 1, title: 'Hello' }], total: 1 }],\n * [['posts', 'getMany'], [{ id: 1, title: 'Hello' }]],\n * ]\n *\n * @see https://tanstack.com/query/v5/docs/react/reference/QueryClient#queryclientgetqueriesdata\n */\n snapshot.current = queryKeys.reduce(\n (prev, queryKey) =>\n prev.concat(queryClient.getQueriesData({ queryKey })),\n [] as Snapshot\n );\n\n // Cancel any outgoing re-fetches (so they don't overwrite our optimistic update)\n await Promise.all(\n snapshot.current.map(([queryKey]) =>\n queryClient.cancelQueries({ queryKey })\n )\n );\n\n // Optimistically update to the new value\n updateCache({\n resource: callTimeResource,\n ids: callTimeIds,\n });\n\n // run the success callbacks during the next tick\n setTimeout(() => {\n if (otherCallTimeOptions.onSuccess) {\n otherCallTimeOptions.onSuccess(\n callTimeIds,\n { resource: callTimeResource, ...callTimeParams },\n { snapshot: snapshot.current }\n );\n } else if (mutationOptions.onSuccess) {\n mutationOptions.onSuccess(\n callTimeIds,\n { resource: callTimeResource, ...callTimeParams },\n { snapshot: snapshot.current }\n );\n }\n }, 0);\n\n if (mode.current === 'optimistic') {\n // call the mutate method without success side effects\n return mutation.mutate(\n { resource: callTimeResource, ...callTimeParams },\n {\n onSettled: otherCallTimeOptions.onSettled,\n onError: otherCallTimeOptions.onError,\n }\n );\n } else {\n // Undoable mutation: add the mutation to the undoable queue.\n // The Notification component will dequeue it when the user confirms or cancels the message.\n addUndoableMutation(({ isUndo }) => {\n if (isUndo) {\n // rollback\n snapshot.current.forEach(([key, value]) => {\n queryClient.setQueryData(key, value);\n });\n } else {\n // call the mutate method without success side effects\n mutation.mutate(\n { resource: callTimeResource, ...callTimeParams },\n {\n onSettled: otherCallTimeOptions.onSettled,\n onError: otherCallTimeOptions.onError,\n }\n );\n }\n });\n }\n };\n\n const mutationResult = useMemo(\n () => ({\n isLoading: mutation.isPending,\n ...mutation,\n }),\n [mutation]\n );\n\n return [useEvent(mutate), mutationResult];\n};\n\ntype Snapshot = [key: QueryKey, value: any][];\n\nexport interface UseDeleteManyMutateParams<RecordType extends RaRecord = any> {\n resource?: string;\n ids?: RecordType['id'][];\n meta?: any;\n}\n\nexport type UseDeleteManyOptions<\n RecordType extends RaRecord = any,\n MutationError = unknown,\n> = UseMutationOptions<\n RecordType['id'][],\n MutationError,\n Partial<UseDeleteManyMutateParams<RecordType>>\n> & { mutationMode?: MutationMode };\n\nexport type UseDeleteManyResult<\n RecordType extends RaRecord = any,\n MutationError = unknown,\n> = [\n (\n resource?: string,\n params?: Partial<DeleteManyParams<RecordType>>,\n options?: MutateOptions<\n RecordType['id'][],\n MutationError,\n Partial<UseDeleteManyMutateParams<RecordType>>,\n unknown\n > & { mutationMode?: MutationMode }\n ) => Promise<void>,\n UseMutationResult<\n RecordType['id'][],\n MutationError,\n Partial<DeleteManyParams<RecordType> & { resource?: string }>,\n unknown\n > & { isLoading: boolean },\n];\n", "import {\n InfiniteData,\n QueryKey,\n useInfiniteQuery,\n UseInfiniteQueryOptions,\n UseInfiniteQueryResult,\n useQueryClient,\n} from '@tanstack/react-query';\n\nimport { RaRecord, GetListParams, GetInfiniteListResult } from '../types';\nimport { useDataProvider } from './useDataProvider';\nimport { useEffect, useRef } from 'react';\nimport { useEvent } from '../util';\n\nconst MAX_DATA_LENGTH_TO_CACHE = 100;\n\n/**\n * Call the dataProvider.getList() method and return the resolved result\n * as well as the loading state. The return from useInfiniteGetList is equivalent to the return from react-hook form useInfiniteQuery.\n *\n * @see https://tanstack.com/query/v5/docs/react/reference/useInfiniteQuery\n *\n * This hook will return the cached result when called a second time\n * with the same parameters, until the response arrives.\n *\n * @param {string} resource The resource name, e.g. 'posts'\n * @param {Params} params The getList parameters { pagination, sort, filter, meta }\n * @param {Object} options Options object to pass to the queryClient.\n * May include side effects to be executed upon success or failure, e.g. { onSuccess: () => { fetchNextPage(); } }\n *\n * @typedef Params\n * @prop params.pagination The request pagination { page, perPage }, e.g. { page: 1, perPage: 10 }\n * @prop params.sort The request sort { field, order }, e.g. { field: 'id', order: 'DESC' }\n * @prop params.filter The request filters, e.g. { title: 'hello, world' }\n * @prop params.meta Optional meta parameters\n *\n * @returns The current request state. Destructure as { data, total, error, isPending, isSuccess, hasNextPage, fetchNextPage }.\n *\n * @example\n *\n * import { useInfiniteGetList } from 'react-admin';\n *\n * const LatestNews = () => {\n * const { data, total, isPending, error, hasNextPage, fetchNextPage } = useInfiniteGetList(\n * 'posts',\n * { pagination: { page: 1, perPage: 10 }, sort: { field: 'published_at', order: 'DESC' } }\n * );\n * if (isPending) { return <Loading />; }\n * if (error) { return <p>ERROR</p>; }\n * return (\n * <>\n * <ul>\n * {data?.pages.map(page => {\n * return page.data.map(post => (\n * <li key={post.id}>{post.title}</li>\n * ));\n * })}\n * </ul>\n * <div>\n * <button disabled={!hasNextPage} onClick={() => fetchNextPage()}>\n * Fetch next page\n * </button>\n * </div>\n * </>\n * );\n * };\n */\n\nexport const useInfiniteGetList = <\n RecordType extends RaRecord = any,\n ErrorType = Error,\n>(\n resource: string,\n params: Partial<GetListParams> = {},\n options: UseInfiniteGetListOptions<RecordType, ErrorType> = {}\n): UseInfiniteGetListHookValue<RecordType, ErrorType> => {\n const {\n pagination = { page: 1, perPage: 25 },\n sort = { field: 'id', order: 'DESC' },\n filter = {},\n meta,\n } = params;\n const dataProvider = useDataProvider();\n const queryClient = useQueryClient();\n const {\n onSuccess = noop,\n onError = noop,\n onSettled = noop,\n ...queryOptions\n } = options;\n const onSuccessEvent = useEvent(onSuccess);\n const onErrorEvent = useEvent(onError);\n const onSettledEvent = useEvent(onSettled);\n\n const result = useInfiniteQuery<\n GetInfiniteListResult<RecordType>,\n ErrorType,\n InfiniteData<GetInfiniteListResult<RecordType>>,\n QueryKey,\n number\n >({\n queryKey: [\n resource,\n 'getInfiniteList',\n { pagination, sort, filter, meta },\n ],\n queryFn: queryParams => {\n const { pageParam = pagination.page } = queryParams;\n return dataProvider\n .getList<RecordType>(resource, {\n pagination: {\n page: pageParam,\n perPage: pagination.perPage,\n },\n sort,\n filter,\n meta,\n signal:\n dataProvider.supportAbortSignal === true\n ? queryParams.signal\n : undefined,\n })\n .then(({ data, pageInfo, total, meta }) => ({\n data,\n total,\n pageParam,\n pageInfo,\n meta,\n }));\n },\n initialPageParam: pagination.page,\n ...queryOptions,\n getNextPageParam: lastLoadedPage => {\n if (lastLoadedPage.pageInfo) {\n return lastLoadedPage.pageInfo.hasNextPage\n ? lastLoadedPage.pageParam + 1\n : undefined;\n }\n const totalPages = Math.ceil(\n (lastLoadedPage.total || 0) / pagination.perPage\n );\n\n return lastLoadedPage.pageParam < totalPages\n ? Number(lastLoadedPage.pageParam) + 1\n : undefined;\n },\n getPreviousPageParam: lastLoadedPage => {\n if (lastLoadedPage.pageInfo) {\n return lastLoadedPage.pageInfo.hasPreviousPage\n ? lastLoadedPage.pageParam - 1\n : undefined;\n }\n\n return lastLoadedPage.pageParam === 1\n ? undefined\n : lastLoadedPage.pageParam - 1;\n },\n });\n\n const metaValue = useRef(meta);\n const resourceValue = useRef(resource);\n\n useEffect(() => {\n metaValue.current = meta;\n }, [meta]);\n\n useEffect(() => {\n resourceValue.current = resource;\n }, [resource]);\n\n useEffect(() => {\n if (\n result.data === undefined ||\n result.error != null ||\n result.isFetching\n )\n return;\n // optimistically populate the getOne cache\n const allPagesDataLength = result.data.pages.reduce(\n (acc, page) => acc + page.data.length,\n 0\n );\n if (allPagesDataLength <= MAX_DATA_LENGTH_TO_CACHE) {\n result.data.pages.forEach(page => {\n page.data.forEach(record => {\n queryClient.setQueryData(\n [\n resourceValue.current,\n 'getOne',\n { id: String(record.id), meta: metaValue.current },\n ],\n oldRecord => oldRecord ?? record\n );\n });\n });\n }\n\n onSuccessEvent(result.data);\n }, [\n onSuccessEvent,\n queryClient,\n result.data,\n result.error,\n result.isFetching,\n ]);\n\n useEffect(() => {\n if (result.error == null || result.isFetching) return;\n onErrorEvent(result.error);\n }, [onErrorEvent, result.error, result.isFetching]);\n\n useEffect(() => {\n if (result.status === 'pending' || result.isFetching) return;\n onSettledEvent(result.data, result.error);\n }, [\n onSettledEvent,\n result.data,\n result.error,\n result.status,\n result.isFetching,\n ]);\n\n return (\n result.data\n ? {\n ...result,\n data: result.data,\n total: result.data?.pages[0]?.total ?? undefined,\n meta: result.data?.pages[0]?.meta,\n }\n : result\n ) as UseInfiniteQueryResult<\n InfiniteData<GetInfiniteListResult<RecordType>>,\n ErrorType\n > & {\n total?: number;\n meta?: any;\n };\n};\n\nconst noop = () => undefined;\n\nexport type UseInfiniteGetListOptions<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> = Omit<\n UseInfiniteQueryOptions<\n GetInfiniteListResult<RecordType>,\n ErrorType,\n InfiniteData<GetInfiniteListResult<RecordType>>,\n GetInfiniteListResult<RecordType>,\n QueryKey,\n number\n >,\n | 'queryKey'\n | 'queryFn'\n | 'getNextPageParam'\n | 'getPreviousPageParam'\n | 'initialPageParam'\n> & {\n onSuccess?: (data: InfiniteData<GetInfiniteListResult<RecordType>>) => void;\n onError?: (error: ErrorType) => void;\n onSettled?: (\n data?: InfiniteData<GetInfiniteListResult<RecordType>>,\n error?: ErrorType | null\n ) => void;\n};\n\nexport type UseInfiniteGetListHookValue<\n RecordType extends RaRecord = any,\n ErrorType = Error,\n> = UseInfiniteQueryResult<\n InfiniteData<GetInfiniteListResult<RecordType>>,\n ErrorType\n> & {\n total?: number;\n pageParam?: number;\n};\n", "import { createContext } from 'react';\n\nimport type { UndoableMutation } from './types';\n\nexport const TakeUndoableMutationContext = createContext<\n () => UndoableMutation | void\n>(() => {});\n", "import * as React from 'react';\nimport { useState, useCallback } from 'react';\n\nimport { AddUndoableMutationContext } from './AddUndoableMutationContext';\nimport { TakeUndoableMutationContext } from './TakeUndoableMutationContext';\nimport type { UndoableMutation } from './types';\n\n/**\n * Exposes and manages a queue of undoable mutations\n *\n * This context is used in CoreAdminContext so that every react-admin app\n * can use the useAddUndoableMutation and useTakeUndoableMutation hooks.\n *\n * Note: We need a separate queue for mutations (instead of using the\n * notifications queue) because the mutations are not dequeued when the\n * notification is displayed, but when it is dismissed.\n */\nexport const UndoableMutationsContextProvider = ({ children }) => {\n const [mutations, setMutations] = useState<UndoableMutation[]>([]);\n\n /**\n * Add a new mutation (pushes a new mutation to the queue).\n *\n * Used by optimistic data provider hooks, e.g., useDelete\n */\n const addMutation = useCallback((mutation: UndoableMutation) => {\n setMutations(mutations => [...mutations, mutation]);\n }, []);\n\n /**\n * Get the next mutation to execute (shifts the first mutation from the queue) and returns it.\n *\n * Used by the Notification component to process or undo the mutation\n */\n const takeMutation = useCallback(() => {\n if (mutations.length === 0) return;\n const [mutation, ...rest] = mutations;\n setMutations(rest);\n return mutation;\n }, [mutations]);\n\n return (\n <TakeUndoableMutationContext.Provider value={takeMutation}>\n <AddUndoableMutationContext.Provider value={addMutation}>\n {children}\n </AddUndoableMutationContext.Provider>\n </TakeUndoableMutationContext.Provider>\n );\n};\n", "import { useContext } from 'react';\nimport { TakeUndoableMutationContext } from './TakeUndoableMutationContext';\n\nexport const useTakeUndoableMutation = () =>\n useContext(TakeUndoableMutationContext);\n", "import * as React from 'react';\nimport { ReactElement, useCallback, useMemo, useState } from 'react';\nimport {\n PreferencesEditorContext,\n PreferencesEditorContextValue,\n} from './PreferencesEditorContext';\n\nexport const PreferencesEditorContextProvider = ({ children }) => {\n const [isEnabled, setIsEnabled] = useState(false);\n const [editor, setEditor] = useState<ReactElement | null>(null);\n const [preferenceKey, setPreferenceKey] = useState<string | null>(null);\n const [path, setPath] = useState<string | null>(null);\n const [title, setTitleString] = useState<string | null>(null);\n const [titleOptions, setTitleOptions] = useState<any>();\n const enable = useCallback(() => setIsEnabled(true), []);\n const disable = useCallback(() => {\n setIsEnabled(false);\n setEditor(null);\n }, []);\n\n const setTitle = useCallback((title: string, titleOptions?: any) => {\n setTitleString(title);\n setTitleOptions(titleOptions);\n }, []);\n\n const context = useMemo<PreferencesEditorContextValue>(() => {\n return {\n editor,\n setEditor,\n preferenceKey,\n setPreferenceKey,\n title,\n titleOptions,\n setTitle,\n isEnabled,\n disable,\n enable,\n path,\n setPath,\n };\n }, [\n disable,\n enable,\n editor,\n preferenceKey,\n isEnabled,\n path,\n setPath,\n title,\n titleOptions,\n setTitle,\n ]);\n\n return (\n <PreferencesEditorContext.Provider value={context}>\n {children}\n </PreferencesEditorContext.Provider>\n );\n};\n", "import * as React from 'react';\nimport { createContext, ReactElement } from 'react';\n\nexport const PreferencesEditorContext = createContext<\n PreferencesEditorContextValue | undefined\n>(undefined);\n\nexport type PreferencesEditorContextValue = {\n editor: ReactElement | null;\n setEditor: React.Dispatch<React.SetStateAction<ReactElement | null>>;\n preferenceKey: string | null;\n setPreferenceKey: React.Dispatch<React.SetStateAction<string | null>>;\n title: string | null;\n titleOptions?: any;\n setTitle: (title: string, titleOptions?: any) => void;\n isEnabled: boolean;\n enable: () => void;\n disable: () => void;\n path: string | null;\n setPath: (path: string) => void;\n};\n", "import * as React from 'react';\nimport {\n ComponentType,\n useEffect,\n isValidElement,\n createElement,\n useState,\n ErrorInfo,\n ReactElement,\n} from 'react';\nimport { Routes, Route } from 'react-router-dom';\nimport { ErrorBoundary } from 'react-error-boundary';\n\nimport { CoreAdminRoutes } from './CoreAdminRoutes';\nimport { useResetErrorBoundaryOnLocationChange } from '../routing';\nimport { Ready } from '../util';\nimport { DefaultTitleContextProvider } from './DefaultTitleContext';\nimport type {\n TitleComponent,\n LoginComponent,\n LayoutComponent,\n AdminChildren,\n CatchAllComponent,\n DashboardComponent,\n LoadingComponent,\n} from '../types';\n\nexport type ChildrenFunction = () => ComponentType[];\n\nconst DefaultLayout = ({ children }: { children: React.ReactNode }) => (\n <>{children}</>\n);\nconst DefaultError = ({ error, errorInfo, resetErrorBoundary }) => {\n useResetErrorBoundaryOnLocationChange(resetErrorBoundary);\n return (\n <div>\n <h1>Error</h1>\n <pre>\n {error.message}\n {errorInfo?.componentStack}\n </pre>\n </div>\n );\n};\n\nexport interface CoreAdminUIProps {\n /**\n * The content displayed when the user visits the /auth-callback page, used for redirection by third-party authentication providers\n *\n * @see https://marmelab.com/react-admin/Admin.html#authcallbackpage\n * @example\n * import { Admin } from 'react-admin';\n * import { dataProvider } from './dataProvider';\n * import { authProvider } from './authProvider';\n * import MyAuthCallbackPage from './MyAuthCallbackPage';\n *\n * const App = () => (\n * <Admin\n * authCallbackPage={MyAuthCallbackPage}\n * authProvider={authProvider}\n * dataProvider={dataProvider}\n * >\n * ...\n * </Admin>\n * );\n */\n authCallbackPage?: ComponentType | boolean;\n\n /**\n * A catch-all react component to display when the URL does not match any\n *\n * @see https://marmelab.com/react-admin/Admin.html#catchall\n * @example\n * // in src/NotFound.js\n * import Card from '@mui/material/Card';\n * import CardContent from '@mui/material/CardContent';\n * import { Title } from 'react-admin';\n *\n * export const NotFound = () => (\n * <Card>\n * <Title title=\"Not Found\" />\n * <CardContent>\n * <h1>404: Page not found</h1>\n * </CardContent>\n * </Card>\n * );\n *\n * // in src/App.js\n * import { Admin } from 'react-admin';\n * import { dataProvider } from './dataProvider';\n * import { NotFound } from './NotFound';\n *\n * const App = () => (\n * <Admin catchAll={NotFound} dataProvider={dataProvider}>\n * ...\n * </Admin>\n * );\n */\n catchAll?: CatchAllComponent;\n\n children?: AdminChildren;\n\n /**\n * The component to use for the dashboard page (displayed on the `/` route).\n *\n * @see https://marmelab.com/react-admin/Admin.html#dashboard\n * @example\n * import { Admin } from 'react-admin';\n * import Dashboard from './Dashboard';\n * import { dataProvider } from './dataProvider';\n *\n * const App = () => (\n * <Admin dashboard={Dashboard} dataProvider={dataProvider}>\n * ...\n * </Admin>\n * );\n */\n dashboard?: DashboardComponent;\n\n /**\n * Set to true to disable anonymous telemetry collection\n *\n * @see https://marmelab.com/react-admin/Admin.html#disabletelemetry\n * @example\n * import { Admin } from 'react-admin';\n * import { dataProvider } from './dataProvider';\n *\n * const App = () => (\n * <Admin disableTelemetry dataProvider={dataProvider}>\n * ...\n * </Admin>\n * );\n */\n disableTelemetry?: boolean;\n\n /**\n * The component displayed when an error is caught in a child component\n * @see https://marmelab.com/react-admin/Admin.html#error\n * @example\n * import { Admin } from 'react-admin';\n * import { MyError } from './error';\n *\n * const App = () => (\n * <Admin error={MyError}>\n * ...\n * </Admin>\n * );\n */\n error?: ({\n errorInfo,\n error,\n resetErrorBoundary,\n }: {\n errorInfo?: ErrorInfo;\n error: Error;\n resetErrorBoundary: (args) => void;\n }) => ReactElement;\n\n /**\n * The main app layout component\n *\n * @see https://marmelab.com/react-admin/Admin.html#layout\n * @example\n * import { Admin, Layout } from 'react-admin';\n *\n * const MyLayout = ({ children }) => (\n * <Layout appBarAlwaysOn>\n * {children}\n * </Layout>\n * );\n *\n * export const App = () => (\n * <Admin dataProvider={dataProvider} layout={MyLayout}>\n * ...\n * </Admin>\n * );\n */\n layout?: LayoutComponent;\n\n /**\n * The component displayed while fetching the auth provider if the admin child is an async function\n */\n loading?: LoadingComponent;\n\n /**\n * The component displayed when the user visits the /login page\n * @see https://marmelab.com/react-admin/Admin.html#loginpage\n * @example\n * import { Admin } from 'react-admin';\n * import { dataProvider } from './dataProvider';\n * import { authProvider } from './authProvider';\n * import MyLoginPage from './MyLoginPage';\n *\n * const App = () => (\n * <Admin\n * loginPage={MyLoginPage}\n * authProvider={authProvider}\n * dataProvider={dataProvider}\n * >\n * ...\n * </Admin>\n * );\n */\n loginPage?: LoginComponent | boolean;\n\n /**\n * Flag to require authentication for all routes. Defaults to false.\n *\n * @see https://marmelab.com/react-admin/Admin.html#requireauth\n * @example\n * import { Admin } from 'react-admin';\n * import { dataProvider } from './dataProvider';\n * import { authProvider } from './authProvider';\n *\n * const App = () => (\n * <Admin\n * requireAuth\n * authProvider={authProvider}\n * dataProvider={dataProvider}\n * >\n * ...\n * </Admin>\n * );\n */\n requireAuth?: boolean;\n\n /**\n * The page to display when the admin has no Resource children\n *\n * @see https://marmelab.com/react-admin/Admin.html#ready\n * @example\n * import { Admin } from 'react-admin';\n *\n * const Ready = () => (\n * <div>\n * <h1>Admin ready</h1>\n * <p>You can now add resources</p>\n * </div>\n * )\n *\n * const App = () => (\n * <Admin ready={Ready}>\n * ...\n * </Admin>\n * );\n */\n ready?: ComponentType;\n\n /**\n * The title of the error page\n * @see https://marmelab.com/react-admin/Admin.html#title\n * @example\n * import { Admin } from 'react-admin';\n * import { dataProvider } from './dataProvider';\n *\n * const App = () => (\n * <Admin title=\"My Admin\" dataProvider={dataProvider}>\n * ...\n * </Admin>\n * );\n */\n title?: TitleComponent;\n\n /**\n * The page to display when an authentication error occurs\n *\n * @see https://marmelab.com/react-admin/Admin.html#authenticationError\n * @example\n * import { Admin } from 'react-admin';\n *\n * const AuthenticationError = () => (\n * <div>\n * <h1>Authentication Error</h1>\n * <p>The authentication server returned an error and your credentials could not be checked.</p>\n * </div>\n * )\n *\n * const App = () => (\n * <Admin authenticationError={AuthenticationError}>\n * ...\n * </Admin>\n * );\n */\n authenticationError?: ComponentType;\n\n /**\n * A react component to display when users don't have access to the page they're trying to access\n *\n * @see https://marmelab.com/react-admin/Admin.html#accessDenied\n * @example\n * // in src/AccessDenied.js\n * import Card from '@mui/material/Card';\n * import CardContent from '@mui/material/CardContent';\n * import { Title } from 'react-admin';\n *\n * export const AccessDenied = () => (\n * <Card>\n * <Title title=\"AccessDenied\" />\n * <CardContent>\n * <h1>You're not authorized to see this page</h1>\n * </CardContent>\n * </Card>\n * );\n *\n * // in src/App.js\n * import { Admin } from 'react-admin';\n * import { dataProvider } from './dataProvider';\n * import { AccessDenied } from './AccessDenied';\n *\n * const App = () => (\n * <Admin accessDenied={AccessDenied} dataProvider={dataProvider}>\n * ...\n * </Admin>\n * );\n */\n accessDenied?: React.ComponentType;\n}\n\nexport const CoreAdminUI = (props: CoreAdminUIProps) => {\n const [errorInfo, setErrorInfo] = useState<ErrorInfo>({});\n const {\n authCallbackPage: LoginCallbackPage = false,\n catchAll = Noop,\n children,\n dashboard,\n disableTelemetry = false,\n error: ErrorComponent = DefaultError,\n layout = DefaultLayout,\n loading = Noop,\n loginPage: LoginPage = false,\n ready = Ready,\n requireAuth = false,\n title = 'React Admin',\n authenticationError = Noop,\n accessDenied = Noop,\n } = props;\n\n useEffect(() => {\n if (\n disableTelemetry ||\n process.env.NODE_ENV !== 'production' ||\n typeof window === 'undefined' ||\n typeof window.location === 'undefined' ||\n typeof Image === 'undefined'\n ) {\n return;\n }\n const img = new Image();\n img.src = `https://react-admin-telemetry.marmelab.com/react-admin-telemetry?domain=${window.location.hostname}`;\n }, [disableTelemetry]);\n\n const handleError = (error: Error, info: ErrorInfo) => setErrorInfo(info);\n\n return (\n <DefaultTitleContextProvider value={title}>\n <ErrorBoundary\n onError={handleError}\n fallbackRender={({ error, resetErrorBoundary }) => (\n <div style={{ minHeight: '100vh' }}>\n <ErrorComponent\n error={error}\n errorInfo={errorInfo}\n resetErrorBoundary={resetErrorBoundary}\n />\n </div>\n )}\n >\n <Routes>\n {LoginPage !== false && LoginPage !== true ? (\n <Route\n path=\"/login\"\n element={createOrGetElement(LoginPage)}\n />\n ) : null}\n\n {LoginCallbackPage !== false &&\n LoginCallbackPage !== true ? (\n <Route\n path=\"/auth-callback\"\n element={createOrGetElement(LoginCallbackPage)}\n />\n ) : null}\n\n <Route\n path=\"/*\"\n element={\n <CoreAdminRoutes\n catchAll={catchAll}\n dashboard={dashboard}\n layout={layout}\n loading={loading}\n requireAuth={requireAuth}\n ready={ready}\n authenticationError={authenticationError}\n accessDenied={accessDenied}\n >\n {children}\n </CoreAdminRoutes>\n }\n />\n </Routes>\n </ErrorBoundary>\n </DefaultTitleContextProvider>\n );\n};\n\nconst createOrGetElement = el => (isValidElement(el) ? el : createElement(el));\n\nconst Noop = () => null;\n", "'use client';\nimport { createContext, Component, createElement, useContext, useState, useMemo, forwardRef } from 'react';\n\nconst ErrorBoundaryContext = createContext(null);\n\nconst initialState = {\n didCatch: false,\n error: null\n};\nclass ErrorBoundary extends Component {\n constructor(props) {\n super(props);\n this.resetErrorBoundary = this.resetErrorBoundary.bind(this);\n this.state = initialState;\n }\n static getDerivedStateFromError(error) {\n return {\n didCatch: true,\n error\n };\n }\n resetErrorBoundary() {\n const {\n error\n } = this.state;\n if (error !== null) {\n var _this$props$onReset, _this$props;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n (_this$props$onReset = (_this$props = this.props).onReset) === null || _this$props$onReset === void 0 ? void 0 : _this$props$onReset.call(_this$props, {\n args,\n reason: \"imperative-api\"\n });\n this.setState(initialState);\n }\n }\n componentDidCatch(error, info) {\n var _this$props$onError, _this$props2;\n (_this$props$onError = (_this$props2 = this.props).onError) === null || _this$props$onError === void 0 ? void 0 : _this$props$onError.call(_this$props2, error, info);\n }\n componentDidUpdate(prevProps, prevState) {\n const {\n didCatch\n } = this.state;\n const {\n resetKeys\n } = this.props;\n\n // There's an edge case where if the thing that triggered the error happens to *also* be in the resetKeys array,\n // we'd end up resetting the error boundary immediately.\n // This would likely trigger a second error to be thrown.\n // So we make sure that we don't check the resetKeys on the first call of cDU after the error is set.\n\n if (didCatch && prevState.error !== null && hasArrayChanged(prevProps.resetKeys, resetKeys)) {\n var _this$props$onReset2, _this$props3;\n (_this$props$onReset2 = (_this$props3 = this.props).onReset) === null || _this$props$onReset2 === void 0 ? void 0 : _this$props$onReset2.call(_this$props3, {\n next: resetKeys,\n prev: prevProps.resetKeys,\n reason: \"keys\"\n });\n this.setState(initialState);\n }\n }\n render() {\n const {\n children,\n fallbackRender,\n FallbackComponent,\n fallback\n } = this.props;\n const {\n didCatch,\n error\n } = this.state;\n let childToRender = children;\n if (didCatch) {\n const props = {\n error,\n resetErrorBoundary: this.resetErrorBoundary\n };\n if (typeof fallbackRender === \"function\") {\n childToRender = fallbackRender(props);\n } else if (FallbackComponent) {\n childToRender = createElement(FallbackComponent, props);\n } else if (fallback !== undefined) {\n childToRender = fallback;\n } else {\n {\n console.error(\"react-error-boundary requires either a fallback, fallbackRender, or FallbackComponent prop\");\n }\n throw error;\n }\n }\n return createElement(ErrorBoundaryContext.Provider, {\n value: {\n didCatch,\n error,\n resetErrorBoundary: this.resetErrorBoundary\n }\n }, childToRender);\n }\n}\nfunction hasArrayChanged() {\n let a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let b = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n return a.length !== b.length || a.some((item, index) => !Object.is(item, b[index]));\n}\n\nfunction assertErrorBoundaryContext(value) {\n if (value == null || typeof value.didCatch !== \"boolean\" || typeof value.resetErrorBoundary !== \"function\") {\n throw new Error(\"ErrorBoundaryContext not found\");\n }\n}\n\nfunction useErrorBoundary() {\n const context = useContext(ErrorBoundaryContext);\n assertErrorBoundaryContext(context);\n const [state, setState] = useState({\n error: null,\n hasError: false\n });\n const memoized = useMemo(() => ({\n resetBoundary: () => {\n context.resetErrorBoundary();\n setState({\n error: null,\n hasError: false\n });\n },\n showBoundary: error => setState({\n error,\n hasError: true\n })\n }), [context.resetErrorBoundary]);\n if (state.hasError) {\n throw state.error;\n }\n return memoized;\n}\n\nfunction withErrorBoundary(component, errorBoundaryProps) {\n const Wrapped = forwardRef((props, ref) => createElement(ErrorBoundary, errorBoundaryProps, createElement(component, {\n ...props,\n ref\n })));\n\n // Format for display in DevTools\n const name = component.displayName || component.name || \"Unknown\";\n Wrapped.displayName = \"withErrorBoundary(\".concat(name, \")\");\n return Wrapped;\n}\n\nexport { ErrorBoundary, ErrorBoundaryContext, useErrorBoundary, withErrorBoundary };\n", "import * as React from 'react';\nimport { Children, ComponentType } from 'react';\nimport { Route, Routes } from 'react-router-dom';\nimport { WithPermissions, LogoutOnMount, useAuthState } from '../auth';\nimport { useScrollToTop } from '../routing';\nimport {\n AdminChildren,\n CatchAllComponent,\n DashboardComponent,\n LayoutComponent,\n LoadingComponent,\n} from '../types';\nimport { useConfigureAdminRouterFromChildren } from './useConfigureAdminRouterFromChildren';\nimport { HasDashboardContextProvider } from './HasDashboardContext';\nimport { NavigateToFirstResource } from './NavigateToFirstResource';\n\nexport const CoreAdminRoutes = (props: CoreAdminRoutesProps) => {\n useScrollToTop();\n\n const {\n customRoutesWithLayout,\n customRoutesWithoutLayout,\n status,\n resources,\n } = useConfigureAdminRouterFromChildren(props.children);\n\n const {\n layout: Layout,\n catchAll: CatchAll,\n dashboard,\n loading: LoadingPage,\n requireAuth,\n ready: Ready,\n authenticationError: AuthenticationError = Noop,\n accessDenied: AccessDenied = Noop,\n } = props;\n\n const { authenticated, isPending: isPendingAuthenticated } = useAuthState(\n undefined,\n // do not log the user out on failure to allow access to custom routes with no layout\n false,\n { enabled: requireAuth }\n );\n\n if (status === 'empty') {\n if (!Ready) {\n throw new Error(\n 'The admin is empty. Please provide an empty component, or pass Resource or CustomRoutes as children.'\n );\n }\n return <Ready />;\n }\n\n // Note: custom routes with no layout are always rendered, regardless of the auth status\n\n if (status === 'loading' || (requireAuth && isPendingAuthenticated)) {\n return (\n <Routes>\n {customRoutesWithoutLayout}\n <Route\n path=\"*\"\n element={\n <div style={{ height: '100vh' }}>\n <LoadingPage />\n </div>\n }\n />\n </Routes>\n );\n }\n\n if (requireAuth && (isPendingAuthenticated || !authenticated)) {\n return (\n <Routes>\n {customRoutesWithoutLayout}\n <Route path=\"*\" element={<LogoutOnMount />} />\n </Routes>\n );\n }\n\n return (\n <Routes>\n {/*\n Render the custom routes that were outside the child function.\n */}\n {customRoutesWithoutLayout}\n <Route\n path=\"/*\"\n element={\n <HasDashboardContextProvider value={!!dashboard}>\n <Layout>\n <Routes>\n {customRoutesWithLayout}\n {Children.map(resources, resource => (\n <Route\n key={resource.props.name}\n path={`${resource.props.name}/*`}\n element={resource}\n />\n ))}\n <Route\n path=\"/\"\n element={\n dashboard ? (\n <WithPermissions\n authParams={defaultAuthParams}\n component={dashboard}\n loading={LoadingPage}\n />\n ) : (\n <NavigateToFirstResource\n loading={LoadingPage}\n />\n )\n }\n />\n <Route\n path=\"/authentication-error\"\n element={<AuthenticationError />}\n />\n <Route\n path=\"/access-denied\"\n element={<AccessDenied />}\n />\n <Route path=\"*\" element={<CatchAll />} />\n </Routes>\n </Layout>\n </HasDashboardContextProvider>\n }\n />\n </Routes>\n );\n};\n\nexport interface CoreAdminRoutesProps {\n dashboard?: DashboardComponent;\n layout: LayoutComponent;\n catchAll: CatchAllComponent;\n children?: AdminChildren;\n loading: LoadingComponent;\n requireAuth?: boolean;\n ready?: ComponentType;\n authenticationError?: ComponentType;\n accessDenied?: React.ComponentType;\n}\n\n// FIXME in v6: make dashboard anonymous by default to remove this hack\nconst defaultAuthParams = { params: { route: 'dashboard' } };\nconst Noop = () => null;\n", "import * as React from 'react';\nimport {\n Children,\n Dispatch,\n Fragment,\n ReactElement,\n ReactNode,\n SetStateAction,\n useCallback,\n useEffect,\n useState,\n} from 'react';\nimport useLogout from '../auth/useLogout';\nimport usePermissions from '../auth/usePermissions';\nimport {\n AdminChildren,\n RenderResourcesFunction,\n ResourceDefinition,\n ResourceProps,\n} from '../types';\nimport { CustomRoutesProps } from './CustomRoutes';\nimport { useResourceDefinitionContext } from './useResourceDefinitionContext';\n\n/**\n * This hook inspects the CoreAdminRouter children and returns them separated in three groups:\n * - Custom routes without layout\n * - Custom routes with layout\n * - Resources\n *\n * It also returns a status:\n * - loading: still loading children from a function child\n * - empty: no resources were provided among children\n * - ready: admin is ready to be rendered\n *\n * @example\n * const {\n * customRoutesWithLayout,\n * customRoutesWithoutLayout,\n * resources,\n * status,\n * } = useConfigureAdminRouterFromChildren(children);\n */\nexport const useConfigureAdminRouterFromChildren = (\n children: AdminChildren\n): RoutesAndResources & { status: AdminRouterStatus } => {\n const { permissions, isPending } = usePermissions();\n\n // Whenever children are updated, update our custom routes and resources\n const [routesAndResources, status] = useRoutesAndResourcesFromChildren(\n children,\n permissions,\n isPending\n );\n\n // Whenever the resources change, we must ensure they're all registered\n useRegisterResources(routesAndResources.resources, permissions);\n\n return {\n customRoutesWithLayout: routesAndResources.customRoutesWithLayout,\n customRoutesWithoutLayout: routesAndResources.customRoutesWithoutLayout,\n status,\n resources: routesAndResources.resources,\n };\n};\n\n/**\n * A hook that determine the routes and resources from React nodes and permissions.\n * Returns a tuple with the routes and resources as a single object, and the status.\n * @param children React nodes to inspect\n * @param permissions The permissions\n */\nconst useRoutesAndResourcesFromChildren = (\n children: AdminChildren,\n permissions: any,\n isLoading: boolean\n): [RoutesAndResources, AdminRouterStatus] => {\n // Gather custom routes and resources that were declared as direct children of CoreAdminRouter\n // e.g. Not returned from the child function (if any)\n // We need to know right away whether some resources were declared to correctly\n // initialize the status at the next stop\n const doLogout = useLogout();\n const [routesAndResources, setRoutesAndResources, mergeRoutesAndResources] =\n useRoutesAndResourcesState(getRoutesAndResourceFromNodes(children));\n\n const [status, setStatus] = useState<AdminRouterStatus>(() =>\n getStatus({\n children,\n ...routesAndResources,\n })\n );\n if (!status) {\n throw new Error('Status should be defined');\n }\n\n useEffect(() => {\n const resolveChildFunction = async (\n childFunc: RenderResourcesFunction\n ) => {\n try {\n const childrenFuncResult = childFunc(permissions);\n if ((childrenFuncResult as Promise<ReactNode>)?.then) {\n (childrenFuncResult as Promise<ReactNode>).then(\n resolvedChildren => {\n mergeRoutesAndResources(\n getRoutesAndResourceFromNodes(resolvedChildren)\n );\n setStatus('ready');\n }\n );\n } else {\n mergeRoutesAndResources(\n getRoutesAndResourceFromNodes(\n childrenFuncResult as ReactNode\n )\n );\n setStatus('ready');\n }\n } catch (error) {\n console.error(error);\n doLogout();\n }\n };\n\n const updateFromChildren = async () => {\n const functionChild = getSingleChildFunction(children);\n const newRoutesAndResources =\n getRoutesAndResourceFromNodes(children);\n setRoutesAndResources(newRoutesAndResources);\n setStatus(\n !!functionChild\n ? 'loading'\n : newRoutesAndResources.resources.length > 0 ||\n newRoutesAndResources.customRoutesWithLayout.length >\n 0 ||\n newRoutesAndResources.customRoutesWithoutLayout.length >\n 0\n ? 'ready'\n : 'empty'\n );\n\n if (functionChild) {\n resolveChildFunction(functionChild);\n }\n };\n if (!isLoading) {\n updateFromChildren();\n }\n }, [\n children,\n doLogout,\n isLoading,\n mergeRoutesAndResources,\n permissions,\n setRoutesAndResources,\n setStatus,\n ]);\n\n return [routesAndResources, status];\n};\n\n/*\n * A hook that store the routes and resources just like setState but also provides an additional function\n * to merge new routes and resources with the existing ones.\n */\nconst useRoutesAndResourcesState = (\n initialState: RoutesAndResources\n): [\n RoutesAndResources,\n Dispatch<SetStateAction<RoutesAndResources>>,\n (newRoutesAndResources: RoutesAndResources) => void,\n] => {\n const [routesAndResources, setRoutesAndResources] = useState(initialState);\n\n const mergeRoutesAndResources = useCallback(\n (newRoutesAndResources: RoutesAndResources) => {\n setRoutesAndResources(previous => ({\n customRoutesWithLayout: previous.customRoutesWithLayout.concat(\n newRoutesAndResources.customRoutesWithLayout\n ),\n customRoutesWithoutLayout:\n previous.customRoutesWithoutLayout.concat(\n newRoutesAndResources.customRoutesWithoutLayout\n ),\n resources: previous.resources.concat(\n newRoutesAndResources.resources\n ),\n }));\n },\n []\n );\n\n return [routesAndResources, setRoutesAndResources, mergeRoutesAndResources];\n};\n\n/**\n * A hook that register resources and unregister them when the calling component is unmounted.\n * @param resources: An array of Resource elements\n * @param permissions: The permissions\n */\nconst useRegisterResources = (\n resources: (ReactElement & ResourceWithRegisterFunction)[],\n permissions: any\n) => {\n const { register, unregister } = useResourceDefinitionContext();\n\n useEffect(() => {\n resources.forEach(resource => {\n if (\n typeof (\n resource.type as unknown as ResourceWithRegisterFunction\n ).registerResource === 'function'\n ) {\n const definition = (\n resource.type as unknown as ResourceWithRegisterFunction\n ).registerResource(resource.props, permissions);\n register(definition);\n } else {\n throw new Error(\n 'When using a custom Resource element, it must have a static registerResource method accepting its props and returning a ResourceDefinition'\n );\n }\n });\n return () => {\n resources.forEach(resource => {\n if (\n typeof (\n resource.type as unknown as ResourceWithRegisterFunction\n ).registerResource === 'function'\n ) {\n const definition = (\n resource.type as unknown as ResourceWithRegisterFunction\n ).registerResource(resource.props, permissions);\n unregister(definition);\n } else {\n throw new Error(\n 'When using a custom Resource element, it must have a static registerResource method accepting its props and returning a ResourceDefinition'\n );\n }\n });\n };\n }, [permissions, register, resources, unregister]);\n};\n\nconst getStatus = ({\n children,\n resources,\n customRoutesWithLayout,\n customRoutesWithoutLayout,\n}: {\n children: AdminChildren;\n resources: ReactNode[];\n customRoutesWithLayout: ReactNode[];\n customRoutesWithoutLayout: ReactNode[];\n}): AdminRouterStatus => {\n return getSingleChildFunction(children)\n ? 'loading'\n : resources.length > 0 ||\n customRoutesWithLayout.length > 0 ||\n customRoutesWithoutLayout.length > 0\n ? 'ready'\n : 'empty';\n};\n\n/**\n * Inspect the children of a CoreAdminRouter to see if one of them is a function.\n * Throws an error if there are more than one function child.\n * Returns the function child if one was provided, or null otherwise.\n */\nconst getSingleChildFunction = (\n children: AdminChildren\n): RenderResourcesFunction | null => {\n const childrenArray = Array.isArray(children) ? children : [children];\n\n const functionChildren = childrenArray.filter(\n child => typeof child === 'function'\n );\n\n if (functionChildren.length > 1) {\n throw new Error(\n 'You can only provide one function child to AdminRouter'\n );\n }\n\n if (functionChildren.length === 0) {\n return null;\n }\n\n return functionChildren[0] as RenderResourcesFunction;\n};\n\n/**\n * Inspect the children and return an object with the following keys:\n * - customRoutesWithLayout: an array of the custom routes to render inside the layout\n * - customRoutesWithoutLayout: an array of custom routes to render outside the layout\n * - resources: an array of resources elements\n */\nconst getRoutesAndResourceFromNodes = (\n children: AdminChildren\n): RoutesAndResources => {\n const customRoutesWithLayout: ReactNode[] = [];\n const customRoutesWithoutLayout: ReactNode[] = [];\n const resources: (ReactElement & ResourceWithRegisterFunction)[] = [];\n\n if (typeof children === 'function') {\n return {\n customRoutesWithLayout: [],\n customRoutesWithoutLayout: [],\n resources: [],\n };\n }\n // @ts-ignore\n Children.forEach(children, element => {\n if (!React.isValidElement(element)) {\n // Ignore non-elements. This allows people to more easily inline\n // conditionals in their route config.\n return;\n }\n if (element.type === Fragment) {\n const customRoutesFromFragment = getRoutesAndResourceFromNodes(\n element.props.children\n );\n customRoutesWithLayout.push(\n ...customRoutesFromFragment.customRoutesWithLayout\n );\n customRoutesWithoutLayout.push(\n ...customRoutesFromFragment.customRoutesWithoutLayout\n );\n resources.push(...customRoutesFromFragment.resources);\n }\n\n if ((element.type as any).raName === 'CustomRoutes') {\n const customRoutesElement =\n element as ReactElement<CustomRoutesProps>;\n\n if (customRoutesElement.props.noLayout) {\n customRoutesWithoutLayout.push(\n customRoutesElement.props.children\n );\n } else {\n customRoutesWithLayout.push(customRoutesElement.props.children);\n }\n } else if ((element.type as any).raName === 'Resource') {\n resources.push(\n element as ReactElement & ResourceWithRegisterFunction\n );\n }\n });\n\n return {\n customRoutesWithLayout,\n customRoutesWithoutLayout,\n resources,\n };\n};\n\ntype RoutesAndResources = {\n customRoutesWithLayout: ReactNode[];\n customRoutesWithoutLayout: ReactNode[];\n resources: (ReactElement & ResourceWithRegisterFunction)[];\n};\n\ntype ResourceWithRegisterFunction = {\n registerResource: (\n props: ResourceProps,\n permissions: any\n ) => ResourceDefinition;\n};\n\ntype AdminRouterStatus = 'loading' | 'empty' | 'ready';\n", "import { useEffect, useMemo } from 'react';\nimport {\n QueryObserverResult,\n useQuery,\n UseQueryOptions,\n} from '@tanstack/react-query';\nimport useAuthProvider from './useAuthProvider';\nimport useLogoutIfAccessDenied from './useLogoutIfAccessDenied';\nimport { useEvent } from '../util';\n\nconst emptyParams = {};\n\n/**\n * Hook for getting user permissions\n *\n * Calls the authProvider.getPermissions() method using react-query.\n * If the authProvider returns a rejected promise, returns empty permissions.\n *\n * The return value updates according to the request state:\n *\n * - start: { isPending: true }\n * - success: { permissions: [any], isPending: false }\n * - error: { error: [error from provider], isPending: false }\n *\n * Useful to enable features based on user permissions\n *\n * @param {Object} params Any params you want to pass to the authProvider\n *\n * @returns The current auth check state. Destructure as { permissions, error, isPending, refetch }.\n *\n * @example\n * import { usePermissions } from 'react-admin';\n *\n * const PostDetail = () => {\n * const { isPending, permissions } = usePermissions();\n * if (!isPending && permissions == 'editor') {\n * return <PostEdit />\n * } else {\n * return <PostShow />\n * }\n * };\n */\nconst usePermissions = <PermissionsType = any, ErrorType = Error>(\n params = emptyParams,\n queryParams: UsePermissionsOptions<PermissionsType, ErrorType> = {\n staleTime: 5 * 60 * 1000,\n }\n): UsePermissionsResult<PermissionsType, ErrorType> => {\n const authProvider = useAuthProvider();\n const logoutIfAccessDenied = useLogoutIfAccessDenied();\n const { onSuccess, onError, onSettled, ...queryOptions } =\n queryParams ?? {};\n\n const queryResult = useQuery<PermissionsType, ErrorType>({\n queryKey: ['auth', 'getPermissions', params],\n queryFn: async ({ signal }) => {\n if (!authProvider || !authProvider.getPermissions) {\n return [];\n }\n const permissions = await authProvider.getPermissions({\n ...params,\n signal,\n });\n return permissions ?? null;\n },\n ...queryOptions,\n });\n\n const onSuccessEvent = useEvent(onSuccess ?? noop);\n const onSettledEvent = useEvent(onSettled ?? noop);\n const onErrorEvent = useEvent(\n onError ??\n ((error: ErrorType) => {\n if (process.env.NODE_ENV === 'development') {\n console.error(error);\n }\n logoutIfAccessDenied(error);\n })\n );\n\n useEffect(() => {\n if (queryResult.data === undefined || queryResult.isFetching) return;\n onSuccessEvent(queryResult.data);\n }, [onSuccessEvent, queryResult.data, queryResult.isFetching]);\n\n useEffect(() => {\n if (queryResult.error == null || queryResult.isFetching) return;\n onErrorEvent(queryResult.error);\n }, [onErrorEvent, queryResult.error, queryResult.isFetching]);\n\n useEffect(() => {\n if (queryResult.status === 'pending' || queryResult.isFetching) return;\n onSettledEvent(queryResult.data, queryResult.error);\n }, [\n onSettledEvent,\n queryResult.data,\n queryResult.error,\n queryResult.status,\n queryResult.isFetching,\n ]);\n\n const result = useMemo(\n () => ({\n ...queryResult,\n permissions: queryResult.data,\n }),\n [queryResult]\n );\n\n return !authProvider || !authProvider.getPermissions\n ? (fakeQueryResult as UsePermissionsResult<PermissionsType, ErrorType>)\n : result;\n};\n\nexport default usePermissions;\n\nexport interface UsePermissionsOptions<PermissionsType = any, ErrorType = Error>\n extends Omit<\n UseQueryOptions<PermissionsType, ErrorType>,\n 'queryKey' | 'queryFn'\n > {\n onSuccess?: (data: PermissionsType) => void;\n onError?: (err: ErrorType) => void;\n onSettled?: (data?: PermissionsType, error?: ErrorType | null) => void;\n}\n\nexport type UsePermissionsResult<\n PermissionsType = any,\n ErrorType = Error,\n> = QueryObserverResult<PermissionsType, ErrorType> & {\n permissions: PermissionsType | undefined;\n};\n\nconst noop = () => {};\n\nconst fakeQueryResult = {\n permissions: undefined,\n data: undefined,\n dataUpdatedAt: 0,\n error: null,\n errorUpdatedAt: 0,\n errorUpdateCount: 0,\n failureCount: 0,\n failureReason: null,\n fetchStatus: 'idle',\n isError: false,\n isInitialLoading: false,\n isLoading: false,\n isLoadingError: false,\n isFetched: true,\n isFetchedAfterMount: true,\n isFetching: false,\n isPaused: false,\n isPlaceholderData: false,\n isPending: false,\n isRefetchError: false,\n isRefetching: false,\n isStale: false,\n isSuccess: true,\n status: 'success',\n refetch: () => Promise.resolve(fakeQueryResult),\n};\n", "import { createContext, useContext } from 'react';\n\nexport const HasDashboardContext = createContext<boolean>(false);\n\nexport const HasDashboardContextProvider = HasDashboardContext.Provider;\n\n/**\n * Returns true if the app has a dashboard defined at the <Admin> level.\n *\n * @private\n * @example\n * import { useHasDashboard } from 'react-admin';\n *\n * const MyMenu = () => {\n * const hasDashboard = useHasDashboard();\n * return (\n * <Menu>\n * {hasDashboard && <DashboardMenuItem />}\n * <MenuItemLink to=\"/posts\" />\n * <MenuItemLink to=\"/comments\" />\n * </Menu>\n * );\n * }\n */\nexport const useHasDashboard = () => useContext(HasDashboardContext);\n", "import * as React from 'react';\nimport { Navigate } from 'react-router';\nimport { useFirstResourceWithListAccess } from './useFirstResourceWithListAccess';\nimport { useCreatePath } from '../routing';\n\n/**\n * This component will inspect the registered resources and navigate to the first one for which users have access to the list page.\n * @param props\n * @param props.loading The component to display while the component is loading.\n */\nexport const NavigateToFirstResource = ({\n loading: LoadingPage,\n}: NavigateToFirstResourceProps) => {\n const { resource, isPending } = useFirstResourceWithListAccess();\n const createPath = useCreatePath();\n\n if (isPending) {\n return <LoadingPage />;\n }\n\n if (resource) {\n return (\n <Navigate\n to={createPath({\n resource,\n type: 'list',\n })}\n replace={true}\n />\n );\n }\n};\n\nexport type NavigateToFirstResourceProps = {\n loading: React.ComponentType;\n};\n", "import { useMemo } from 'react';\nimport { useQuery, UseQueryOptions } from '@tanstack/react-query';\nimport useAuthProvider from './useAuthProvider';\nimport { HintedString } from '../types';\nimport { useRecordContext } from '../controller';\n\n/**\n * Checks whether users can access the provided resources.\n *\n * `useCanAccessResources` returns an object describing the state of the request:\n *\n * - start: { isPending: true }\n * - success: { canAccess: Object<string, boolean>, isPending: false }\n * - error: { error: [error from provider], isPending: false }\n *\n * @param {Object} params Any params you want to pass to the authProvider\n * @param {string} params.action The action to check access for\n * @param {string[]} params.resources The list of resources to check access for\n * @param {Object} params.record Optional. The record to check access for\n *\n * @returns Return the react-query result and a canAccess property which is a map of the resources and their access status { [resource: string]: boolean }\n *\n * @example\n * import { useCanAccessResources } from 'react-admin';\n *\n * const UserList = ({ record }) => {\n * const { isPending, canAccess } = useCanAccessResources({\n * action: 'read',\n * resources: ['users.id', 'users.name', 'users.email'],\n * record\n * });\n *\n * if (isPending) {\n * return null;\n * }\n * return (\n * <SimpleList\n * primaryText={record => canAccess.users.name ? record.name : ''}\n * secondaryText={record => canAccess.users.email ? record.email : ''}\n * tertiaryText={record => canAccess.users.id ? record.id : ''}\n * />\n * );\n * };\n */\nexport const useCanAccessResources = <\n RecordType extends Record<string, any> = Record<string, any>,\n ErrorType extends Error = Error,\n>(\n params: UseCanAccessResourcesOptions<RecordType>\n): UseCanAccessResourcesResult<ErrorType> => {\n const authProvider = useAuthProvider();\n const record = useRecordContext<RecordType>(params);\n\n const { action, resources, ...options } = params;\n\n const queryResult = useQuery({\n queryKey: ['auth', 'canAccess', resources, action, record],\n queryFn: async ({ signal }) => {\n const queries = await Promise.all(\n resources.map(async resource => {\n if (!authProvider || !authProvider.canAccess) {\n return { canAccess: true, resource };\n }\n const canAccess = await authProvider.canAccess({\n resource,\n action,\n record,\n signal: authProvider.supportAbortSignal\n ? signal\n : undefined,\n });\n\n return { canAccess, resource };\n })\n );\n\n const result = queries.reduce(\n (acc, { resource, canAccess }) => {\n acc[resource] = canAccess;\n return acc;\n },\n {} as Record<string, boolean>\n );\n\n return result;\n },\n ...options,\n });\n\n const result = useMemo(() => {\n return {\n canAccess: queryResult.data,\n ...queryResult,\n } as UseCanAccessResourcesResult<ErrorType>;\n }, [queryResult]);\n\n const resultWithoutAuthProvider = useMemo(() => {\n return {\n canAccess: resources.reduce(\n (acc, resource) => {\n acc[resource] = true;\n return acc;\n },\n {} as Record<string, boolean>\n ),\n isPending: false,\n isError: false,\n error: null,\n } as UseCanAccessResourcesResult<ErrorType>;\n }, [resources]);\n\n return !authProvider || !authProvider.canAccess\n ? resultWithoutAuthProvider\n : result;\n};\n\nexport interface UseCanAccessResourcesOptions<\n RecordType extends Record<string, any> = Record<string, any>,\n ErrorType extends Error = Error,\n> extends Omit<\n UseQueryOptions<Record<string, boolean>, ErrorType>,\n 'queryKey' | 'queryFn'\n > {\n resources: string[];\n action: HintedString<'list' | 'create' | 'edit' | 'show' | 'delete'>;\n record?: RecordType;\n}\n\nexport type UseCanAccessResourcesResult<ErrorType = Error> =\n | UseCanAccessResourcesLoadingResult\n | UseCanAccessResourcesLoadingErrorResult<ErrorType>\n | UseCanAccessResourcesRefetchErrorResult<ErrorType>\n | UseCanAccessResourcesSuccessResult;\n\nexport interface UseCanAccessResourcesLoadingResult {\n canAccess: undefined;\n error: null;\n isPending: true;\n}\nexport interface UseCanAccessResourcesLoadingErrorResult<ErrorType = Error> {\n canAccess: undefined;\n error: ErrorType;\n isPending: false;\n}\nexport interface UseCanAccessResourcesRefetchErrorResult<ErrorType = Error> {\n canAccess: Record<string, boolean>;\n error: ErrorType;\n isPending: false;\n}\nexport interface UseCanAccessResourcesSuccessResult {\n canAccess: Record<string, boolean>;\n error: null;\n isPending: false;\n}\n", "import { useCanAccessResources } from '../auth/useCanAccessResources';\nimport { useAuthenticated } from '../auth';\nimport { useResourceDefinitions } from './useResourceDefinitions';\n\n/**\n * A hook that returns the first resource for which users have access to the list page.\n * It calls the `authProvider.canAccess` if available to check the permissions.\n */\nexport const useFirstResourceWithListAccess = () => {\n const { isPending: isPendingAuthenticated } = useAuthenticated();\n const resources = useResourceDefinitions();\n const resourcesNames = Object.keys(resources).filter(\n resource => resources[resource].hasList\n );\n\n const { canAccess, isPending } = useCanAccessResources({\n action: 'list',\n resources: resourcesNames,\n enabled: !isPendingAuthenticated,\n });\n\n const firstResourceWithListAccess = resourcesNames.find(\n resource => canAccess && canAccess[resource] === true\n );\n\n return { resource: firstResourceWithListAccess, isPending };\n};\n", "import { createContext, useContext } from 'react';\nimport type { TitleComponent } from '../types';\n\nexport const DefaultTitleContext = createContext<TitleComponent>('React Admin');\n\nexport const DefaultTitleContextProvider = DefaultTitleContext.Provider;\n\n/**\n * Get the application title defined at the `<Admin>` level\n *\n * @example\n * import { useDefaultTitle } from 'react-admin';\n *\n * const AppBar = () => {\n * const defaultTitle = useDefaultTitle();\n * return <span>{defaultTitle}</span>;\n * }\n */\nexport const useDefaultTitle = () => useContext(DefaultTitleContext);\n", "import { ReactNode } from 'react';\n\n/**\n * This component allows you to provide custom routes to the Admin.\n * @param props The component props\n * @param props.children The custom routes.\n * @param props.noLayout A boolean indicating whether to render the routes outside the Layout. Defaults to false.\n * @returns Nothing. This is a configuration component.\n */\nexport const CustomRoutes = (_props: CustomRoutesProps) => {\n return null;\n};\n\nCustomRoutes.raName = 'CustomRoutes';\n\nexport type CustomRoutesProps = {\n children: ReactNode;\n noLayout?: boolean;\n};\n", "import * as React from 'react';\nimport { ReactElement } from 'react';\nimport { ResourceContextValue } from './ResourceContext';\nimport { ResourceContextProvider } from './ResourceContextProvider';\n\n/**\n * Wrap children with a ResourceContext provider only if the value is defined.\n *\n * Allows a component to work outside of a resource context.\n *\n * @example\n *\n * import { OptionalResourceContextProvider, EditButton } from 'react-admin';\n *\n * const Button = ({ resource }) => (\n * <OptionalResourceContextProvider value={resource}>\n * <EditButton />\n * </OptionalResourceContextProvider>\n * );\n */\nexport const OptionalResourceContextProvider = ({\n value,\n children,\n}: {\n value?: ResourceContextValue;\n children: ReactElement;\n}) =>\n value ? (\n <ResourceContextProvider value={value}>\n {children}\n </ResourceContextProvider>\n ) : (\n children\n );\n", "import * as React from 'react';\nimport { ReactNode } from 'react';\nimport { ResourceContext, ResourceContextValue } from './ResourceContext';\n\n/**\n * Create a Resource Context with the resource name\n *\n * Some react-admin components rely on the resource name to be available in the context.\n * This component provides it.\n *\n * If the value is empty, the context is not provided.\n *\n * @param {string} value the resource name\n * @example\n *\n * import { ResourceContextProvider } from 'react-admin';\n *\n * const MyComponent = () => (\n * <ResourceContextProvider value=\"posts\">\n * <MyResourceSpecificComponent />\n * </ResourceContextProvider>\n * );\n */\nexport const ResourceContextProvider = ({\n children,\n value,\n}: {\n children: ReactNode;\n value?: ResourceContextValue;\n}) =>\n value ? (\n <ResourceContext.Provider value={value}>\n {children}\n </ResourceContext.Provider>\n ) : (\n children\n );\n", "import * as React from 'react';\nimport { ComponentType, ReactElement, isValidElement } from 'react';\nimport { Route, Routes } from 'react-router-dom';\nimport { isValidElementType } from 'react-is';\n\nimport { ResourceProps } from '../types';\nimport { ResourceContextProvider } from './ResourceContextProvider';\nimport { RestoreScrollPosition } from '../routing/RestoreScrollPosition';\n\nexport const Resource = (props: ResourceProps) => {\n const { create, edit, list, name, show } = props;\n\n return (\n <ResourceContextProvider value={name}>\n <Routes>\n {create && (\n <Route path=\"create/*\" element={getElement(create)} />\n )}\n {show && <Route path=\":id/show/*\" element={getElement(show)} />}\n {edit && <Route path=\":id/*\" element={getElement(edit)} />}\n {list && (\n <Route\n path=\"/*\"\n element={\n <RestoreScrollPosition\n storeKey={`${name}.list.scrollPosition`}\n >\n {getElement(list)}\n </RestoreScrollPosition>\n }\n />\n )}\n {props.children}\n </Routes>\n </ResourceContextProvider>\n );\n};\n\nconst getElement = (ElementOrComponent: ComponentType<any> | ReactElement) => {\n if (isValidElement(ElementOrComponent)) {\n return ElementOrComponent;\n }\n\n if (isValidElementType(ElementOrComponent)) {\n const Element = ElementOrComponent as ComponentType<any>;\n return <Element />;\n }\n\n return null;\n};\n\nResource.raName = 'Resource';\n\nResource.registerResource = ({\n create,\n edit,\n icon,\n list,\n name,\n options,\n show,\n recordRepresentation,\n hasCreate,\n hasEdit,\n hasShow,\n}: ResourceProps) => ({\n name,\n options,\n hasList: !!list,\n hasCreate: !!create || !!hasCreate,\n hasEdit: !!edit || !!hasEdit,\n hasShow: !!show || !!hasShow,\n icon,\n recordRepresentation,\n});\n", "import { createContext, useContext } from 'react';\n\nexport type SourceContextValue = {\n /*\n * Returns the source for a field or input, modified according to the context.\n */\n getSource: (source: string) => string;\n /*\n * Returns the label for a field or input, modified according to the context. Returns a translation key.\n */\n getLabel: (source: string) => string;\n};\n\n/**\n * Context that provides a function that accept a source and return getters for the modified source and label.\n *\n * This allows some special inputs to prefix or suffix the source of their children.\n *\n * @example\n * const sourceContext = {\n * getSource: source => `coordinates.${source}`,\n * getLabel: source => `resources.posts.fields.${source}`,\n * }\n * const CoordinatesInput = () => {\n * return (\n * <SourceContextProvider value={sourceContext}>\n * <TextInput source=\"lat\" />\n * <TextInput source=\"lng\" />\n * </SourceContextProvider>\n * );\n * };\n */\nexport const SourceContext = createContext<SourceContextValue | undefined>(\n undefined\n);\n\nconst defaultContextValue = {\n getSource: (source: string) => source,\n getLabel: (source: string) => source,\n};\nexport const SourceContextProvider = SourceContext.Provider;\n\nexport const useSourceContext = () => {\n const context = useContext(SourceContext);\n if (!context) {\n return defaultContextValue;\n }\n return context;\n};\n\nexport const useOptionalSourceContext = () => useContext(SourceContext);\n", "import { useResourceDefinitions } from './useResourceDefinitions';\nimport { useTranslate } from '../i18n';\nimport { humanize, inflect } from 'inflection';\n\n/**\n * A hook which returns function to get a translated resource name. It will use the label option of the `Resource` component if it was provided.\n *\n * @returns {GetResourceLabel} A function which takes a resource name and an optional number indicating the number of items (used for pluralization) and returns a translated string.\n * @example\n * const Menu = () => {\n * const resources = useResourceDefinitions();\n * const getResourceLabel = useGetResourceLabel();\n *\n * return (\n * <ul>\n * {Object.keys(resources).map(name => (\n * <li key={name}>\n * {getResourceLabel(name, 2)}\n * </li>\n * ))}\n * </ul>\n * )\n * }\n */\nexport const useGetResourceLabel = (): GetResourceLabel => {\n const translate = useTranslate();\n const definitions = useResourceDefinitions();\n\n return (resource: string, count = 2): string => {\n const resourceDefinition = definitions[resource];\n\n const label = translate(`resources.${resource}.name`, {\n smart_count: count,\n _:\n resourceDefinition &&\n resourceDefinition.options &&\n resourceDefinition.options.label\n ? translate(resourceDefinition.options.label, {\n smart_count: count,\n _: resourceDefinition.options.label,\n })\n : humanize(inflect(resource, count)),\n });\n\n return label;\n };\n};\n\nexport type GetResourceLabel = (resource: string, count?: number) => string;\n", "import * as React from 'react';\nimport { useCallback, ReactNode } from 'react';\nimport get from 'lodash/get';\n\nimport { useResourceDefinition } from './useResourceDefinition';\n\n/**\n * Get default string representation of a record\n *\n * @example // No customization\n * const getRecordRepresentation = useGetRecordRepresentation('posts');\n * getRecordRepresentation({ id: 1, title: 'Hello' }); // => \"#1\"\n *\n * @example // With <Resource name=\"posts\" recordRepresentation=\"title\" />\n * const getRecordRepresentation = useGetRecordRepresentation('posts');\n * getRecordRepresentation({ id: 1, title: 'Hello' }); // => \"Hello\"\n */\nexport const useGetRecordRepresentation = (\n resource?: string\n): ((record: any) => ReactNode) => {\n const { recordRepresentation } = useResourceDefinition({ resource });\n return useCallback(\n record => {\n if (!record) return '';\n if (typeof recordRepresentation === 'function') {\n return recordRepresentation(record);\n }\n if (typeof recordRepresentation === 'string') {\n return get(record, recordRepresentation);\n }\n if (React.isValidElement(recordRepresentation)) {\n return recordRepresentation;\n }\n if (record?.name != null && record?.name !== '') {\n return record.name;\n }\n if (record?.title != null && record?.title !== '') {\n return record.title;\n }\n if (record?.label != null && record?.label !== '') {\n return record.label;\n }\n if (record?.reference != null && record?.reference !== '') {\n return record.reference;\n }\n return `#${record.id}`;\n },\n [recordRepresentation]\n );\n};\n", "import { useMemo } from 'react';\nimport defaults from 'lodash/defaults';\n\nimport { useResourceDefinitions } from './useResourceDefinitions';\nimport { useResourceContext } from './useResourceContext';\nimport { ResourceDefinition, ResourceOptions } from '../types';\n\n/**\n * Hook to get the definition of a given resource\n *\n * @example // Get the current resource definition (based on ResourceContext)\n *\n * const definition = useResourceDefinition();\n * console.log(definition);\n * // {\n * // name: 'posts',\n * // hasList: true,\n * // hasEdit: true,\n * // hasShow: true,\n * // hasCreate: true,\n * // options: {},\n * // icon: PostIcon,\n * // }\n *\n * @example // Pass a resource prop to check a different resource definition\n *\n * const definition = useResourceDefinition({ resource: 'posts' });\n */\nexport const useResourceDefinition = <\n OptionsType extends ResourceOptions = any,\n>(\n props?: UseResourceDefinitionOptions\n): ResourceDefinition<OptionsType> => {\n const resource = useResourceContext(props);\n const resourceDefinitions = useResourceDefinitions();\n const { hasCreate, hasEdit, hasList, hasShow, recordRepresentation } =\n props || {};\n\n const definition = useMemo(() => {\n return defaults(\n {},\n {\n hasCreate,\n hasEdit,\n hasList,\n hasShow,\n recordRepresentation,\n },\n resource ? resourceDefinitions[resource] : {}\n ) as ResourceDefinition<OptionsType>;\n }, [\n resource,\n resourceDefinitions,\n hasCreate,\n hasEdit,\n hasList,\n hasShow,\n recordRepresentation,\n ]);\n\n return definition;\n};\n\nexport interface UseResourceDefinitionOptions {\n readonly resource?: string;\n readonly hasList?: boolean;\n readonly hasEdit?: boolean;\n readonly hasShow?: boolean;\n readonly hasCreate?: boolean;\n readonly recordRepresentation?:\n | string\n | React.ReactElement\n | ((record: any) => string);\n}\n", "import { useSourceContext } from './SourceContext';\n\n/**\n * Get the source prop for a field or input by checking if a source context is available.\n * @param {string} source The original source prop\n * @returns {string} The source prop, either the original one or the one modified by the SourceContext.\n * @example\n * const MyInput = ({ source, ...props }) => {\n * const finalSource = useWrappedSource(source);\n * return <input name={finalSource} {...props} />;\n * };\n */\nexport const useWrappedSource = (source: string) => {\n const sourceContext = useSourceContext();\n return sourceContext.getSource(source);\n};\n", "export const DEFAULT_LOCALE = 'en';\n\nexport * from './substituteTokens';\nexport * from './TestTranslationProvider';\nexport * from './I18nContext';\nexport * from './I18nContextProvider';\nexport * from './TranslationMessages';\nexport * from './TranslatableContext';\nexport * from './TranslatableContextProvider';\nexport * from './TranslationUtils';\nexport * from './useLocaleState';\nexport * from './useLocale';\nexport * from './useLocales';\nexport * from './useSetLocale';\nexport * from './useTranslatable';\nexport * from './useTranslatableContext';\nexport * from './useTranslate';\nexport * from './useTranslateLabel';\nexport * from './useI18nProvider';\n", "import * as React from 'react';\nimport { useState } from 'react';\n\nconst styles = {\n root: {\n width: '100vw',\n height: '100vh',\n display: 'flex',\n flexDirection: 'column' as 'column',\n fontFamily: '\"Roboto\", sans-serif',\n },\n main: {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center' as 'center',\n flexDirection: 'column' as 'column',\n background:\n 'linear-gradient(135deg, #00023b 0%, #00023b 50%, #313264 100%)',\n color: 'white',\n fontSize: '1.5em',\n fontWeight: 'bold' as 'bold',\n },\n secondary: {\n height: '20vh',\n background: '#e8e8e8',\n color: 'black',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-evenly',\n },\n link: {\n textAlign: 'center' as 'center',\n width: 150,\n display: 'block',\n textDecoration: 'none',\n color: 'black',\n opacity: 0.7,\n },\n linkHovered: {\n opacity: 1,\n },\n image: {\n width: 50,\n },\n logo: {\n height: 100,\n },\n};\n\nconst Button = ({ img, label, href }) => {\n const [hovered, setHovered] = useState(false);\n return (\n <div>\n <a\n href={href}\n style={\n hovered\n ? { ...styles.link, ...styles.linkHovered }\n : styles.link\n }\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n >\n <img src={img} alt={label} style={styles.image} />\n <br />\n {label}\n </a>\n </div>\n );\n};\n\nexport default () =>\n process.env.NODE_ENV === 'production' ? (\n <span />\n ) : (\n <div style={styles.root}>\n <div style={styles.main}>\n <img\n style={styles.logo}\n src=\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDIzLjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkNhbHF1ZV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgMTMxIDEzMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTMxIDEzMTsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLnN0MHtmaWxsOiMyMjI0NTg7fQoJLnN0MXtmaWxsOiM1MTUzN0Q7fQoJLnN0MntmaWxsOiNBM0E0Qjk7fQoJLnN0M3tmaWxsOiMwMDAyM0I7fQoJLnN0NHtmaWxsOiNGRkZGRkY7fQoJLnN0NXtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KPC9zdHlsZT4KPHRpdGxlPkxvZ29fc29tYnJlX2FpPC90aXRsZT4KPGcgaWQ9IlJlY3RhbmdsZV81NiI+Cgk8Zz4KCQk8cmVjdCB4PSIxOS4xIiB5PSIxOSIgdHJhbnNmb3JtPSJtYXRyaXgoMC41IC0wLjg2NiAwLjg2NiAwLjUgLTIzLjkyMjYgODkuNTQ2KSIgY2xhc3M9InN0MCIgd2lkdGg9IjkyLjkiIGhlaWdodD0iOTIuOSIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik04MywxMzAuM0wwLjgsODIuOUw0OC4yLDAuN2w4Mi4yLDQ3LjVMODMsMTMwLjN6IE0zLjUsODIuMWw3OC43LDQ1LjVsNDUuNS03OC43TDQ5LDMuNEwzLjUsODIuMXoiLz4KCTwvZz4KPC9nPgo8ZyBpZD0iUmVjdGFuZ2xlXzU2LTIiPgoJPGc+CgkJPHJlY3QgeD0iMTkiIHk9IjE5LjEiIHRyYW5zZm9ybT0ibWF0cml4KDAuODY2IC0wLjUgMC41IDAuODY2IC0yMy45Nzc3IDQxLjUyNykiIGNsYXNzPSJzdDAiIHdpZHRoPSI5Mi45IiBoZWlnaHQ9IjkyLjkiLz4KCQk8cGF0aCBjbGFzcz0ic3QyIiBkPSJNNDcuOSwxMzFMMCw0OEw4My4xLDBsNDgsODMuMUw0Ny45LDEzMXogTTQuMSw0OS4xbDQ1LDc3LjlsNzcuOS00NUw4Miw0LjFMNC4xLDQ5LjF6Ii8+Cgk8L2c+CjwvZz4KPGcgaWQ9IlJlY3RhbmdsZV81Ni0zIj4KCTxnPgoJCTxyZWN0IHg9IjE5LjEiIHk9IjE5IiBjbGFzcz0ic3QzIiB3aWR0aD0iOTIuOSIgaGVpZ2h0PSI5Mi45Ii8+CgkJPHBhdGggY2xhc3M9InN0NCIgZD0iTTExNC41LDExNC41SDE2LjZWMTYuNWg5Ny45VjExNC41eiBNMjEuNiwxMDkuNWg4Ny45VjIxLjVIMjEuNlYxMDkuNXoiLz4KCTwvZz4KPC9nPgo8ZyBpZD0iUmEiPgoJPGcgY2xhc3M9InN0NSI+CgkJPHBhdGggY2xhc3M9InN0NCIgZD0iTTU5LDg2LjdsLTYuNy0xOS4yaC0xLjJIMzguOXYxOS4yaC01LjZWMzguNWgxOC41YzMuNiwwLDYuMywwLjYsOC4xLDEuOGMxLjgsMS4yLDMsMi44LDMuNSw0LjgKCQkJYzAuNSwyLDAuOCw0LjYsMC44LDcuOGMwLDMuNS0wLjQsNi40LTEuMyw4LjdjLTAuOCwyLjMtMi42LDMuOS01LjMsNC44TDY1LDg2LjdINTl6IE01NS43LDYxLjZjMS4yLTAuNywyLTEuNywyLjQtMwoJCQljMC40LTEuMywwLjYtMy4yLDAuNi01LjZjMC0yLjUtMC4yLTQuMy0wLjUtNS42Yy0wLjMtMS4zLTEuMS0yLjItMi4zLTIuOWMtMS4yLTAuNy0zLTEtNS41LTFIMzguOXYxOS4xSDUwCgkJCUM1Mi41LDYyLjYsNTQuNCw2Mi4zLDU1LjcsNjEuNnoiLz4KCQk8cGF0aCBjbGFzcz0ic3Q0IiBkPSJNNzQuMyw4NWMtMS42LTEuNS0yLjUtNC4yLTIuNS04LjJjMC0yLjcsMC4zLTQuOCwwLjktNi4zYzAuNi0xLjUsMS42LTIuNiwzLTMuM2MxLjQtMC43LDMuNC0xLDYtMQoJCQljMS4zLDAsNS4xLDAuMSwxMS40LDAuM3YtMi40YzAtMi45LTAuMi01LTAuNy02LjJjLTAuNS0xLjItMS4zLTItMi42LTIuNGMtMS4yLTAuMy0zLjMtMC41LTYuMy0wLjVjLTEuMywwLTMsMC4xLTQuOSwwLjIKCQkJYy0yLDAuMS0zLjYsMC4zLTQuOCwwLjV2LTQuM2MzLjMtMC43LDcuMS0xLDExLjQtMWMzLjcsMCw2LjUsMC40LDguNCwxLjJjMS44LDAuOCwzLjEsMi4yLDMuOCw0LjFjMC43LDEuOSwxLDQuNywxLDguNHYyMi41aC00LjgKCQkJbC0wLjMtNWgtMC4zYy0wLjgsMi4yLTIuMiwzLjctNC4xLDQuNGMtMS45LDAuNy00LjEsMS4xLTYuNiwxLjFDNzguNiw4Ny4yLDc2LDg2LjUsNzQuMyw4NXogTTg5LjEsODJjMS4yLTAuNCwyLjItMS4yLDIuOC0yLjQKCQkJYzAuOS0xLjgsMS4zLTQuMywxLjMtNy4zdi0yaC0xMGMtMS43LDAtMywwLjItMy44LDAuNWMtMC44LDAuMy0xLjQsMC45LTEuNywxLjhjLTAuMywwLjktMC41LDIuMi0wLjUsNGMwLDEuOCwwLjIsMy4xLDAuNiwzLjkKCQkJYzAuNCwwLjgsMS4xLDEuNCwyLDEuOGMxLDAuMywyLjUsMC41LDQuNSwwLjVDODYuMiw4Mi42LDg3LjgsODIuNCw4OS4xLDgyeiIvPgoJPC9nPgo8L2c+Cjwvc3ZnPgo=\"\n alt=\"react-admin logo\"\n />\n <h1>Welcome to React-admin</h1>\n <div>\n Your application is properly configured.\n <br />\n Now you can add a &lt;Resource&gt; as child of\n &lt;Admin&gt;.\n </div>\n </div>\n <div style={styles.secondary}>\n <Button\n href=\"https://marmelab.com/react-admin/documentation.html\"\n img=\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDIzLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyNHB4IgoJIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnIGlkPSJCb3VuZGluZ19Cb3giPgoJPHJlY3QgZmlsbD0ibm9uZSIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0Ii8+CjwvZz4KPGcgaWQ9IkZsYXQiPgoJPGcgaWQ9InVpX3g1Rl9zcGVjX3g1Rl9oZWFkZXJfY29weV8yIj4KCTwvZz4KCTxnPgoJCTxwYXRoIGQ9Ik0yMSw1Yy0xLjExLTAuMzUtMi4zMy0wLjUtMy41LTAuNWMtMS45NSwwLTQuMDUsMC40LTUuNSwxLjVjLTEuNDUtMS4xLTMuNTUtMS41LTUuNS0xLjVTMi40NSw0LjksMSw2djE0LjY1CgkJCWMwLDAuMjUsMC4yNSwwLjUsMC41LDAuNWMwLjEsMCwwLjE1LTAuMDUsMC4yNS0wLjA1QzMuMSwyMC40NSw1LjA1LDIwLDYuNSwyMGMxLjk1LDAsNC4wNSwwLjQsNS41LDEuNWMxLjM1LTAuODUsMy44LTEuNSw1LjUtMS41CgkJCWMxLjY1LDAsMy4zNSwwLjMsNC43NSwxLjA1YzAuMSwwLjA1LDAuMTUsMC4wNSwwLjI1LDAuMDVjMC4yNSwwLDAuNS0wLjI1LDAuNS0wLjVWNkMyMi40LDUuNTUsMjEuNzUsNS4yNSwyMSw1eiBNMywxOC41VjcKCQkJYzEuMS0wLjM1LDIuMy0wLjUsMy41LTAuNWMxLjM0LDAsMy4xMywwLjQxLDQuNSwwLjk5djExLjVDOS42MywxOC40MSw3Ljg0LDE4LDYuNSwxOEM1LjMsMTgsNC4xLDE4LjE1LDMsMTguNXogTTIxLDE4LjUKCQkJYy0xLjEtMC4zNS0yLjMtMC41LTMuNS0wLjVjLTEuMzQsMC0zLjEzLDAuNDEtNC41LDAuOTlWNy40OWMxLjM3LTAuNTksMy4xNi0wLjk5LDQuNS0wLjk5YzEuMiwwLDIuNCwwLjE1LDMuNSwwLjVWMTguNXoiLz4KCQk8cGF0aCBvcGFjaXR5PSIwLjMiIGQ9Ik0xMSw3LjQ5QzkuNjMsNi45MSw3Ljg0LDYuNSw2LjUsNi41QzUuMyw2LjUsNC4xLDYuNjUsMyw3djExLjVDNC4xLDE4LjE1LDUuMywxOCw2LjUsMTgKCQkJYzEuMzQsMCwzLjEzLDAuNDEsNC41LDAuOTlWNy40OXoiLz4KCTwvZz4KCTxnPgoJCTxwYXRoIGQ9Ik0xNy41LDEwLjVjMC44OCwwLDEuNzMsMC4wOSwyLjUsMC4yNlY5LjI0QzE5LjIxLDkuMDksMTguMzYsOSwxNy41LDljLTEuMjgsMC0yLjQ2LDAuMTYtMy41LDAuNDd2MS41NwoJCQlDMTQuOTksMTAuNjksMTYuMTgsMTAuNSwxNy41LDEwLjV6Ii8+CgkJPHBhdGggZD0iTTE3LjUsMTMuMTZjMC44OCwwLDEuNzMsMC4wOSwyLjUsMC4yNlYxMS45Yy0wLjc5LTAuMTUtMS42NC0wLjI0LTIuNS0wLjI0Yy0xLjI4LDAtMi40NiwwLjE2LTMuNSwwLjQ3djEuNTcKCQkJQzE0Ljk5LDEzLjM2LDE2LjE4LDEzLjE2LDE3LjUsMTMuMTZ6Ii8+CgkJPHBhdGggZD0iTTE3LjUsMTUuODNjMC44OCwwLDEuNzMsMC4wOSwyLjUsMC4yNnYtMS41MmMtMC43OS0wLjE1LTEuNjQtMC4yNC0yLjUtMC4yNGMtMS4yOCwwLTIuNDYsMC4xNi0zLjUsMC40N3YxLjU3CgkJCUMxNC45OSwxNi4wMiwxNi4xOCwxNS44MywxNy41LDE1LjgzeiIvPgoJPC9nPgo8L2c+Cjwvc3ZnPgo=\"\n label=\"Documentation\"\n />\n <Button\n href=\"https://github.com/marmelab/react-admin/tree/master/examples\"\n img=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSJub25lIiBkPSJNMCAwaDI0djI0SDBWMHoiLz48cGF0aCBkPSJNOS40IDE2LjZMNC44IDEybDQuNi00LjZMOCA2bC02IDYgNiA2IDEuNC0xLjR6bTUuMiAwbDQuNi00LjYtNC42LTQuNkwxNiA2bDYgNi02IDYtMS40LTEuNHoiLz48L3N2Zz4=\"\n label=\"Examples\"\n />\n <Button\n href=\"https://stackoverflow.com/questions/tagged/react-admin\"\n img=\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDIzLjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyNHB4IgoJIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnIGlkPSJCb3VuZGluZ19Cb3giPgoJPHJlY3QgZmlsbD0ibm9uZSIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0Ii8+CjwvZz4KPGcgaWQ9IkZsYXQiPgoJPGcgaWQ9InVpX3g1Rl9zcGVjX3g1Rl9oZWFkZXJfY29weV8yIj4KCTwvZz4KCTxnPgoJCTxjaXJjbGUgb3BhY2l0eT0iMC4zIiBjeD0iOSIgY3k9IjgiIHI9IjIiLz4KCQk8cGF0aCBvcGFjaXR5PSIwLjMiIGQ9Ik05LDE1Yy0yLjcsMC01LjgsMS4yOS02LDIuMDFMMywxOGgxMnYtMUMxNC44LDE2LjI5LDExLjcsMTUsOSwxNXoiLz4KCQk8cGF0aCBkPSJNMTYuNjcsMTMuMTNDMTguMDQsMTQuMDYsMTksMTUuMzIsMTksMTd2M2g0di0zQzIzLDE0LjgyLDE5LjQzLDEzLjUzLDE2LjY3LDEzLjEzeiIvPgoJCTxwYXRoIGQ9Ik0xNSwxMmMyLjIxLDAsNC0xLjc5LDQtNGMwLTIuMjEtMS43OS00LTQtNGMtMC40NywwLTAuOTEsMC4xLTEuMzMsMC4yNEMxNC41LDUuMjcsMTUsNi41OCwxNSw4cy0wLjUsMi43My0xLjMzLDMuNzYKCQkJQzE0LjA5LDExLjksMTQuNTMsMTIsMTUsMTJ6Ii8+CgkJPHBhdGggZD0iTTksMTJjMi4yMSwwLDQtMS43OSw0LTRjMC0yLjIxLTEuNzktNC00LTRTNSw1Ljc5LDUsOEM1LDEwLjIxLDYuNzksMTIsOSwxMnogTTksNmMxLjEsMCwyLDAuOSwyLDJjMCwxLjEtMC45LDItMiwyCgkJCVM3LDkuMSw3LDhDNyw2LjksNy45LDYsOSw2eiIvPgoJCTxwYXRoIGQ9Ik05LDEzYy0yLjY3LDAtOCwxLjM0LTgsNHYzaDE2di0zQzE3LDE0LjM0LDExLjY3LDEzLDksMTN6IE0xNSwxOEgzbDAtMC45OUMzLjIsMTYuMjksNi4zLDE1LDksMTVzNS44LDEuMjksNiwyVjE4eiIvPgoJPC9nPgo8L2c+Cjwvc3ZnPgo=\"\n label=\"Community\"\n />\n </div>\n </div>\n );\n", "export default (condition: any, message: string) => {\n if (condition && process.env.NODE_ENV !== 'production') {\n console.warn(message); // eslint-disable-line\n }\n};\n", "import { useRef, useEffect } from 'react';\n\n/**\n * Debug hook showing which props updated between two renders\n * @example\n *\n * const MyComponent = React.memo(props => {\n * useWhyDidYouUpdate('MyComponent', props);\n * return <div...;\n * });\n *\n * @link https://usehooks.com/useWhyDidYouUpdate/\n */\nexport default function useWhyDidYouUpdate(name, props) {\n // Get a mutable ref object where we can store props ...\n // ... for comparison next time this hook runs.\n const previousProps = useRef() as any;\n\n useEffect(() => {\n if (previousProps.current) {\n // Get all keys from previous and current props\n const allKeys = Object.keys({ ...previousProps.current, ...props });\n // Use this object to keep track of changed props\n const changesObj = {};\n // Iterate through keys\n allKeys.forEach(key => {\n // If previous is different from current\n if (previousProps.current[key] !== props[key]) {\n // Add to changesObj\n changesObj[key] = {\n from: previousProps.current[key],\n to: props[key],\n };\n }\n });\n\n // If changesObj not empty then output to console\n if (Object.keys(changesObj).length) {\n console.log('[why-did-you-update]', name, changesObj);\n }\n }\n\n // Finally update previousProps with current props for next hook call\n previousProps.current = props;\n });\n}\n", "export const getMutationMode = (mutationMode, undoable) => {\n if (mutationMode) {\n return mutationMode;\n }\n switch (undoable) {\n case true:\n return 'undoable';\n case false:\n return 'pessimistic';\n default:\n return 'undoable';\n }\n};\n", "import { transform } from 'inflection';\n\ninterface Args {\n label?: string;\n defaultLabel?: string;\n resource?: string;\n resourceFromContext?: string;\n source?: string;\n}\n\ntype TranslationArguments = [string, any?];\n\n/**\n * Returns an array of arguments to use with the translate function for the label of a field.\n * The label will be computed from the resource and source props.\n *\n * Usage:\n * <span>\n * {translate(...getFieldLabelTranslationArgs({ label, resource, source }))}\n * </span>\n *\n * @see useTranslateLabel for a ready-to-use hook\n */\nexport const getFieldLabelTranslationArgs = (\n options?: Args\n): TranslationArguments => {\n if (!options) return [''];\n const { label, defaultLabel, resource, resourceFromContext, source } =\n options;\n\n if (typeof label !== 'undefined') return [label, { _: label }];\n\n if (typeof source === 'undefined') return [''];\n\n const { sourceWithoutDigits, sourceSuffix } = getSourceParts(source);\n\n const defaultLabelTranslation = transform(\n sourceSuffix.replace(/\\./g, ' '),\n ['underscore', 'humanize']\n );\n\n if (resource) {\n return [\n getResourceFieldLabelKey(resource, sourceWithoutDigits),\n { _: defaultLabelTranslation },\n ];\n }\n\n if (defaultLabel) {\n return [defaultLabel, { _: defaultLabelTranslation }];\n }\n\n return [\n getResourceFieldLabelKey(\n resourceFromContext || 'undefined',\n sourceWithoutDigits\n ),\n { _: defaultLabelTranslation },\n ];\n};\n\nexport default getFieldLabelTranslationArgs;\n\nexport const getResourceFieldLabelKey = (resource: string, source: string) =>\n `resources.${resource}.fields.${source}`;\n\n/**\n * Uses the source string to guess a translation message and a default label.\n *\n * @example\n * getSourceParts('pictures') // { sourceWithoutDigits: 'pictures', sourceSuffix: 'pictures' }\n * getSourceParts('pictures.url') // { sourceWithoutDigits: 'pictures.url', sourceSuffix: 'pictures.url' }\n * getSourceParts('pictures.0.url') // { sourceWithoutDigits: 'pictures.url', sourceSuffix: 'url' }\n * getSourceParts('pictures.12.urls.5.protocol') // { sourceWithoutDigits: 'pictures.urls.protocol', sourceSuffix: 'protocol' }\n */\nconst getSourceParts = (source: string) => {\n // remove digits, e.g. 'book.authors.2.categories.3.identifier.name' => 'book.authors.categories.identifier.name'\n const sourceWithoutDigits = source.replace(/\\.\\d+\\./g, '.');\n // get final part, e.g. 'book.authors.2.categories.3.identifier.name' => 'identifier.name'\n // we're not using a regexp here to avoid code scanning alert \"Polynomial regular expression used on uncontrolled data\"\n const parts = source.split('.');\n let lastPartWithDigits;\n parts.forEach((part, index) => {\n if (onlyDigits(part)) {\n lastPartWithDigits = index;\n }\n });\n const sourceSuffix =\n lastPartWithDigits != null\n ? parts.slice(lastPartWithDigits + 1).join('.')\n : source;\n\n return { sourceWithoutDigits, sourceSuffix };\n};\n\n// 48 and 57 are the char codes for \"0\" and \"9\", respectively\nconst onlyDigits = s => {\n for (let i = s.length - 1; i >= 0; i--) {\n const d = s.charCodeAt(i);\n if (d < 48 || d > 57) return false;\n }\n return true;\n};\n", "import { LegacyRef, MutableRefObject, RefCallback } from 'react';\n\n// https://github.com/gregberge/react-merge-refs\nexport function mergeRefs<T = any>(\n refs: Array<MutableRefObject<T> | LegacyRef<T>>\n): RefCallback<T> {\n return value => {\n refs.forEach(ref => {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref != null) {\n (ref as MutableRefObject<T | null>).current = value;\n }\n });\n };\n}\n", "import * as React from 'react';\nimport { useCallback } from 'react';\n\n// allow the hook to work in SSR\nconst useLayoutEffect =\n typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\n/**\n * Alternative to useCallback that doesn't update the callback when dependencies change\n *\n * @see https://reactjs.org/docs/hooks-faq.html#how-to-read-an-often-changing-value-from-usecallback\n * @see https://github.com/facebook/react/issues/14099#issuecomment-440013892\n */\nexport const useEvent = <Args extends unknown[], Return>(\n fn: (...args: Args) => Return\n): ((...args: Args) => Return) => {\n const ref = React.useRef<(...args: Args) => Return>(() => {\n throw new Error('Cannot call an event handler while rendering.');\n });\n\n useLayoutEffect(() => {\n ref.current = fn;\n });\n\n return useCallback((...args: Args) => ref.current(...args), []);\n};\n", "import * as React from 'react';\nimport { useCallback, useRef } from 'react';\nimport debounce from 'lodash/debounce';\nimport { useEvent } from './useEvent';\n\n// allow the hook to work in SSR\nconst useLayoutEffect =\n typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\n/**\n * Hook somewhat equivalent to useEvent, but with a debounce\n * Returns a debounced callback which will not change across re-renders unless the\n * callback or delay changes\n * @see https://reactjs.org/docs/hooks-faq.html#how-to-read-an-often-changing-value-from-usecallback\n * @see https://github.com/facebook/react/issues/14099#issuecomment-440013892\n */\nexport const useDebouncedEvent = <Args extends unknown[], Return>(\n callback: (...args: Args) => Return,\n delay: number\n) => {\n // Create a ref that stores the debounced callback\n const debouncedCallbackRef = useRef<(...args: Args) => Return | undefined>(\n () => {\n throw new Error('Cannot call an event handler while rendering.');\n }\n );\n\n // Keep a stable ref to the callback (in case it's an inline function for instance)\n const stableCallback = useEvent(callback);\n\n // Whenever callback or delay changes, we need to update the debounced callback\n useLayoutEffect(() => {\n debouncedCallbackRef.current = debounce(stableCallback, delay);\n }, [stableCallback, delay]);\n\n // The function returned by useCallback will invoke the debounced callback\n // Its dependencies array is empty, so it never changes across re-renders\n return useCallback(\n (...args: Args) => debouncedCallbackRef.current(...args),\n []\n );\n};\n", "import get from 'lodash/get';\nimport { useRecordContext } from '../controller';\nimport { ExtractRecordPaths } from '../types';\n\n/**\n * A hook that gets the value of a field of the current record.\n * @param params The hook parameters\n * @param params.source The field source\n * @param params.record The record to use. Uses the record from the RecordContext if not provided\n * @param params.defaultValue The value to return when the field value is empty\n * @returns The field value\n *\n * @example\n * const MyField = (props: { source: string }) => {\n * const value = useFieldValue(props);\n * return <span>{value}</span>;\n * }\n */\nexport const useFieldValue = <\n RecordType extends Record<string, any> = Record<string, any>,\n>(\n params: UseFieldValueOptions<RecordType>\n) => {\n const { defaultValue, source } = params;\n // We use the record from the RecordContext and do not rely on the SourceContext on purpose to\n // avoid having the wrong source targeting the record.\n // Indeed, some components may create a sub record context (SimpleFormIterator, TranslatableInputs, etc.). In this case,\n // it they used the SourceContext as well, they would have the wrong source.\n // Inputs needs the SourceContext as they rely on the Form value and you can't have nested forms.\n // Fields needs the RecordContext as they rely on the Record value and you can have nested RecordContext.\n const record = useRecordContext<RecordType>(params);\n\n return get(record, source, defaultValue);\n};\n\nexport interface UseFieldValueOptions<\n RecordType extends Record<string, any> = Record<string, any>,\n> {\n // FIXME: Find a way to throw a type error when defaultValue is not of RecordType[Source] type\n defaultValue?: any;\n source: ExtractRecordPaths<RecordType>;\n record?: RecordType;\n}\n", "import debounce from 'lodash/debounce';\n\n/**\n * A version of lodash/debounce that always returns a promise but wait for the debounced function to return to resolve it.\n * @param func The function to debounce\n * @param wait The debounce delay\n * @returns A debounced function that returns a promise\n */\nexport function asyncDebounce<\n FunctionType extends (...args: any[]) => Promise<any>,\n>(func: FunctionType, wait?: number) {\n const resolveSet = new Set<(p: any) => void>();\n const rejectSet = new Set<(p: any) => void>();\n\n const debounced = debounce((args: Parameters<FunctionType>) => {\n func(...args)\n .then((...res) => {\n resolveSet.forEach(resolve => resolve(...res));\n })\n .catch((...res) => {\n rejectSet.forEach(reject => reject(...res));\n })\n .finally(() => {\n resolveSet.clear();\n rejectSet.clear();\n });\n }, wait);\n\n return (...args: Parameters<FunctionType>): ReturnType<FunctionType> =>\n new Promise((resolve, reject) => {\n resolveSet.add(resolve);\n rejectSet.add(reject);\n debounced(args);\n }) as ReturnType<FunctionType>;\n}\n", "import { useEffect, useRef } from 'react';\nimport { useEvent } from './useEvent';\n\n/**\n * Checks if the application code has changed and calls the provided onNewVersionAvailable function when needed.\n *\n * It checks for code update by downloading the provided URL (default to the HTML page) and\n * comparing the hash of the response with the hash of the current page.\n *\n * @param {UseCheckForApplicationUpdateOptions} options The options\n * @param {Function} options.onNewVersionAvailable The function to call when a new version of the application is available.\n * @param {string} options.url Optional. The URL to download to check for code update. Defaults to the current URL.\n * @param {RequestInit} options.fetchOptions Optional. The options passed to fetch function when checking for update.\n * @param {number} options.interval Optional. The interval in milliseconds between two checks. Defaults to 3600000 (1 hour).\n * @param {boolean} options.disabled Optional. Whether the check should be disabled. Defaults to false.\n */\nexport const useCheckForApplicationUpdate = (\n options: UseCheckForApplicationUpdateOptions\n) => {\n const {\n url = window.location.href,\n fetchOptions,\n interval: delay = ONE_HOUR,\n onNewVersionAvailable: onNewVersionAvailableProp,\n disabled = process.env.NODE_ENV !== 'production',\n } = options;\n const currentHash = useRef<number>();\n const onNewVersionAvailable = useEvent(onNewVersionAvailableProp);\n\n useEffect(() => {\n if (disabled) return;\n\n getHashForUrl(url, fetchOptions).then(hash => {\n if (hash != null) {\n currentHash.current = hash;\n }\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [disabled, url, JSON.stringify(fetchOptions)]);\n\n useEffect(() => {\n if (disabled) return;\n\n const interval = setInterval(() => {\n getHashForUrl(url, fetchOptions)\n .then(hash => {\n if (hash != null && currentHash.current !== hash) {\n // Store the latest hash to avoid calling the onNewVersionAvailable function multiple times\n // or when users have closed the notification\n currentHash.current = hash;\n onNewVersionAvailable();\n }\n })\n .catch(() => {\n // Ignore errors to avoid issues when connectivity is lost\n });\n }, delay);\n return () => clearInterval(interval);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n delay,\n onNewVersionAvailable,\n disabled,\n url,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(fetchOptions),\n ]);\n};\n\nconst getHashForUrl = async (url: string, fetchOptions?: RequestInit) => {\n try {\n const response = await fetch(url, fetchOptions);\n if (!response.ok) return null;\n const text = await response.text();\n return hash(text);\n } catch (e) {\n return null;\n }\n};\n\n// Simple hash function, taken from https://stackoverflow.com/a/52171480/3723993, suggested by Copilot\nconst hash = (value: string, seed = 0) => {\n let h1 = 0xdeadbeef ^ seed,\n h2 = 0x41c6ce57 ^ seed;\n for (let i = 0, ch; i < value.length; i++) {\n ch = value.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507);\n h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909);\n h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507);\n h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909);\n\n return 4294967296 * (2097151 & h2) + (h1 >>> 0);\n};\n\nconst ONE_HOUR = 1000 * 60 * 60;\n\nexport interface UseCheckForApplicationUpdateOptions {\n onNewVersionAvailable: () => void;\n interval?: number;\n url?: string;\n fetchOptions?: RequestInit;\n disabled?: boolean;\n}\n", "import { useCallback } from 'react';\n\nimport { useStoreContext } from './useStoreContext';\n\n/**\n * Get a callback to remove an item from the store\n *\n * @example\n * import { useRemoveFromStore } from 'react-admin';\n *\n * const ResetDatagridPrefs = () {\n * const removeItem = useRemoveFromStore();\n *\n * const handleClick = () => {\n * removeItem('datagrid.prefs');\n * };\n *\n * return <Button onClick={hancleClick}>Reset datagrid preferences</Button>;\n * }\n */\nexport const useRemoveFromStore = (hookTimeKey?: string) => {\n const { removeItem } = useStoreContext();\n return useCallback(\n (key?: string) => {\n if (\n typeof key === 'undefined' &&\n typeof hookTimeKey === 'undefined'\n ) {\n throw new Error(\n 'You must provide a key to remove an item from the store'\n );\n }\n // @ts-ignore\n return removeItem(key ?? hookTimeKey);\n },\n [removeItem, hookTimeKey]\n );\n};\n", "import { useCallback } from 'react';\n\nimport { useStoreContext } from './useStoreContext';\n\n/**\n * Get a callback to remove all item with a certain key prefix from the store\n *\n * @example\n * import { useRemoveItemsFromStore } from 'react-admin';\n *\n * const ResetDatagridPrefs = () {\n * const removeItems = useRemoveItemsFromStore();\n *\n * const handleClick = () => {\n * removeItems('datagrid.prefs');\n * };\n *\n * return <Button onClick={hancleClick}>Reset datagrid preferences</Button>;\n * }\n */\nexport const useRemoveItemsFromStore = (hookTimeKeyPrefix?: string | null) => {\n const { removeItems } = useStoreContext();\n return useCallback(\n (keyPrefix?: string) => {\n if (\n typeof keyPrefix === 'undefined' &&\n typeof hookTimeKeyPrefix === 'undefined'\n ) {\n throw new Error(\n 'You must provide a key to remove an item from the store'\n );\n }\n // @ts-ignore\n return removeItems(keyPrefix ?? hookTimeKeyPrefix);\n },\n [removeItems, hookTimeKeyPrefix]\n );\n};\n", "import { useStoreContext } from './useStoreContext';\n\n/**\n * Get a callback to remove all items from the store\n *\n * @example\n * import { useResetStore } from 'react-admin';\n *\n * const ResetPrefs = () {\n * const reset = useResetStore();\n *\n * const handleClick = () => {\n * reset();\n * };\n *\n * return <Button onClick={handleClick}>Reset preferences</Button>;\n * }\n */\nexport const useResetStore = () => {\n const { reset } = useStoreContext();\n return reset;\n};\n", "import * as React from 'react';\nimport { Children, ReactElement, ComponentType, createElement } from 'react';\nimport { Location } from 'react-router-dom';\n\nimport warning from '../util/warning';\nimport { useAuthenticated } from './useAuthenticated';\nimport usePermissions from './usePermissions';\n\nexport interface WithPermissionsChildrenParams {\n permissions: any;\n}\n\ntype WithPermissionsChildren = (\n params: WithPermissionsChildrenParams\n) => ReactElement;\n\nexport interface WithPermissionsProps {\n authParams?: object;\n children?: WithPermissionsChildren;\n component?: ComponentType<any>;\n loading?: ComponentType<any>;\n location?: Location;\n render?: WithPermissionsChildren;\n staticContext?: object;\n [key: string]: any;\n}\n\nconst isEmptyChildren = children => Children.count(children) === 0;\n\n/**\n * After checking that the user is authenticated,\n * retrieves the user's permissions for a specific context.\n *\n * Useful for Route components ; used internally by Resource.\n * Use it to decorate your custom page components to require\n * a custom role. It will pass the permissions as a prop to your\n * component.\n *\n * You can set additional `authParams` at will if your authProvider\n * requires it.\n *\n * @example\n * import { Admin, CustomRoutes, WithPermissions } from 'react-admin';\n *\n * const Foo = ({ permissions }) => (\n * {permissions === 'admin' ? <p>Sensitive data</p> : null}\n * <p>Not sensitive data</p>\n * );\n *\n * const customRoutes = [\n * <Route path=\"/foo\" element={\n * <WithPermissions\n * authParams={{ foo: 'bar' }}\n * component={({ permissions, ...props }) => <Foo permissions={permissions} {...props} />}\n * />\n * } />\n * ];\n * const App = () => (\n * <Admin>\n * <CustomRoutes>{customRoutes}</CustomRoutes>\n * </Admin>\n * );\n */\nconst WithPermissions = (props: WithPermissionsProps) => {\n const {\n authParams,\n children,\n render,\n component,\n loading: Loading = null,\n staticContext,\n ...rest\n } = props;\n warning(\n (render && children && !isEmptyChildren(children)) ||\n (render && component) ||\n (component && children && !isEmptyChildren(children)),\n 'You should only use one of the `component`, `render` and `children` props in <WithPermissions>'\n );\n\n const { isPending: isAuthenticationPending } = useAuthenticated(authParams);\n const { permissions, isPending: isPendingPermissions } = usePermissions(\n authParams,\n {\n enabled: !isAuthenticationPending,\n }\n );\n // We must check both pending states here as if the authProvider does not implement getPermissions, isPendingPermissions will always be false\n if (isAuthenticationPending || isPendingPermissions) {\n return Loading ? <Loading /> : null;\n }\n\n if (component) {\n return createElement(component, { permissions, ...rest });\n }\n // @deprecated\n if (render) {\n return render({ permissions, ...rest });\n }\n // @deprecated\n if (children) {\n return children({ permissions, ...rest });\n }\n};\n\nexport default WithPermissions as ComponentType<WithPermissionsProps>;\n", "import { UseQueryOptions } from '@tanstack/react-query';\nimport useAuthState from './useAuthState';\n\n/**\n * Restrict access to authenticated users.\n * Redirect anonymous users to the login page.\n *\n * Use it in your custom page components to require\n * authentication.\n *\n * You can set additional `authParams` at will if your authProvider\n * requires it.\n *\n * @example\n * import { Admin, CustomRoutes, useAuthenticated } from 'react-admin';\n *\n * const FooPage = () => {\n * const { isPending } = useAuthenticated();\n * if (isPending) return null;\n * return <Foo />;\n * }\n *\n * const customRoutes = [\n * <Route path=\"/foo\" element={<FooPage />} />\n * ];\n *\n * const App = () => (\n * <Admin>\n * <CustomRoutes>{customRoutes}</CustomRoutes>\n * </Admin>\n * );\n */\nexport const useAuthenticated = <ParamsType = any>({\n params,\n logoutOnFailure = true,\n ...options\n}: UseAuthenticatedOptions<ParamsType> = {}) => {\n return useAuthState(params ?? emptyParams, logoutOnFailure, options);\n};\n\nexport type UseAuthenticatedOptions<ParamsType> = Omit<\n UseQueryOptions<boolean, any> & {\n params?: ParamsType;\n },\n 'queryKey' | 'queryFn'\n> & {\n logoutOnFailure?: boolean;\n};\n\nconst emptyParams = {};\n", "import { useCallback } from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\n\nimport { useNotificationContext } from '../notification';\nimport { useBasename } from '../routing';\nimport useAuthProvider, { defaultAuthParams } from './useAuthProvider';\nimport { removeDoubleSlashes } from '../routing/useCreatePath';\nimport { useQueryClient } from '@tanstack/react-query';\n\n/**\n * Get a callback for calling the authProvider.login() method\n * and redirect to the previous authenticated page (or the home page) on success.\n *\n * @see useAuthProvider\n *\n * @returns {Function} login callback\n *\n * @example\n *\n * import { useLogin } from 'react-admin';\n *\n * const LoginButton = () => {\n * const [loading, setLoading] = useState(false);\n * const login = useLogin();\n * const handleClick = {\n * setLoading(true);\n * login({ username: 'john', password: 'p@ssw0rd' }, '/posts')\n * .then(() => setLoading(false));\n * }\n * return <button onClick={handleClick}>Login</button>;\n * }\n */\nconst useLogin = (): Login => {\n const authProvider = useAuthProvider();\n const queryClient = useQueryClient();\n const location = useLocation();\n const locationState = location.state as any;\n const navigate = useNavigate();\n const basename = useBasename();\n const { resetNotifications } = useNotificationContext();\n const nextPathName = locationState && locationState.nextPathname;\n const nextSearch = locationState && locationState.nextSearch;\n const afterLoginUrl = removeDoubleSlashes(\n `${basename}/${defaultAuthParams.afterLoginUrl}`\n );\n\n const login = useCallback(\n (params: any = {}, pathName) => {\n if (authProvider) {\n return authProvider.login(params).then(ret => {\n resetNotifications();\n queryClient.invalidateQueries({\n queryKey: ['auth', 'getPermissions'],\n });\n if (ret && ret.hasOwnProperty('redirectTo')) {\n if (ret) {\n navigate(ret.redirectTo);\n }\n } else {\n const redirectUrl = pathName\n ? pathName\n : nextPathName + nextSearch || afterLoginUrl;\n navigate(redirectUrl);\n }\n return ret;\n });\n } else {\n resetNotifications();\n navigate(afterLoginUrl);\n return Promise.resolve();\n }\n },\n [\n authProvider,\n queryClient,\n navigate,\n nextPathName,\n nextSearch,\n resetNotifications,\n afterLoginUrl,\n ]\n );\n\n return login;\n};\n\n/**\n * Log a user in by calling the authProvider.login() method\n *\n * @param {Object} params Login parameters to pass to the authProvider. May contain username/email, password, etc\n * @param {string} pathName The path to redirect to after login. By default, redirects to the home page, or to the last page visited after disconnection.\n *\n * @return {Promise} The authProvider response\n */\ntype Login = (params: any, pathName?: string) => Promise<any>;\n\nexport default useLogin;\n", "import { useCallback } from 'react';\n\nimport useAuthProvider from './useAuthProvider';\n\n/**\n * Get a callback for calling the authProvider.getPermissions() method.\n *\n * @see useAuthProvider\n *\n * @returns {Function} getPermissions callback\n *\n * This is a low level hook. See those more specialized hooks\n * offering state handling.\n *\n * @see usePermissions\n *\n * @example\n *\n * import { useGetPermissions } from 'react-admin';\n *\n * const Roles = () => {\n * const [permissions, setPermissions] = useState([]);\n * const getPermissions = useGetPermissions();\n * useEffect(() => {\n * getPermissions().then(permissions => setPermissions(permissions))\n * }, [])\n * return (\n * <ul>\n * {permissions.map((permission, key) => (\n * <li key={key}>{permission}</li>\n * ))}\n * </ul>\n * );\n * }\n */\nconst useGetPermissions = (): GetPermissions => {\n const authProvider = useAuthProvider();\n const getPermissions = useCallback(\n (params: any = {}) => {\n // react-query requires the query to return something\n if (authProvider && authProvider.getPermissions) {\n return authProvider\n .getPermissions(params)\n .then(result => result ?? null);\n }\n return Promise.resolve([]);\n },\n [authProvider]\n );\n\n return getPermissions;\n};\n\n/**\n * Proxy for calling authProvider.getPermissions()\n *\n * @param {Object} params The parameters to pass to the authProvider\n *\n * @return {Promise} The authProvider response\n */\ntype GetPermissions = (params?: any) => Promise<any>;\n\nexport default useGetPermissions;\n", "export type UserCheck = (\n payload: object,\n pathName: string,\n routeParams?: object\n) => void;\n\nexport const AUTH_LOGIN = 'AUTH_LOGIN';\nexport const AUTH_CHECK = 'AUTH_CHECK';\nexport const AUTH_ERROR = 'AUTH_ERROR';\nexport const AUTH_LOGOUT = 'AUTH_LOGOUT';\nexport const AUTH_GET_PERMISSIONS = 'AUTH_GET_PERMISSIONS';\n\nexport type AuthActionType =\n | typeof AUTH_LOGIN\n | typeof AUTH_LOGOUT\n | typeof AUTH_ERROR\n | typeof AUTH_CHECK\n | typeof AUTH_GET_PERMISSIONS;\n", "import {\n AUTH_LOGIN,\n AUTH_LOGOUT,\n AUTH_CHECK,\n AUTH_ERROR,\n AUTH_GET_PERMISSIONS,\n} from './types';\nimport { AuthProvider, LegacyAuthProvider } from '../types';\n\n/**\n * Turn a function-based authProvider to an object-based one\n *\n * Allows using legacy authProviders transparently.\n *\n * @param {Function} legacyAuthProvider A legacy authProvider (type, params) => Promise<any>\n *\n * @returns {Object} An authProvider that react-admin can use\n */\nexport default (legacyAuthProvider: LegacyAuthProvider): AuthProvider => {\n const authProvider = (...args) => legacyAuthProvider.apply(null, args);\n authProvider.login = params => legacyAuthProvider(AUTH_LOGIN, params);\n authProvider.logout = params => legacyAuthProvider(AUTH_LOGOUT, params);\n authProvider.checkAuth = params => legacyAuthProvider(AUTH_CHECK, params);\n authProvider.checkError = error => legacyAuthProvider(AUTH_ERROR, error);\n authProvider.getPermissions = params =>\n legacyAuthProvider(AUTH_GET_PERMISSIONS, params);\n return authProvider;\n};\n", "import * as React from 'react';\nimport { ReactNode } from 'react';\n\nimport { useAuthenticated } from './useAuthenticated';\n\n/**\n * Restrict access to children to authenticated users.\n * Redirects anonymous users to the login page.\n *\n * Use it to decorate your custom page components to require\n * authentication.\n *\n * @see useAuthState\n *\n * @example\n * import { Admin, CustomRoutes, Authenticated } from 'react-admin';\n *\n * const customRoutes = [\n * <Route\n * path=\"/foo\"\n * element={\n * <Authenticated authParams={{ foo: 'bar' }}>\n * <Foo />\n * </Authenticated>\n * }\n * />\n * ];\n * const App = () => (\n * <Admin>\n * <CustomRoutes>{customRoutes}</CustomRoutes>\n * </Admin>\n * );\n */\nexport const Authenticated = (props: AuthenticatedProps) => {\n const { authParams, loading = null, children } = props;\n\n // this hook will redirect to login if the user is not authenticated\n const { isPending, isError } = useAuthenticated({ params: authParams });\n\n if (isPending || isError) {\n return loading;\n }\n\n return <>{children}</>;\n};\n\nexport interface AuthenticatedProps {\n children: ReactNode;\n authParams?: object;\n loading?: ReactNode;\n /**\n * @deprecated Authenticated now never renders children when not authenticated.\n */\n requireAuth?: boolean;\n}\n", "import * as React from 'react';\nimport { Navigate } from 'react-router';\nimport { useCanAccess, UseCanAccessOptions } from './useCanAccess';\nimport { RaRecord } from '../types';\nimport { useBasename } from '../routing';\n\n/**\n * A component that only displays its children after checking whether users are authorized to access the provided resource and action.\n * @param options\n * @param options.action The action to check. One of 'list', 'create', 'edit', 'show', 'delete', or a custom action.\n * @param options.resource The resource to check. e.g. 'posts', 'comments', 'users'\n * @param options.children The component to render if users are authorized.\n * @param options.loading An optional element to render while the authorization is being checked. Defaults to null.\n * @param options.accessDenied An optional element to render if users are denied access. Defaults to null.\n * @param options.error An optional element to render if an error occur while checking users access rights. Redirect users to `/authentication-error` by default.\n */\nexport const CanAccess = <\n RecordType extends RaRecord | Omit<RaRecord, 'id'> = RaRecord,\n ErrorType extends Error = Error,\n>({\n children,\n loading = null,\n accessDenied = null,\n error: errorElement = DEFAULT_ERROR,\n ...props\n}: CanAccessProps<RecordType, ErrorType>) => {\n const { canAccess, error, isPending } = useCanAccess(props);\n\n if (isPending) {\n return loading;\n }\n\n if (error) {\n return errorElement;\n }\n\n if (canAccess === false) {\n return accessDenied;\n }\n\n return children;\n};\n\nexport interface CanAccessProps<\n RecordType extends RaRecord | Omit<RaRecord, 'id'> = RaRecord,\n ErrorType extends Error = Error,\n> extends UseCanAccessOptions<RecordType, ErrorType> {\n children: React.ReactNode;\n loading?: React.ReactNode;\n accessDenied?: React.ReactNode;\n error?: React.ReactNode;\n}\n\nconst CanAccessDefaultError = () => {\n const basename = useBasename();\n return <Navigate to={`${basename}/authentication-error`} />;\n};\n\nconst DEFAULT_ERROR = <CanAccessDefaultError />;\n", "import { useMemo } from 'react';\nimport {\n QueryObserverLoadingErrorResult,\n QueryObserverLoadingResult,\n QueryObserverRefetchErrorResult,\n QueryObserverSuccessResult,\n useQuery,\n UseQueryOptions,\n} from '@tanstack/react-query';\nimport useAuthProvider from './useAuthProvider';\nimport { useResourceContext } from '../core';\nimport { useRecordContext } from '../controller';\nimport { HintedString } from '../types';\n\n/**\n * A hook that calls the authProvider.canAccess() method using react-query for a provided resource and action (and optionally a record).\n *\n * The return value updates according to the request state:\n *\n * - start: { isPending: true }\n * - success: { canAccess: true | false, isPending: false }\n * - error: { error: [error from provider], isPending: false }\n *\n * Useful to enable or disable features based on users permissions.\n *\n * @param {Object} params Any params you want to pass to the authProvider\n * @param {string} params.resource The resource to check access for\n * @param {string} params.action The action to check access for\n * @param {Object} params.record Optional. The record to check access for\n *\n * @returns Return the react-query result and a canAccess property which is a boolean indicating the access status\n *\n * @example\n * import { useCanAccess } from 'react-admin';\n *\n * const PostDetail = () => {\n * const { isPending, canAccess, error } = useCanAccess({\n * resource: 'posts',\n * action: 'read',\n * });\n * if (isPending || !canAccess) {\n * return null;\n * }\n * if (error) {\n * return <div>{error.message}</div>;\n * }\n * return <PostEdit />;\n * };\n */\nexport const useCanAccess = <\n RecordType extends Record<string, any> = Record<string, any>,\n ErrorType extends Error = Error,\n>(\n params: UseCanAccessOptions<RecordType, ErrorType>\n): UseCanAccessResult<ErrorType> => {\n const authProvider = useAuthProvider();\n const resource = useResourceContext(params);\n\n if (!resource) {\n throw new Error(\n 'useCanAccess must be used inside a <Resource> component or provide a resource prop'\n );\n }\n const record = useRecordContext<RecordType>(params);\n\n const authProviderHasCanAccess = !!authProvider?.canAccess;\n\n const queryResult = useQuery({\n queryKey: ['auth', 'canAccess', { ...params, record, resource }],\n queryFn: async ({ signal }) => {\n if (!authProvider || !authProvider.canAccess) {\n return true;\n }\n return authProvider.canAccess({\n ...params,\n record,\n resource,\n signal: authProvider.supportAbortSignal ? signal : undefined,\n });\n },\n enabled: authProviderHasCanAccess,\n ...params,\n });\n\n const result = useMemo(() => {\n // Don't check for the authProvider or authProvider.canAccess method in the useMemo\n // to avoid unnecessary re-renders\n return {\n ...queryResult,\n canAccess: queryResult.data,\n } as UseCanAccessResult<ErrorType>;\n }, [queryResult]);\n\n return authProviderHasCanAccess\n ? result\n : (emptyQueryObserverResult as UseCanAccessResult<ErrorType>);\n};\n\nconst emptyQueryObserverResult = {\n canAccess: true,\n data: true,\n dataUpdatedAt: 0,\n error: null,\n errorUpdatedAt: 0,\n errorUpdateCount: 0,\n failureCount: 0,\n failureReason: null,\n fetchStatus: 'idle',\n isError: false,\n isInitialLoading: false,\n isLoading: false,\n isLoadingError: false,\n isFetched: true,\n isFetchedAfterMount: true,\n isFetching: false,\n isPaused: false,\n isPlaceholderData: false,\n isPending: false,\n isRefetchError: false,\n isRefetching: false,\n isStale: false,\n isSuccess: true,\n status: 'success',\n refetch: () => Promise.resolve(emptyQueryObserverResult),\n};\n\nexport interface UseCanAccessOptions<\n RecordType extends Record<string, any> = Record<string, any>,\n ErrorType extends Error = Error,\n> extends Omit<UseQueryOptions<boolean, ErrorType>, 'queryKey' | 'queryFn'> {\n resource?: string;\n action: HintedString<'list' | 'create' | 'edit' | 'show' | 'delete'>;\n record?: RecordType;\n}\n\nexport type UseCanAccessResult<ErrorType = Error> =\n | UseCanAccessLoadingResult<ErrorType>\n | UseCanAccessLoadingErrorResult<ErrorType>\n | UseCanAccessRefetchErrorResult<ErrorType>\n | UseCanAccessSuccessResult<ErrorType>;\n\nexport interface UseCanAccessLoadingResult<ErrorType = Error>\n extends QueryObserverLoadingResult<boolean, ErrorType> {\n canAccess: undefined;\n}\nexport interface UseCanAccessLoadingErrorResult<ErrorType = Error>\n extends QueryObserverLoadingErrorResult<boolean, ErrorType> {\n canAccess: undefined;\n}\nexport interface UseCanAccessRefetchErrorResult<ErrorType = Error>\n extends QueryObserverRefetchErrorResult<boolean, ErrorType> {\n canAccess: boolean;\n}\nexport interface UseCanAccessSuccessResult<ErrorType = Error>\n extends QueryObserverSuccessResult<boolean, ErrorType> {\n canAccess: boolean;\n}\n", "import { useEffect } from 'react';\nimport useLogout from './useLogout';\n\n/**\n * Log the user out and redirect them to login.\n *\n * To be used as a catch-all route for anonymous users in a secure app.\n *\n * @see CoreAdminRoutes\n */\nexport const LogoutOnMount = () => {\n const logout = useLogout();\n useEffect(() => {\n logout();\n }, [logout]);\n return null;\n};\n", "import { useCallback } from 'react';\n\nimport useAuthProvider, { defaultAuthParams } from './useAuthProvider';\nimport useLogout from './useLogout';\nimport { useNotify } from '../notification';\nimport { useBasename } from '../routing';\nimport { removeDoubleSlashes } from '../routing/useCreatePath';\n\n/**\n * Get a callback for calling the authProvider.checkAuth() method.\n * In case of rejection, redirects to the login page, displays a notification,\n * and throws an error.\n *\n * This is a low level hook. See those more specialized hooks\n * for common authentication tasks, based on useCheckAuth.\n *\n * @see useAuthenticated\n * @see useAuthState\n *\n * @returns {Function} checkAuth callback\n *\n * @example\n *\n * import { useCheckAuth } from 'react-admin';\n *\n * const MyProtectedPage = () => {\n * const checkAuth = useCheckAuth();\n * useEffect(() => {\n * checkAuth().catch(() => {});\n * }, []);\n * return <p>Private content: EZAEZEZAET</p>\n * } // tip: use useAuthenticated() hook instead\n *\n * const MyPage = () => {\n * const checkAuth = useCheckAuth();\n * const [authenticated, setAuthenticated] = useState(true); // optimistic auth\n * useEffect(() => {\n * checkAuth({}, false)\n * .then(() => setAuthenticated(true))\n * .catch(() => setAuthenticated(false));\n * }, []);\n * return authenticated ? <Bar /> : <BarNotAuthenticated />;\n * } // tip: use useAuthState() hook instead\n */\nexport const useCheckAuth = (): CheckAuth => {\n const authProvider = useAuthProvider();\n const notify = useNotify();\n const logout = useLogout();\n const basename = useBasename();\n const loginUrl = removeDoubleSlashes(\n `${basename}/${defaultAuthParams.loginUrl}`\n );\n\n const checkAuth = useCallback(\n (params: any = {}, logoutOnFailure = true, redirectTo = loginUrl) =>\n authProvider\n ? authProvider.checkAuth(params).catch(error => {\n if (logoutOnFailure) {\n logout(\n {},\n error && error.redirectTo != null\n ? error.redirectTo\n : redirectTo\n );\n const shouldSkipNotify =\n error && error.message === false;\n !shouldSkipNotify &&\n notify(\n getErrorMessage(\n error,\n 'ra.auth.auth_check_error'\n ),\n { type: 'error' }\n );\n }\n throw error;\n })\n : checkAuthWithoutAuthProvider(),\n [authProvider, logout, notify, loginUrl]\n );\n\n return checkAuth;\n};\n\nconst checkAuthWithoutAuthProvider = () => Promise.resolve();\n\n/**\n * Check if the current user is authenticated by calling authProvider.checkAuth().\n * Logs the user out on failure.\n *\n * @param {Object} params The parameters to pass to the authProvider\n * @param {boolean} logoutOnFailure Whether the user should be logged out if the authProvider fails to authenticate them. True by default.\n * @param {string} redirectTo The login form url. Defaults to '/login'\n *\n * @return {Promise} Resolved to the authProvider response if the user passes the check, or rejected with an error otherwise\n */\nexport type CheckAuth = (\n params?: any,\n logoutOnFailure?: boolean,\n redirectTo?: string\n) => Promise<any>;\n\nconst getErrorMessage = (error, defaultMessage) =>\n typeof error === 'string'\n ? error\n : typeof error === 'undefined' || !error.message\n ? defaultMessage\n : error.message;\n", "import { useEffect, useMemo } from 'react';\nimport {\n useQuery,\n UseQueryOptions,\n QueryObserverResult,\n} from '@tanstack/react-query';\n\nimport useAuthProvider from './useAuthProvider';\nimport { UserIdentity } from '../types';\nimport { useEvent } from '../util';\n\nconst defaultIdentity: UserIdentity = {\n id: '',\n};\nconst defaultQueryParams = {\n staleTime: 5 * 60 * 1000,\n};\n\n/**\n * Return the current user identity by calling authProvider.getIdentity() on mount\n *\n * The return value updates according to the call state:\n *\n * - mount: { isPending: true }\n * - success: { identity, refetch: () => {}, isPending: false }\n * - error: { error: Error, isPending: false }\n *\n * The implementation is left to the authProvider.\n *\n * @returns The current user identity. Destructure as { isPending, identity, error, refetch }.\n *\n * @example\n * import { useGetIdentity, useGetOne } from 'react-admin';\n *\n * const PostDetail = ({ id }) => {\n * const { data: post, isPending: postLoading } = useGetOne('posts', { id });\n * const { identity, isPending: identityLoading } = useGetIdentity();\n * if (postLoading || identityLoading) return <>Loading...</>;\n * if (!post.lockedBy || post.lockedBy === identity.id) {\n * // post isn't locked, or is locked by me\n * return <PostEdit post={post} />\n * } else {\n * // post is locked by someone else and cannot be edited\n * return <PostShow post={post} />\n * }\n * }\n */\nexport const useGetIdentity = <ErrorType extends Error = Error>(\n options: UseGetIdentityOptions<ErrorType> = defaultQueryParams\n): UseGetIdentityResult<ErrorType> => {\n const authProvider = useAuthProvider();\n const { onSuccess, onError, onSettled, ...queryOptions } = options;\n\n const result = useQuery({\n queryKey: ['auth', 'getIdentity'],\n queryFn: async ({ signal }) => {\n if (\n authProvider &&\n typeof authProvider.getIdentity === 'function'\n ) {\n return authProvider.getIdentity({ signal });\n } else {\n return defaultIdentity;\n }\n },\n ...queryOptions,\n });\n\n const onSuccessEvent = useEvent(onSuccess ?? noop);\n const onErrorEvent = useEvent(onError ?? noop);\n const onSettledEvent = useEvent(onSettled ?? noop);\n\n useEffect(() => {\n if (result.data === undefined || result.isFetching) return;\n onSuccessEvent(result.data);\n }, [onSuccessEvent, result.data, result.isFetching]);\n\n useEffect(() => {\n if (result.error == null || result.isFetching) return;\n onErrorEvent(result.error);\n }, [onErrorEvent, result.error, result.isFetching]);\n\n useEffect(() => {\n if (result.status === 'pending' || result.isFetching) return;\n onSettledEvent(result.data, result.error);\n }, [\n onSettledEvent,\n result.data,\n result.error,\n result.status,\n result.isFetching,\n ]);\n\n return useMemo(\n () => ({\n ...result,\n identity: result.data,\n }),\n [result]\n );\n};\n\nexport interface UseGetIdentityOptions<ErrorType extends Error = Error>\n extends Omit<\n UseQueryOptions<UserIdentity, ErrorType>,\n 'queryKey' | 'queryFn'\n > {\n onSuccess?: (data: UserIdentity) => void;\n onError?: (err: Error) => void;\n onSettled?: (data?: UserIdentity, error?: Error | null) => void;\n}\n\nexport type UseGetIdentityResult<ErrorType = Error> = QueryObserverResult<\n UserIdentity,\n ErrorType\n> & {\n identity: UserIdentity | undefined;\n};\n\nexport default useGetIdentity;\n\nconst noop = () => {};\n", "import { useEffect } from 'react';\nimport { useQuery, UseQueryOptions } from '@tanstack/react-query';\nimport { useLocation } from 'react-router';\nimport { useRedirect } from '../routing';\nimport { AuthRedirectResult } from '../types';\nimport useAuthProvider from './useAuthProvider';\nimport { useEvent } from '../util';\n\n/**\n * This hook calls the `authProvider.handleCallback()` method on mount. This is meant to be used in a route called\n * by an external authentication service (e.g. Auth0) after the user has logged in.\n * By default, it redirects to application home page upon success, or to the `redirectTo` location returned by `authProvider. handleCallback`.\n *\n * @returns An object containing { isPending, data, error, refetch }.\n */\nexport const useHandleAuthCallback = (\n options?: UseHandleAuthCallbackOptions\n) => {\n const authProvider = useAuthProvider();\n const redirect = useRedirect();\n const location = useLocation();\n const locationState = location.state as any;\n const nextPathName = locationState && locationState.nextPathname;\n const nextSearch = locationState && locationState.nextSearch;\n const defaultRedirectUrl = nextPathName ? nextPathName + nextSearch : '/';\n const { onSuccess, onError, onSettled, ...queryOptions } = options ?? {};\n let handleCallbackPromise: Promise<void> | null;\n\n const queryResult = useQuery({\n queryKey: ['auth', 'handleCallback'],\n queryFn: ({ signal }) => {\n if (!handleCallbackPromise) {\n handleCallbackPromise =\n authProvider &&\n typeof authProvider.handleCallback === 'function'\n ? authProvider\n .handleCallback({ signal })\n .then(result => result ?? null)\n : Promise.resolve();\n }\n return handleCallbackPromise;\n },\n retry: false,\n ...queryOptions,\n });\n\n const onSuccessEvent = useEvent(\n onSuccess ??\n ((data: any) => {\n // AuthProviders relying on a third party services redirect back to the app can't\n // use the location state to store the path on which the user was before the login.\n // So we support a fallback on the localStorage.\n const previousLocation = localStorage.getItem(\n PreviousLocationStorageKey\n );\n const redirectTo =\n (data as AuthRedirectResult)?.redirectTo ??\n previousLocation;\n if (redirectTo === false) {\n return;\n }\n\n redirect(redirectTo ?? defaultRedirectUrl);\n })\n );\n const onErrorEvent = useEvent(onError ?? noop);\n const onSettledEvent = useEvent(onSettled ?? noop);\n\n useEffect(() => {\n if (queryResult.error == null || queryResult.isFetching) return;\n onErrorEvent(queryResult.error);\n }, [onErrorEvent, queryResult.error, queryResult.isFetching]);\n\n useEffect(() => {\n if (queryResult.data === undefined || queryResult.isFetching) return;\n onSuccessEvent(queryResult.data);\n }, [onSuccessEvent, queryResult.data, queryResult.isFetching]);\n\n useEffect(() => {\n if (queryResult.status === 'pending' || queryResult.isFetching) return;\n onSettledEvent(queryResult.data, queryResult.error);\n }, [\n onSettledEvent,\n queryResult.data,\n queryResult.error,\n queryResult.status,\n queryResult.isFetching,\n ]);\n\n return queryResult;\n};\n\n/**\n * Key used to store the previous location in localStorage.\n * Used by the useHandleAuthCallback hook to redirect the user to their previous location after a successful login.\n */\nexport const PreviousLocationStorageKey = '@react-admin/nextPathname';\n\nexport type UseHandleAuthCallbackOptions = Omit<\n UseQueryOptions<AuthRedirectResult | void>,\n 'queryKey' | 'queryFn'\n> & {\n onSuccess?: (data: AuthRedirectResult | void) => void;\n onError?: (err: Error) => void;\n onSettled?: (\n data?: AuthRedirectResult | void,\n error?: Error | null\n ) => void;\n};\n\nconst noop = () => {};\n", "import { useQueryClient } from '@tanstack/react-query';\nimport { useResourceContext } from '../core';\nimport { HintedString } from '../types';\nimport useAuthProvider from './useAuthProvider';\n\n/**\n * A hook that returns true if the authProvider is currently checking the authentication status or the user's access rights.\n * @param params\n * @param params.action The action to check access for\n * @param params.resource The resource to check access for (optional). Defaults to the resource of the current ResourceContext.\n * @returns {boolean} true if the authProvider is currently checking the authentication status or the user's access rights, false otherwise.\n */\nexport const useIsAuthPending = (params: UseIsAuthPendingParams) => {\n const { action, ...props } = params;\n const queryClient = useQueryClient();\n const authProvider = useAuthProvider();\n const resource = useResourceContext(props);\n\n if (!authProvider) {\n return false;\n }\n\n const authQueryState = queryClient.getQueryState(['auth', 'checkAuth', {}]);\n const canAccessQueryState = queryClient.getQueryState([\n 'auth',\n 'canAccess',\n { action, resource },\n ]);\n\n if (\n authQueryState?.status === 'pending' ||\n (authProvider.canAccess && canAccessQueryState?.status === 'pending')\n ) {\n return true;\n }\n\n return false;\n};\n\nexport type UseIsAuthPendingParams = {\n resource?: string;\n action: HintedString<'list' | 'create' | 'edit' | 'show' | 'delete'>;\n};\n", "import { useEffect } from 'react';\nimport { useNavigate } from 'react-router';\nimport { RaRecord } from '../types';\nimport {\n useCanAccess,\n UseCanAccessOptions,\n UseCanAccessResult,\n} from './useCanAccess';\nimport { useBasename } from '../routing';\n\n/**\n * A hook that calls the authProvider.canAccess() method for a provided resource and action (and optionally a record).\n * It redirects to the /access-denied page if the user doesn't have the required permissions.\n * It redirects to the /authentication-error page if the authProvider.canAccess throws an error.\n *\n * The return value updates according to the request state:\n *\n * - start: { isPending: true }\n * - success: { isPending: false }\n * - error: { error: [error from provider], isPending: false }\n *\n * Useful to enable or disable features based on users permissions.\n *\n * @param {Object} params Any params you want to pass to the authProvider\n * @param {string} params.resource The resource to check access for\n * @param {string} params.action The action to check access for\n * @param {Object} params.record Optional. The record to check access for\n *\n * @returns Return the react-query result.\n *\n * @example\n * import { useRequireAccess } from 'react-admin';\n *\n * const PostDetail = () => {\n * const { isPending } = useRequireAccess({\n * resource: 'posts',\n * action: 'read',\n * });\n * if (isPending) {\n * return null;\n * }\n *\n * return <PostEdit />;\n * };\n */\nexport const useRequireAccess = <\n RecordType extends RaRecord | Omit<RaRecord, 'id'> = RaRecord,\n ErrorType extends Error = Error,\n>(\n params: UseRequireAccessOptions<RecordType, ErrorType>\n) => {\n const { canAccess, data, error, ...rest } = useCanAccess(params);\n const navigate = useNavigate();\n const basename = useBasename();\n\n useEffect(() => {\n if (rest.isPending) return;\n\n if (canAccess === false) {\n navigate(`${basename}/access-denied`);\n }\n }, [basename, canAccess, navigate, rest.isPending]);\n\n useEffect(() => {\n if (error) {\n navigate(`${basename}/authentication-error`);\n }\n }, [basename, navigate, error]);\n\n return rest;\n};\n\nexport type UseRequireAccessOptions<\n RecordType extends RaRecord | Omit<RaRecord, 'id'> = RaRecord,\n ErrorType extends Error = Error,\n> = UseCanAccessOptions<RecordType, ErrorType>;\n\nexport type UseRequireAccessResult<ErrorType extends Error = Error> = Omit<\n UseCanAccessResult<ErrorType>,\n 'canAccess' | 'data'\n>;\n", "import { AuthProvider } from '../types';\n\n/**\n * A higher-order function which wraps an authProvider to handle refreshing authentication.\n * This is useful when the authentication service supports a refresh token mechanism.\n * The wrapped provider will call the refreshAuth function before\n * calling the authProvider checkAuth, getIdentity and getPermissions methods.\n *\n * The refreshAuth function should return a Promise that resolves when the authentication token has been refreshed.\n * It might throw an error if the refresh failed. In this case, react-admin will handle the error as usual.\n *\n * @param provider An authProvider\n * @param refreshAuth A function that refreshes the authentication token if needed and returns a Promise.\n * @returns A wrapped authProvider.\n *\n * @example\n * import { addRefreshAuthToAuthProvider } from 'react-admin';\n * import { authProvider } from './authProvider';\n * import { refreshAuth } from './refreshAuth';\n *\n * const authProvider = addRefreshAuthToAuthProvider(authProvider, refreshAuth);\n */\nexport const addRefreshAuthToAuthProvider = <\n AuthProviderType extends AuthProvider = AuthProvider,\n>(\n provider: AuthProviderType,\n refreshAuth: () => Promise<void>\n): AuthProviderType => {\n const proxy = new Proxy(provider, {\n get(_, name) {\n const shouldIntercept =\n AuthProviderInterceptedMethods.includes(name.toString()) &&\n provider[name.toString()] != null;\n\n if (shouldIntercept) {\n return async (...args: any[]) => {\n await refreshAuth();\n return provider[name.toString()](...args);\n };\n }\n\n return provider[name.toString()];\n },\n });\n\n return proxy;\n};\n\nconst AuthProviderInterceptedMethods = [\n 'checkAuth',\n 'getIdentity',\n 'getPermissions',\n];\n", "import { DataProvider } from '../types';\n\n/**\n * A higher-order function which wraps a dataProvider to handle refreshing authentication.\n * This is useful when the authentication service supports a refresh token mechanism.\n * The wrapped provider will call the refreshAuth function before calling any dataProvider methods.\n *\n * The refreshAuth function should return a Promise that resolves when the authentication token has been refreshed.\n * It might throw an error if the refresh failed. In this case, react-admin will handle the error as usual.\n *\n * @param provider A dataProvider\n * @param refreshAuth A function that refreshes the authentication token if needed and returns a Promise.\n * @returns A wrapped dataProvider.\n *\n * @example\n * import { addRefreshAuthToDataProvider } from 'react-admin';\n * import { jsonServerProvider } from 'ra-data-json-server';\n * import { refreshAuth } from './refreshAuth';\n *\n * const dataProvider = addRefreshAuthToDataProvider(jsonServerProvider('http://localhost:3000'), refreshAuth);\n */\nexport const addRefreshAuthToDataProvider = <\n DataProviderType extends DataProvider = DataProvider,\n>(\n provider: DataProviderType,\n refreshAuth: () => Promise<void>\n): DataProviderType => {\n const proxy = new Proxy(provider, {\n get(_, name) {\n return async (...args: any[]) => {\n await refreshAuth();\n return provider[name.toString()](...args);\n };\n },\n });\n\n return proxy;\n};\n", "import * as React from 'react';\nimport { createContext, useContext } from 'react';\n\nexport const PreferenceKeyContext = createContext<string | null>('');\n\nexport const PreferenceKeyContextProvider = ({\n value = '',\n children,\n}: {\n value?: string | null;\n children: React.ReactNode;\n}) => (\n <PreferenceKeyContext.Provider value={value}>\n {children}\n </PreferenceKeyContext.Provider>\n);\n\nexport const usePreferenceKey = () => {\n return useContext(PreferenceKeyContext);\n};\n", "import { useStore } from '../store/useStore';\nimport { usePreferenceKey } from './PreferenceKeyContext';\n\n/**\n * Get a preference value from the store\n *\n * Relies on the store, using a key namespaced with the preference key from the PreferenceKeyContext\n * @example\n *\n * // when used inside a PreferenceKeyContext of value 'my-app'\n * const [theme, setTheme] = usePreference('theme', 'light');\n * // this is equivalent to\n * const [theme, setTheme] = useStore('my-app.theme', 'light');\n */\nexport const usePreference = <T = any>(key?: string, defaultValue?: T) => {\n const preferenceKey = usePreferenceKey();\n if (!preferenceKey) {\n throw new Error(\n \"usePreference cannot be used outside of a Configurable component. Did you forget to wrap your component with <Configurable>? If you don't want to use Configurable, you can use the useStore hook instead.\"\n );\n }\n\n return useStore<T>(\n preferenceKey && key ? `${preferenceKey}.${key}` : preferenceKey ?? key,\n defaultValue\n );\n};\n", "import { useContext } from 'react';\nimport {\n PreferencesEditorContext,\n PreferencesEditorContextValue,\n} from './PreferencesEditorContext';\n\nexport const usePreferencesEditor = (): PreferencesEditorContextValue => {\n const context = useContext(PreferencesEditorContext);\n\n if (!context) {\n throw new Error(\n 'usePreferencesEditor must be used within a PreferencesEditorContextProvider'\n );\n }\n\n return context;\n};\n", "import { useState, useEffect } from 'react';\n\nimport { usePreference } from './usePreference';\n\n/**\n * Get the props for a preference input that changes the value on blur\n *\n * Relies on `usePreference`, so it's using the PreferenceKeyContext\n *\n * @example\n * const FontSizePreferenceInput = () => {\n * const field = usePreferenceInput('ui.font.size', 10);\n * return (\n * <div>\n * <label for=\"font-size\">Font size</label>\n * <input id=\"font-size\" {...field} />\n * </div>\n * );\n * }\n */\nexport const usePreferenceInput = (key?: string, defaultValue?: any) => {\n const [valueFromStore, setValueFromStore] = usePreference(\n key,\n defaultValue\n );\n const [value, setValue] = useState(valueFromStore);\n useEffect(() => {\n setValue(valueFromStore || defaultValue);\n }, [valueFromStore, defaultValue]);\n\n const onChange = event => {\n setValue(event.target.value === '' ? defaultValue : event.target.value);\n };\n\n const onBlur = () => {\n setValueFromStore(value);\n };\n\n const onKeyDown = event => {\n if (event.key === 'Enter') {\n setValueFromStore(value);\n const form = event.target.form;\n if (form) {\n const index = [...form].indexOf(event.target);\n form.elements[index + 1]?.focus();\n }\n event.preventDefault();\n }\n };\n\n return { value, onChange, onBlur, onKeyDown };\n};\n", "import { useEffect } from 'react';\nimport { usePreferencesEditor } from './usePreferencesEditor';\n\n/**\n * Set inspector title on mount\n *\n * @example\n * useSetInspectorTitle('Datagrid');\n */\nexport const useSetInspectorTitle = (title: string, options?: any) => {\n const preferencesEditorContext = usePreferencesEditor();\n if (!preferencesEditorContext) {\n throw new Error(\n 'useSetInspectorTitle cannot be called outside of a PreferencesEditorContext'\n );\n }\n const { setTitle } = preferencesEditorContext;\n\n useEffect(() => {\n setTitle(title, options);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [title, JSON.stringify(options), setTitle]);\n};\n", "import * as React from 'react';\n\nimport getValuesFromRecords from './getValuesFromRecords';\nimport InferredElement from './InferredElement';\n\nimport {\n isObject,\n valuesAreArray,\n valuesAreBoolean,\n valuesAreDate,\n valuesAreDateString,\n valuesAreHtml,\n valuesAreInteger,\n valuesAreNumeric,\n valuesAreObject,\n valuesAreString,\n} from './assertions';\nimport { InferredTypeMap } from './types';\nimport { pluralize } from 'inflection';\n\nconst DefaultComponent = () => <span>;</span>;\nconst defaultType = {\n type: DefaultComponent,\n representation: () => '<DefaultComponent />',\n};\nconst defaultTypes = {\n array: defaultType,\n boolean: defaultType,\n date: defaultType,\n email: defaultType,\n id: defaultType,\n number: defaultType,\n reference: defaultType,\n referenceArray: defaultType,\n richText: defaultType,\n string: defaultType,\n url: defaultType,\n};\n\nconst hasType = (type, types) => typeof types[type] !== 'undefined';\n\n/**\n * Guesses an element based on an array of values\n *\n * @example\n * inferElementFromValues(\n * 'address',\n * ['2 Baker Street', '1 Downing street'],\n * { number: NumberField, string: StringField }\n * );\n * // new InferredElement(<StringField source=\"address\" />)\n *\n * Types are optional: if a type isn't provided, the function falls back\n * to the nearest type.\n *\n * @example\n * inferElementFromValues(\n * 'content',\n * ['<h1>Hello</h1>'],\n * { string: StringField } // no richText type\n * );\n * // new InferredElement(<StringField source=\"content\" />)\n *\n * Types can be disabled by passing a falsy value.\n *\n * @example\n * inferElementFromValues(\n * 'content',\n * ['<h1>Hello</h1>'],\n * { string: StringField, richText: false }\n * );\n * // null\n *\n * @param {string} name Property name, e.g. 'date_of_birth'\n * @param {any[]} values an array of values from which to determine the type, e.g. [12, 34.4, 43]\n * @param {Object} types A set of components indexed by type. The string type is the only required one\n *\n * @return InferredElement\n */\nconst inferElementFromValues = (\n name,\n values = [],\n types: InferredTypeMap = defaultTypes\n) => {\n if (name === 'id' && hasType('id', types)) {\n return new InferredElement(types.id, { source: name });\n }\n if (name.substr(name.length - 3) === '_id' && hasType('reference', types)) {\n const reference = pluralize(name.substr(0, name.length - 3));\n return (\n types.reference &&\n new InferredElement(types.reference, {\n source: name,\n reference,\n })\n );\n }\n if (name.substr(name.length - 2) === 'Id' && hasType('reference', types)) {\n const reference = pluralize(name.substr(0, name.length - 2));\n return (\n types.reference &&\n new InferredElement(types.reference, {\n source: name,\n reference,\n })\n );\n }\n if (\n name.substr(name.length - 4) === '_ids' &&\n hasType('referenceArray', types)\n ) {\n const reference = pluralize(name.substr(0, name.length - 4));\n return (\n types.referenceArray &&\n new InferredElement(types.referenceArray, {\n source: name,\n reference,\n })\n );\n }\n if (\n name.substr(name.length - 3) === 'Ids' &&\n hasType('referenceArray', types)\n ) {\n const reference = pluralize(name.substr(0, name.length - 3));\n return (\n types.referenceArray &&\n new InferredElement(types.referenceArray, {\n source: name,\n reference,\n })\n );\n }\n if (values.length === 0) {\n // FIXME introspect further using name\n return new InferredElement(types.string, { source: name });\n }\n if (valuesAreArray(values)) {\n if (isObject(values[0][0]) && hasType('array', types)) {\n const leafValues = getValuesFromRecords(\n values.reduce((acc, vals) => acc.concat(vals), [])\n );\n // FIXME bad visual representation\n return (\n types.array &&\n new InferredElement(\n types.array,\n {\n source: name,\n },\n Object.keys(leafValues).map(leafName =>\n inferElementFromValues(\n leafName,\n leafValues[leafName],\n types\n )\n )\n )\n );\n }\n // FIXME introspect further\n return new InferredElement(types.string, { source: name });\n }\n if (valuesAreBoolean(values) && hasType('boolean', types)) {\n return new InferredElement(types.boolean, { source: name });\n }\n if (valuesAreDate(values) && hasType('date', types)) {\n return new InferredElement(types.date, { source: name });\n }\n if (valuesAreString(values)) {\n if (name === 'email' && hasType('email', types)) {\n return new InferredElement(types.email, { source: name });\n }\n if (name === 'url' && hasType('url', types)) {\n return new InferredElement(types.url, { source: name });\n }\n if (valuesAreDateString(values) && hasType('date', types)) {\n return new InferredElement(types.date, { source: name });\n }\n if (valuesAreHtml(values) && hasType('richText', types)) {\n return new InferredElement(types.richText, { source: name });\n }\n return new InferredElement(types.string, { source: name });\n }\n if (\n (valuesAreInteger(values) || valuesAreNumeric(values)) &&\n hasType('number', types)\n ) {\n return new InferredElement(types.number, { source: name });\n }\n if (valuesAreObject(values)) {\n // we need to go deeper\n // Arbitrarily, choose the first prop of the first object\n const propName = Object.keys(values[0]).shift();\n if (!propName) {\n return new InferredElement(types.string, { source: name });\n }\n const leafValues = values.map(v => v[propName]);\n return inferElementFromValues(`${name}.${propName}`, leafValues, types);\n }\n return new InferredElement(types.string, { source: name });\n};\n\nexport default inferElementFromValues;\n", "/**\n * Gets a list of values indexed by field based on a list of records\n *\n * @example\n * const records = [\n * {\n * id: 1,\n * title: \"Lorem Ipsum\",\n * views: 254,\n * user_id: 123,\n * },\n * {\n * id: 2,\n * title: \"Sic Dolor amet\",\n * views: 65,\n * user_id: 456,\n * },\n * ];\n * getValuesFromRecords(records);\n * // {\n * // id: [1, 2],\n * // title: ['Lorem Ipsum', 'Sic Dolor amet'],\n * // views: [254, 65],\n * // user_id: [123, 456],\n * // }\n */\nexport default (records: any[]) =>\n records.reduce((values, record) => {\n Object.keys(record).forEach(fieldName => {\n if (!values[fieldName]) {\n values[fieldName] = [];\n }\n if (record[fieldName] != null) {\n const value = Array.isArray(record[fieldName])\n ? [record[fieldName]]\n : record[fieldName];\n values[fieldName] = values[fieldName].concat(value);\n }\n });\n return values;\n }, {});\n", "import { createElement } from 'react';\nimport { InferredType } from './types';\n\nclass InferredElement {\n constructor(\n private type?: InferredType,\n private props?: any,\n private children?: any\n ) {\n this.type = type;\n this.props = props;\n this.children = children;\n }\n\n getElement(props = {}) {\n if (!this.type || !this.type.component) {\n return;\n }\n return this.children\n ? createElement(\n this.type.component,\n { ...this.props, ...props },\n this.children.length > 0\n ? this.children.map((child, index) =>\n child.getElement({ key: index })\n )\n : this.children.getElement()\n )\n : createElement(this.type.component, { ...this.props, ...props });\n }\n\n getProps() {\n return this.props;\n }\n\n isDefined() {\n return !!this.type;\n }\n\n getRepresentation() {\n if (!this.type) {\n return '';\n }\n if (this.type.representation) {\n return this.type.representation(this.props, this.children);\n }\n if (this.type.component) {\n return `<${\n this.type.component.displayName || this.type.component.name\n } source=\"${this.props.source}\" />`;\n }\n return '';\n }\n}\n\nexport default InferredElement;\n", "/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument) {\n const argStr = Object.prototype.toString.call(argument);\n\n // Clone the date\n if (\n argument instanceof Date ||\n (typeof argument === \"object\" && argStr === \"[object Date]\")\n ) {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new argument.constructor(+argument);\n } else if (\n typeof argument === \"number\" ||\n argStr === \"[object Number]\" ||\n typeof argument === \"string\" ||\n argStr === \"[object String]\"\n ) {\n // TODO: Can we get rid of as?\n return new Date(argument);\n } else {\n // TODO: Can we get rid of as?\n return new Date(NaN);\n }\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n", "/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from 'date-fns'\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date(date: DateType): DateType {\n * return constructFrom(\n * date, // Use contrustor from the given date\n * date.getTime() // Use the date value to create a new date\n * )\n * }\n */\nexport function constructFrom(date, value) {\n if (date instanceof Date) {\n return new date.constructor(value);\n } else {\n return new Date(value);\n }\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n", "import { toDate } from \"./toDate.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be added.\n *\n * @returns The new date with the days added\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport function addDays(date, amount) {\n const _date = toDate(date);\n if (isNaN(amount)) return constructFrom(date, NaN);\n if (!amount) {\n // If 0 days, no-op to avoid changing times in the hour before end of DST\n return _date;\n }\n _date.setDate(_date.getDate() + amount);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default addDays;\n", "/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n", "let defaultOptions = {};\n\nexport function getDefaultOptions() {\n return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}\n", "import { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date);\n const day = _date.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n _date.setDate(_date.getDate() - diff);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n", "import { startOfWeek } from \"./startOfWeek.mjs\";\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfISOWeek(date) {\n return startOfWeek(date, { weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeek;\n", "import { constructFrom } from \"./constructFrom.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport function getISOWeekYear(date) {\n const _date = toDate(date);\n const year = _date.getFullYear();\n\n const fourthOfJanuaryOfNextYear = constructFrom(date, 0);\n fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n\n const fourthOfJanuaryOfThisYear = constructFrom(date, 0);\n fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n if (_date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (_date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getISOWeekYear;\n", "import { toDate } from \"../toDate.mjs\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n const _date = toDate(date);\n const utcDate = new Date(\n Date.UTC(\n _date.getFullYear(),\n _date.getMonth(),\n _date.getDate(),\n _date.getHours(),\n _date.getMinutes(),\n _date.getSeconds(),\n _date.getMilliseconds(),\n ),\n );\n utcDate.setUTCFullYear(_date.getFullYear());\n return +date - +utcDate;\n}\n", "import { getISOWeekYear } from \"./getISOWeekYear.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of an ISO week-numbering year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfISOWeekYear(date) {\n const year = getISOWeekYear(date);\n const fourthOfJanuary = constructFrom(date, 0);\n fourthOfJanuary.setFullYear(year, 0, 4);\n fourthOfJanuary.setHours(0, 0, 0, 0);\n return startOfISOWeek(fourthOfJanuary);\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeekYear;\n", "/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n return (\n value instanceof Date ||\n (typeof value === \"object\" &&\n Object.prototype.toString.call(value) === \"[object Date]\")\n );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n", "import { isDate } from \"./isDate.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n if (!isDate(date) && typeof date !== \"number\") {\n return false;\n }\n const _date = toDate(date);\n return !isNaN(Number(_date));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n", "const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"less than a second\",\n other: \"less than {{count}} seconds\",\n },\n\n xSeconds: {\n one: \"1 second\",\n other: \"{{count}} seconds\",\n },\n\n halfAMinute: \"half a minute\",\n\n lessThanXMinutes: {\n one: \"less than a minute\",\n other: \"less than {{count}} minutes\",\n },\n\n xMinutes: {\n one: \"1 minute\",\n other: \"{{count}} minutes\",\n },\n\n aboutXHours: {\n one: \"about 1 hour\",\n other: \"about {{count}} hours\",\n },\n\n xHours: {\n one: \"1 hour\",\n other: \"{{count}} hours\",\n },\n\n xDays: {\n one: \"1 day\",\n other: \"{{count}} days\",\n },\n\n aboutXWeeks: {\n one: \"about 1 week\",\n other: \"about {{count}} weeks\",\n },\n\n xWeeks: {\n one: \"1 week\",\n other: \"{{count}} weeks\",\n },\n\n aboutXMonths: {\n one: \"about 1 month\",\n other: \"about {{count}} months\",\n },\n\n xMonths: {\n one: \"1 month\",\n other: \"{{count}} months\",\n },\n\n aboutXYears: {\n one: \"about 1 year\",\n other: \"about {{count}} years\",\n },\n\n xYears: {\n one: \"1 year\",\n other: \"{{count}} years\",\n },\n\n overXYears: {\n one: \"over 1 year\",\n other: \"over {{count}} years\",\n },\n\n almostXYears: {\n one: \"almost 1 year\",\n other: \"almost {{count}} years\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", count.toString());\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"in \" + result;\n } else {\n return result + \" ago\";\n }\n }\n\n return result;\n};\n", "export function buildFormatLongFn(args) {\n return (options = {}) => {\n // TODO: Remove String()\n const width = options.width ? String(options.width) : args.defaultWidth;\n const format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}\n", "import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.mjs\";\n\nconst dateFormats = {\n full: \"EEEE, MMMM do, y\",\n long: \"MMMM do, y\",\n medium: \"MMM d, y\",\n short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n", "const formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n formatRelativeLocale[token];\n", "/* eslint-disable no-unused-vars */\n\n/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n return (value, options) => {\n const context = options?.context ? String(options.context) : \"standalone\";\n\n let valuesArray;\n if (context === \"formatting\" && args.formattingValues) {\n const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n const width = options?.width ? String(options.width) : defaultWidth;\n\n valuesArray =\n args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n const defaultWidth = args.defaultWidth;\n const width = options?.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[width] || args.values[defaultWidth];\n }\n const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}\n", "import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.mjs\";\n\nconst eraValues = {\n narrow: [\"B\", \"A\"],\n abbreviated: [\"BC\", \"AD\"],\n wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n\n wide: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n wide: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n const number = Number(dirtyNumber);\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n const rem100 = number % 100;\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + \"st\";\n case 2:\n return number + \"nd\";\n case 3:\n return number + \"rd\";\n }\n }\n return number + \"th\";\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n", "export function buildMatchFn(args) {\n return (string, options = {}) => {\n const width = options.width;\n\n const matchPattern =\n (width && args.matchPatterns[width]) ||\n args.matchPatterns[args.defaultMatchWidth];\n const matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n const matchedString = matchResult[0];\n\n const parsePatterns =\n (width && args.parsePatterns[width]) ||\n args.parsePatterns[args.defaultParseWidth];\n\n const key = Array.isArray(parsePatterns)\n ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n : // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n let value;\n\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n options.valueCallback(value)\n : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n\nfunction findKey(object, predicate) {\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) &&\n predicate(object[key])\n ) {\n return key;\n }\n }\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (let key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}\n", "export function buildMatchPatternFn(args) {\n return (string, options = {}) => {\n const matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n const matchedString = matchResult[0];\n\n const parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n let value = args.valueCallback\n ? args.valueCallback(parseResult[0])\n : parseResult[0];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n value = options.valueCallback ? options.valueCallback(value) : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n", "import { buildMatchFn } from \"../../_lib/buildMatchFn.mjs\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.mjs\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^j/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n any: [\n /^ja/i,\n /^f/i,\n /^mar/i,\n /^ap/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^au/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n", "import { formatDistance } from \"./en-US/_lib/formatDistance.mjs\";\nimport { formatLong } from \"./en-US/_lib/formatLong.mjs\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.mjs\";\nimport { localize } from \"./en-US/_lib/localize.mjs\";\nimport { match } from \"./en-US/_lib/match.mjs\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n code: \"en-US\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n", "import { millisecondsInWeek } from \"./constants.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { startOfISOWeekYear } from \"./startOfISOWeekYear.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport function getISOWeek(date) {\n const _date = toDate(date);\n const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getISOWeek;\n", "import { constructFrom } from \"./constructFrom.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport function getWeekYear(date, options) {\n const _date = toDate(date);\n const year = _date.getFullYear();\n\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const firstWeekOfNextYear = constructFrom(date, 0);\n firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n\n const firstWeekOfThisYear = constructFrom(date, 0);\n firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n if (_date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (_date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getWeekYear;\n", "import { constructFrom } from \"./constructFrom.mjs\";\nimport { getWeekYear } from \"./getWeekYear.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfWeekYear(date, options) {\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const year = getWeekYear(date, options);\n const firstWeek = constructFrom(date, 0);\n firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setHours(0, 0, 0, 0);\n const _date = startOfWeek(firstWeek, options);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeekYear;\n", "import { millisecondsInWeek } from \"./constants.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { startOfWeekYear } from \"./startOfWeekYear.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * The {@link getWeek} function options.\n */\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The week\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> 53\n */\n\nexport function getWeek(date, options) {\n const _date = toDate(date);\n const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getWeek;\n", "const dateLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"P\":\n return formatLong.date({ width: \"short\" });\n case \"PP\":\n return formatLong.date({ width: \"medium\" });\n case \"PPP\":\n return formatLong.date({ width: \"long\" });\n case \"PPPP\":\n default:\n return formatLong.date({ width: \"full\" });\n }\n};\n\nconst timeLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"p\":\n return formatLong.time({ width: \"short\" });\n case \"pp\":\n return formatLong.time({ width: \"medium\" });\n case \"ppp\":\n return formatLong.time({ width: \"long\" });\n case \"pppp\":\n default:\n return formatLong.time({ width: \"full\" });\n }\n};\n\nconst dateTimeLongFormatter = (pattern, formatLong) => {\n const matchResult = pattern.match(/(P+)(p+)?/) || [];\n const datePattern = matchResult[1];\n const timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n let dateTimeFormat;\n\n switch (datePattern) {\n case \"P\":\n dateTimeFormat = formatLong.dateTime({ width: \"short\" });\n break;\n case \"PP\":\n dateTimeFormat = formatLong.dateTime({ width: \"medium\" });\n break;\n case \"PPP\":\n dateTimeFormat = formatLong.dateTime({ width: \"long\" });\n break;\n case \"PPPP\":\n default:\n dateTimeFormat = formatLong.dateTime({ width: \"full\" });\n break;\n }\n\n return dateTimeFormat\n .replace(\"{{date}}\", dateLongFormatter(datePattern, formatLong))\n .replace(\"{{time}}\", timeLongFormatter(timePattern, formatLong));\n};\n\nexport const longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter,\n};\n", "const dayOfYearTokenRE = /^D+$/;\nconst weekYearTokenRE = /^Y+$/;\n\nconst throwTokens = [\"D\", \"DD\", \"YY\", \"YYYY\"];\n\nexport function isProtectedDayOfYearToken(token) {\n return dayOfYearTokenRE.test(token);\n}\n\nexport function isProtectedWeekYearToken(token) {\n return weekYearTokenRE.test(token);\n}\n\nexport function warnOrThrowProtectedError(token, format, input) {\n const _message = message(token, format, input);\n console.warn(_message);\n if (throwTokens.includes(token)) throw new RangeError(_message);\n}\n\nfunction message(token, format, input) {\n const subject = token[0] === \"Y\" ? \"years\" : \"days of the month\";\n return `Use \\`${token.toLowerCase()}\\` instead of \\`${token}\\` (in \\`${format}\\`) for formatting ${subject} to the input \\`${input}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\n", "import { getDefaultOptions as getInternalDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * @name getDefaultOptions\n * @category Common Helpers\n * @summary Get default options.\n * @pure false\n *\n * @description\n * Returns an object that contains defaults for\n * `options.locale`, `options.weekStartsOn` and `options.firstWeekContainsDate`\n * arguments for all functions.\n *\n * You can change these with [setDefaultOptions](https://date-fns.org/docs/setDefaultOptions).\n *\n * @returns The default options\n *\n * @example\n * const result = getDefaultOptions()\n * //=> {}\n *\n * @example\n * setDefaultOptions({ weekStarsOn: 1, firstWeekContainsDate: 4 })\n * const result = getDefaultOptions()\n * //=> { weekStarsOn: 1, firstWeekContainsDate: 4 }\n */\nexport function getDefaultOptions() {\n return Object.assign({}, getInternalDefaultOptions());\n}\n\n// Fallback for modularized imports:\nexport default getDefaultOptions;\n", "import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getISODay\n * @category Weekday Helpers\n * @summary Get the day of the ISO week of the given date.\n *\n * @description\n * Get the day of the ISO week of the given date,\n * which is 7 for Sunday, 1 for Monday etc.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The day of ISO week\n *\n * @example\n * // Which day of the ISO week is 26 February 2012?\n * const result = getISODay(new Date(2012, 1, 26))\n * //=> 7\n */\nexport function getISODay(date) {\n const _date = toDate(date);\n let day = _date.getDay();\n\n if (day === 0) {\n day = 7;\n }\n\n return day;\n}\n\n// Fallback for modularized imports:\nexport default getISODay;\n", "import { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name transpose\n * @category Generic Helpers\n * @summary Transpose the date to the given constructor.\n *\n * @description\n * The function transposes the date to the given constructor. It helps you\n * to transpose the date in the system time zone to say `UTCDate` or any other\n * date extension.\n *\n * @typeParam DateInputType - The input `Date` type derived from the passed argument.\n * @typeParam DateOutputType - The output `Date` type derived from the passed constructor.\n *\n * @param fromDate - The date to use values from\n * @param constructor - The date constructor to use\n *\n * @returns Date transposed to the given constructor\n *\n * @example\n * // Create July 10, 2022 00:00 in locale time zone\n * const date = new Date(2022, 6, 10)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0800 (Singapore Standard Time)'\n *\n * @example\n * // Transpose the date to July 10, 2022 00:00 in UTC\n * transpose(date, UTCDate)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0000 (Coordinated Universal Time)'\n */\nexport function transpose(fromDate, constructor) {\n const date =\n constructor instanceof Date\n ? constructFrom(constructor, 0)\n : new constructor(0);\n date.setFullYear(\n fromDate.getFullYear(),\n fromDate.getMonth(),\n fromDate.getDate(),\n );\n date.setHours(\n fromDate.getHours(),\n fromDate.getMinutes(),\n fromDate.getSeconds(),\n fromDate.getMilliseconds(),\n );\n return date;\n}\n\n// Fallback for modularized imports:\nexport default transpose;\n", "import { transpose } from \"../../transpose.mjs\";\nimport { constructFrom } from \"../../constructFrom.mjs\";\n\nconst TIMEZONE_UNIT_PRIORITY = 10;\n\nexport class Setter {\n subPriority = 0;\n\n validate(_utcDate, _options) {\n return true;\n }\n}\n\nexport class ValueSetter extends Setter {\n constructor(\n value,\n\n validateValue,\n\n setValue,\n\n priority,\n subPriority,\n ) {\n super();\n this.value = value;\n this.validateValue = validateValue;\n this.setValue = setValue;\n this.priority = priority;\n if (subPriority) {\n this.subPriority = subPriority;\n }\n }\n\n validate(date, options) {\n return this.validateValue(date, this.value, options);\n }\n\n set(date, flags, options) {\n return this.setValue(date, flags, this.value, options);\n }\n}\n\nexport class DateToSystemTimezoneSetter extends Setter {\n priority = TIMEZONE_UNIT_PRIORITY;\n subPriority = -1;\n set(date, flags) {\n if (flags.timestampIsSet) return date;\n return constructFrom(date, transpose(date, Date));\n }\n}\n", "import { ValueSetter } from \"./Setter.mjs\";\n\nexport class Parser {\n run(dateString, token, match, options) {\n const result = this.parse(dateString, token, match, options);\n if (!result) {\n return null;\n }\n\n return {\n setter: new ValueSetter(\n result.value,\n this.validate,\n this.set,\n this.priority,\n this.subPriority,\n ),\n rest: result.rest,\n };\n }\n\n validate(_utcDate, _value, _options) {\n return true;\n }\n}\n", "import { Parser } from \"../Parser.mjs\";\n\nexport class EraParser extends Parser {\n priority = 140;\n\n parse(dateString, token, match) {\n switch (token) {\n // AD, BC\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return (\n match.era(dateString, { width: \"abbreviated\" }) ||\n match.era(dateString, { width: \"narrow\" })\n );\n\n // A, B\n case \"GGGGG\":\n return match.era(dateString, { width: \"narrow\" });\n // Anno Domini, Before Christ\n case \"GGGG\":\n default:\n return (\n match.era(dateString, { width: \"wide\" }) ||\n match.era(dateString, { width: \"abbreviated\" }) ||\n match.era(dateString, { width: \"narrow\" })\n );\n }\n }\n\n set(date, flags, value) {\n flags.era = value;\n date.setFullYear(value, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"R\", \"u\", \"t\", \"T\"];\n}\n", "export const numericPatterns = {\n month: /^(1[0-2]|0?\\d)/, // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/, // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/, // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/, // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/, // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/, // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/, // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/, // 0 to 12\n minute: /^[0-5]?\\d/, // 0 to 59\n second: /^[0-5]?\\d/, // 0 to 59\n\n singleDigit: /^\\d/, // 0 to 9\n twoDigits: /^\\d{1,2}/, // 0 to 99\n threeDigits: /^\\d{1,3}/, // 0 to 999\n fourDigits: /^\\d{1,4}/, // 0 to 9999\n\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/, // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/, // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/, // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/, // 0 to 9999, -0 to -9999\n};\n\nexport const timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/,\n};\n", "import {\n millisecondsInHour,\n millisecondsInMinute,\n millisecondsInSecond,\n} from \"../../constants.mjs\";\nimport { numericPatterns } from \"./constants.mjs\";\n\nexport function mapValue(parseFnResult, mapFn) {\n if (!parseFnResult) {\n return parseFnResult;\n }\n\n return {\n value: mapFn(parseFnResult.value),\n rest: parseFnResult.rest,\n };\n}\n\nexport function parseNumericPattern(pattern, dateString) {\n const matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n return {\n value: parseInt(matchResult[0], 10),\n rest: dateString.slice(matchResult[0].length),\n };\n}\n\nexport function parseTimezonePattern(pattern, dateString) {\n const matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n // Input is 'Z'\n if (matchResult[0] === \"Z\") {\n return {\n value: 0,\n rest: dateString.slice(1),\n };\n }\n\n const sign = matchResult[1] === \"+\" ? 1 : -1;\n const hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n const minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n const seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n\n return {\n value:\n sign *\n (hours * millisecondsInHour +\n minutes * millisecondsInMinute +\n seconds * millisecondsInSecond),\n rest: dateString.slice(matchResult[0].length),\n };\n}\n\nexport function parseAnyDigitsSigned(dateString) {\n return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\n\nexport function parseNDigits(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigit, dateString);\n case 2:\n return parseNumericPattern(numericPatterns.twoDigits, dateString);\n case 3:\n return parseNumericPattern(numericPatterns.threeDigits, dateString);\n case 4:\n return parseNumericPattern(numericPatterns.fourDigits, dateString);\n default:\n return parseNumericPattern(new RegExp(\"^\\\\d{1,\" + n + \"}\"), dateString);\n }\n}\n\nexport function parseNDigitsSigned(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n case 2:\n return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n case 3:\n return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n case 4:\n return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n default:\n return parseNumericPattern(new RegExp(\"^-?\\\\d{1,\" + n + \"}\"), dateString);\n }\n}\n\nexport function dayPeriodEnumToHours(dayPeriod) {\n switch (dayPeriod) {\n case \"morning\":\n return 4;\n case \"evening\":\n return 17;\n case \"pm\":\n case \"noon\":\n case \"afternoon\":\n return 12;\n case \"am\":\n case \"midnight\":\n case \"night\":\n default:\n return 0;\n }\n}\n\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n const isCommonEra = currentYear > 0;\n // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n const absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n\n let result;\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100;\n } else {\n const rangeEnd = absCurrentYear + 50;\n const rangeEndCentury = Math.trunc(rangeEnd / 100) * 100;\n const isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n }\n\n return isCommonEra ? result : 1 - result;\n}\n\nexport function isLeapYearIndex(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n", "import { Parser } from \"../Parser.mjs\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.mjs\";\n\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n// | Year | y | yy | yyy | yyyy | yyyyy |\n// |----------|-------|----|-------|-------|-------|\n// | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n// | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n// | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n// | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n// | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\nexport class YearParser extends Parser {\n priority = 130;\n incompatibleTokens = [\"Y\", \"R\", \"u\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n\n parse(dateString, token, match) {\n const valueCallback = (year) => ({\n year,\n isTwoDigitYear: token === \"yy\",\n });\n\n switch (token) {\n case \"y\":\n return mapValue(parseNDigits(4, dateString), valueCallback);\n case \"yo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"year\",\n }),\n valueCallback,\n );\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n\n validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n\n set(date, flags, value) {\n const currentYear = date.getFullYear();\n\n if (value.isTwoDigitYear) {\n const normalizedTwoDigitYear = normalizeTwoDigitYear(\n value.year,\n currentYear,\n );\n date.setFullYear(normalizedTwoDigitYear, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n const year =\n !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setFullYear(year, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n}\n", "import { getWeekYear } from \"../../../getWeekYear.mjs\";\nimport { startOfWeek } from \"../../../startOfWeek.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.mjs\";\n\n// Local week-numbering year\nexport class LocalWeekYearParser extends Parser {\n priority = 130;\n\n parse(dateString, token, match) {\n const valueCallback = (year) => ({\n year,\n isTwoDigitYear: token === \"YY\",\n });\n\n switch (token) {\n case \"Y\":\n return mapValue(parseNDigits(4, dateString), valueCallback);\n case \"Yo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"year\",\n }),\n valueCallback,\n );\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n\n validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n\n set(date, flags, value, options) {\n const currentYear = getWeekYear(date, options);\n\n if (value.isTwoDigitYear) {\n const normalizedTwoDigitYear = normalizeTwoDigitYear(\n value.year,\n currentYear,\n );\n date.setFullYear(\n normalizedTwoDigitYear,\n 0,\n options.firstWeekContainsDate,\n );\n date.setHours(0, 0, 0, 0);\n return startOfWeek(date, options);\n }\n\n const year =\n !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setFullYear(year, 0, options.firstWeekContainsDate);\n date.setHours(0, 0, 0, 0);\n return startOfWeek(date, options);\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"Q\",\n \"q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"t\",\n \"T\",\n ];\n}\n", "import { startOfISOWeek } from \"../../../startOfISOWeek.mjs\";\nimport { constructFrom } from \"../../../constructFrom.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigitsSigned } from \"../utils.mjs\";\n\n// ISO week-numbering year\nexport class ISOWeekYearParser extends Parser {\n priority = 130;\n\n parse(dateString, token) {\n if (token === \"R\") {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n\n set(date, _flags, value) {\n const firstWeekOfYear = constructFrom(date, 0);\n firstWeekOfYear.setFullYear(value, 0, 4);\n firstWeekOfYear.setHours(0, 0, 0, 0);\n return startOfISOWeek(firstWeekOfYear);\n }\n\n incompatibleTokens = [\n \"G\",\n \"y\",\n \"Y\",\n \"u\",\n \"Q\",\n \"q\",\n \"M\",\n \"L\",\n \"w\",\n \"d\",\n \"D\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n", "import { Parser } from \"../Parser.mjs\";\nimport { parseNDigitsSigned } from \"../utils.mjs\";\n\nexport class ExtendedYearParser extends Parser {\n priority = 130;\n\n parse(dateString, token) {\n if (token === \"u\") {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n\n set(date, _flags, value) {\n date.setFullYear(value, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"G\", \"y\", \"Y\", \"R\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n}\n", "import { Parser } from \"../Parser.mjs\";\nimport { parseNDigits } from \"../utils.mjs\";\n\nexport class QuarterParser extends Parser {\n priority = 120;\n\n parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case \"Q\":\n case \"QQ\": // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n case \"Qo\":\n return match.ordinalNumber(dateString, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"QQQ\":\n return (\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"QQQQQ\":\n return match.quarter(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"QQQQ\":\n default:\n return (\n match.quarter(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n\n set(date, _flags, value) {\n date.setMonth((value - 1) * 3, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"M\",\n \"L\",\n \"w\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n", "import { Parser } from \"../Parser.mjs\";\nimport { parseNDigits } from \"../utils.mjs\";\n\nexport class StandAloneQuarterParser extends Parser {\n priority = 120;\n\n parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case \"q\":\n case \"qq\": // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n case \"qo\":\n return match.ordinalNumber(dateString, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"qqq\":\n return (\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n })\n );\n\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"qqqqq\":\n return match.quarter(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"qqqq\":\n default:\n return (\n match.quarter(dateString, {\n width: \"wide\",\n context: \"standalone\",\n }) ||\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n\n set(date, _flags, value) {\n date.setMonth((value - 1) * 3, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n", "import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class MonthParser extends Parser {\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"L\",\n \"w\",\n \"I\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n\n priority = 110;\n\n parse(dateString, token, match) {\n const valueCallback = (value) => value - 1;\n\n switch (token) {\n // 1, 2, ..., 12\n case \"M\":\n return mapValue(\n parseNumericPattern(numericPatterns.month, dateString),\n valueCallback,\n );\n // 01, 02, ..., 12\n case \"MM\":\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n case \"Mo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"month\",\n }),\n valueCallback,\n );\n // Jan, Feb, ..., Dec\n case \"MMM\":\n return (\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // J, F, ..., D\n case \"MMMMM\":\n return match.month(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // January, February, ..., December\n case \"MMMM\":\n default:\n return (\n match.month(dateString, { width: \"wide\", context: \"formatting\" }) ||\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n date.setMonth(value, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n}\n", "import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class StandAloneMonthParser extends Parser {\n priority = 110;\n\n parse(dateString, token, match) {\n const valueCallback = (value) => value - 1;\n\n switch (token) {\n // 1, 2, ..., 12\n case \"L\":\n return mapValue(\n parseNumericPattern(numericPatterns.month, dateString),\n valueCallback,\n );\n // 01, 02, ..., 12\n case \"LL\":\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n case \"Lo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"month\",\n }),\n valueCallback,\n );\n // Jan, Feb, ..., Dec\n case \"LLL\":\n return (\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n\n // J, F, ..., D\n case \"LLLLL\":\n return match.month(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // January, February, ..., December\n case \"LLLL\":\n default:\n return (\n match.month(dateString, { width: \"wide\", context: \"standalone\" }) ||\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n date.setMonth(value, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"M\",\n \"w\",\n \"I\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n", "import { getWeek } from \"./getWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * The {@link setWeek} function options.\n */\n\n/**\n * @name setWeek\n * @category Week Helpers\n * @summary Set the local week to the given date.\n *\n * @description\n * Set the local week to the given date, saving the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param week - The week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the local week set\n *\n * @example\n * // Set the 1st week to 2 January 2005 with default options:\n * const result = setWeek(new Date(2005, 0, 2), 1)\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // Set the 1st week to 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January:\n * const result = setWeek(new Date(2005, 0, 2), 1, {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Sun Jan 4 2004 00:00:00\n */\nexport function setWeek(date, week, options) {\n const _date = toDate(date);\n const diff = getWeek(_date, options) - week;\n _date.setDate(_date.getDate() - diff * 7);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default setWeek;\n", "import { setWeek } from \"../../../setWeek.mjs\";\nimport { startOfWeek } from \"../../../startOfWeek.mjs\";\nimport { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\n// Local week of year\nexport class LocalWeekParser extends Parser {\n priority = 100;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"w\":\n return parseNumericPattern(numericPatterns.week, dateString);\n case \"wo\":\n return match.ordinalNumber(dateString, { unit: \"week\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n\n set(date, _flags, value, options) {\n return startOfWeek(setWeek(date, value, options), options);\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"t\",\n \"T\",\n ];\n}\n", "import { getISOWeek } from \"./getISOWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name setISOWeek\n * @category ISO Week Helpers\n * @summary Set the ISO week to the given date.\n *\n * @description\n * Set the ISO week to the given date, saving the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param week - The ISO week of the new date\n *\n * @returns The new date with the ISO week set\n *\n * @example\n * // Set the 53rd ISO week to 7 August 2004:\n * const result = setISOWeek(new Date(2004, 7, 7), 53)\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport function setISOWeek(date, week) {\n const _date = toDate(date);\n const diff = getISOWeek(_date) - week;\n _date.setDate(_date.getDate() - diff * 7);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default setISOWeek;\n", "import { setISOWeek } from \"../../../setISOWeek.mjs\";\nimport { startOfISOWeek } from \"../../../startOfISOWeek.mjs\";\nimport { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\n// ISO week of year\nexport class ISOWeekParser extends Parser {\n priority = 100;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"I\":\n return parseNumericPattern(numericPatterns.week, dateString);\n case \"Io\":\n return match.ordinalNumber(dateString, { unit: \"week\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n\n set(date, _flags, value) {\n return startOfISOWeek(setISOWeek(date, value));\n }\n\n incompatibleTokens = [\n \"y\",\n \"Y\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"d\",\n \"D\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n", "import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport {\n isLeapYearIndex,\n parseNDigits,\n parseNumericPattern,\n} from \"../utils.mjs\";\n\nconst DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst DAYS_IN_MONTH_LEAP_YEAR = [\n 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,\n];\n\n// Day of the month\nexport class DateParser extends Parser {\n priority = 90;\n subPriority = 1;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"d\":\n return parseNumericPattern(numericPatterns.date, dateString);\n case \"do\":\n return match.ordinalNumber(dateString, { unit: \"date\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(date, value) {\n const year = date.getFullYear();\n const isLeapYear = isLeapYearIndex(year);\n const month = date.getMonth();\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month];\n }\n }\n\n set(date, _flags, value) {\n date.setDate(value);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"w\",\n \"I\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n", "import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport {\n isLeapYearIndex,\n parseNDigits,\n parseNumericPattern,\n} from \"../utils.mjs\";\n\nexport class DayOfYearParser extends Parser {\n priority = 90;\n\n subpriority = 1;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"D\":\n case \"DD\":\n return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n case \"Do\":\n return match.ordinalNumber(dateString, { unit: \"date\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(date, value) {\n const year = date.getFullYear();\n const isLeapYear = isLeapYearIndex(year);\n if (isLeapYear) {\n return value >= 1 && value <= 366;\n } else {\n return value >= 1 && value <= 365;\n }\n }\n\n set(date, _flags, value) {\n date.setMonth(0, value);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"I\",\n \"d\",\n \"E\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n", "import { addDays } from \"./addDays.mjs\";\nimport { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link setDay} function options.\n */\n\n/**\n * @name setDay\n * @category Weekday Helpers\n * @summary Set the day of the week to the given date.\n *\n * @description\n * Set the day of the week to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param day - The day of the week of the new date\n * @param options - An object with options.\n *\n * @returns The new date with the day of the week set\n *\n * @example\n * // Set week day to Sunday, with the default weekStartsOn of Sunday:\n * const result = setDay(new Date(2014, 8, 1), 0)\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // Set week day to Sunday, with a weekStartsOn of Monday:\n * const result = setDay(new Date(2014, 8, 1), 0, { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport function setDay(date, day, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date);\n const currentDay = _date.getDay();\n\n const remainder = day % 7;\n const dayIndex = (remainder + 7) % 7;\n\n const delta = 7 - weekStartsOn;\n const diff =\n day < 0 || day > 6\n ? day - ((currentDay + delta) % 7)\n : ((dayIndex + delta) % 7) - ((currentDay + delta) % 7);\n return addDays(_date, diff);\n}\n\n// Fallback for modularized imports:\nexport default setDay;\n", "import { setDay } from \"../../../setDay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\n\n// Day of week\nexport class DayParser extends Parser {\n priority = 90;\n\n parse(dateString, token, match) {\n switch (token) {\n // Tue\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return (\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // T\n case \"EEEEE\":\n return match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"EEEEEE\":\n return (\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // Tuesday\n case \"EEEE\":\n default:\n return (\n match.day(dateString, { width: \"wide\", context: \"formatting\" }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setDay(date, value, options);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"D\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n}\n", "import { setDay } from \"../../../setDay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\n// Local day of week\nexport class LocalDayParser extends Parser {\n priority = 90;\n parse(dateString, token, match, options) {\n const valueCallback = (value) => {\n // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n const wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case \"e\":\n case \"ee\": // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n case \"eo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"day\",\n }),\n valueCallback,\n );\n // Tue\n case \"eee\":\n return (\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // T\n case \"eeeee\":\n return match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"eeeeee\":\n return (\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // Tuesday\n case \"eeee\":\n default:\n return (\n match.day(dateString, { width: \"wide\", context: \"formatting\" }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setDay(date, value, options);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"E\",\n \"i\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n", "import { setDay } from \"../../../setDay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\n// Stand-alone local day of week\nexport class StandAloneLocalDayParser extends Parser {\n priority = 90;\n\n parse(dateString, token, match, options) {\n const valueCallback = (value) => {\n // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n const wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case \"c\":\n case \"cc\": // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n case \"co\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"day\",\n }),\n valueCallback,\n );\n // Tue\n case \"ccc\":\n return (\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n\n // T\n case \"ccccc\":\n return match.day(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // Tu\n case \"cccccc\":\n return (\n match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n\n // Tuesday\n case \"cccc\":\n default:\n return (\n match.day(dateString, { width: \"wide\", context: \"standalone\" }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setDay(date, value, options);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"E\",\n \"i\",\n \"e\",\n \"t\",\n \"T\",\n ];\n}\n", "import { addDays } from \"./addDays.mjs\";\nimport { getISODay } from \"./getISODay.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name setISODay\n * @category Weekday Helpers\n * @summary Set the day of the ISO week to the given date.\n *\n * @description\n * Set the day of the ISO week to the given date.\n * ISO week starts with Monday.\n * 7 is the index of Sunday, 1 is the index of Monday etc.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param day - The day of the ISO week of the new date\n *\n * @returns The new date with the day of the ISO week set\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * const result = setISODay(new Date(2014, 8, 1), 7)\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport function setISODay(date, day) {\n const _date = toDate(date);\n const currentDay = getISODay(_date);\n const diff = day - currentDay;\n return addDays(_date, diff);\n}\n\n// Fallback for modularized imports:\nexport default setISODay;\n", "import { setISODay } from \"../../../setISODay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\n// ISO day of week\nexport class ISODayParser extends Parser {\n priority = 90;\n\n parse(dateString, token, match) {\n const valueCallback = (value) => {\n if (value === 0) {\n return 7;\n }\n return value;\n };\n\n switch (token) {\n // 2\n case \"i\":\n case \"ii\": // 02\n return parseNDigits(token.length, dateString);\n // 2nd\n case \"io\":\n return match.ordinalNumber(dateString, { unit: \"day\" });\n // Tue\n case \"iii\":\n return mapValue(\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"short\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n // T\n case \"iiiii\":\n return mapValue(\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n // Tu\n case \"iiiiii\":\n return mapValue(\n match.day(dateString, {\n width: \"short\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n // Tuesday\n case \"iiii\":\n default:\n return mapValue(\n match.day(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"short\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 7;\n }\n\n set(date, _flags, value) {\n date = setISODay(date, value);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"y\",\n \"Y\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"d\",\n \"D\",\n \"E\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n", "import { Parser } from \"../Parser.mjs\";\nimport { dayPeriodEnumToHours } from \"../utils.mjs\";\n\nexport class AMPMParser extends Parser {\n priority = 80;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"a\":\n case \"aa\":\n case \"aaa\":\n return (\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n case \"aaaaa\":\n return match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"aaaa\":\n default:\n return (\n match.dayPeriod(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n set(date, _flags, value) {\n date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"b\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n}\n", "import { Parser } from \"../Parser.mjs\";\nimport { dayPeriodEnumToHours } from \"../utils.mjs\";\n\nexport class AMPMMidnightParser extends Parser {\n priority = 80;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"b\":\n case \"bb\":\n case \"bbb\":\n return (\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n case \"bbbbb\":\n return match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"bbbb\":\n default:\n return (\n match.dayPeriod(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n set(date, _flags, value) {\n date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n}\n", "import { Parser } from \"../Parser.mjs\";\nimport { dayPeriodEnumToHours } from \"../utils.mjs\";\n\n// in the morning, in the afternoon, in the evening, at night\nexport class DayPeriodParser extends Parser {\n priority = 80;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"B\":\n case \"BB\":\n case \"BBB\":\n return (\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n case \"BBBBB\":\n return match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"BBBB\":\n default:\n return (\n match.dayPeriod(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n set(date, _flags, value) {\n date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"b\", \"t\", \"T\"];\n}\n", "import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour1to12Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"h\":\n return parseNumericPattern(numericPatterns.hour12h, dateString);\n case \"ho\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 12;\n }\n\n set(date, _flags, value) {\n const isPM = date.getHours() >= 12;\n if (isPM && value < 12) {\n date.setHours(value + 12, 0, 0, 0);\n } else if (!isPM && value === 12) {\n date.setHours(0, 0, 0, 0);\n } else {\n date.setHours(value, 0, 0, 0);\n }\n return date;\n }\n\n incompatibleTokens = [\"H\", \"K\", \"k\", \"t\", \"T\"];\n}\n", "import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour0to23Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"H\":\n return parseNumericPattern(numericPatterns.hour23h, dateString);\n case \"Ho\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 23;\n }\n\n set(date, _flags, value) {\n date.setHours(value, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"b\", \"h\", \"K\", \"k\", \"t\", \"T\"];\n}\n", "import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour0To11Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"K\":\n return parseNumericPattern(numericPatterns.hour11h, dateString);\n case \"Ko\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n const isPM = date.getHours() >= 12;\n if (isPM && value < 12) {\n date.setHours(value + 12, 0, 0, 0);\n } else {\n date.setHours(value, 0, 0, 0);\n }\n return date;\n }\n\n incompatibleTokens = [\"h\", \"H\", \"k\", \"t\", \"T\"];\n}\n", "import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour1To24Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"k\":\n return parseNumericPattern(numericPatterns.hour24h, dateString);\n case \"ko\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 24;\n }\n\n set(date, _flags, value) {\n const hours = value <= 24 ? value % 24 : value;\n date.setHours(hours, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"b\", \"h\", \"H\", \"K\", \"t\", \"T\"];\n}\n", "import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class MinuteParser extends Parser {\n priority = 60;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"m\":\n return parseNumericPattern(numericPatterns.minute, dateString);\n case \"mo\":\n return match.ordinalNumber(dateString, { unit: \"minute\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n\n set(date, _flags, value) {\n date.setMinutes(value, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"t\", \"T\"];\n}\n", "import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class SecondParser extends Parser {\n priority = 50;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"s\":\n return parseNumericPattern(numericPatterns.second, dateString);\n case \"so\":\n return match.ordinalNumber(dateString, { unit: \"second\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n\n set(date, _flags, value) {\n date.setSeconds(value, 0);\n return date;\n }\n\n incompatibleTokens = [\"t\", \"T\"];\n}\n", "import { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\nexport class FractionOfSecondParser extends Parser {\n priority = 30;\n\n parse(dateString, token) {\n const valueCallback = (value) =>\n Math.trunc(value * Math.pow(10, -token.length + 3));\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n\n set(date, _flags, value) {\n date.setMilliseconds(value);\n return date;\n }\n\n incompatibleTokens = [\"t\", \"T\"];\n}\n", "import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.mjs\";\nimport { timezonePatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseTimezonePattern } from \"../utils.mjs\";\n\n// Timezone (ISO-8601. +00:00 is `'Z'`)\nexport class ISOTimezoneWithZParser extends Parser {\n priority = 10;\n\n parse(dateString, token) {\n switch (token) {\n case \"X\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalMinutes,\n dateString,\n );\n case \"XX\":\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n case \"XXXX\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalSeconds,\n dateString,\n );\n case \"XXXXX\":\n return parseTimezonePattern(\n timezonePatterns.extendedOptionalSeconds,\n dateString,\n );\n case \"XXX\":\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n\n set(date, flags, value) {\n if (flags.timestampIsSet) return date;\n return constructFrom(\n date,\n date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,\n );\n }\n\n incompatibleTokens = [\"t\", \"T\", \"x\"];\n}\n", "import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.mjs\";\nimport { timezonePatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseTimezonePattern } from \"../utils.mjs\";\n\n// Timezone (ISO-8601)\nexport class ISOTimezoneParser extends Parser {\n priority = 10;\n\n parse(dateString, token) {\n switch (token) {\n case \"x\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalMinutes,\n dateString,\n );\n case \"xx\":\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n case \"xxxx\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalSeconds,\n dateString,\n );\n case \"xxxxx\":\n return parseTimezonePattern(\n timezonePatterns.extendedOptionalSeconds,\n dateString,\n );\n case \"xxx\":\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n\n set(date, flags, value) {\n if (flags.timestampIsSet) return date;\n return constructFrom(\n date,\n date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,\n );\n }\n\n incompatibleTokens = [\"t\", \"T\", \"X\"];\n}\n", "import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseAnyDigitsSigned } from \"../utils.mjs\";\n\nexport class TimestampSecondsParser extends Parser {\n priority = 40;\n\n parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n\n set(date, _flags, value) {\n return [constructFrom(date, value * 1000), { timestampIsSet: true }];\n }\n\n incompatibleTokens = \"*\";\n}\n", "import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseAnyDigitsSigned } from \"../utils.mjs\";\n\nexport class TimestampMillisecondsParser extends Parser {\n priority = 20;\n\n parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n\n set(date, _flags, value) {\n return [constructFrom(date, value), { timestampIsSet: true }];\n }\n\n incompatibleTokens = \"*\";\n}\n", "import { EraParser } from \"./parsers/EraParser.mjs\";\nimport { YearParser } from \"./parsers/YearParser.mjs\";\nimport { LocalWeekYearParser } from \"./parsers/LocalWeekYearParser.mjs\";\nimport { ISOWeekYearParser } from \"./parsers/ISOWeekYearParser.mjs\";\nimport { ExtendedYearParser } from \"./parsers/ExtendedYearParser.mjs\";\nimport { QuarterParser } from \"./parsers/QuarterParser.mjs\";\nimport { StandAloneQuarterParser } from \"./parsers/StandAloneQuarterParser.mjs\";\nimport { MonthParser } from \"./parsers/MonthParser.mjs\";\nimport { StandAloneMonthParser } from \"./parsers/StandAloneMonthParser.mjs\";\nimport { LocalWeekParser } from \"./parsers/LocalWeekParser.mjs\";\nimport { ISOWeekParser } from \"./parsers/ISOWeekParser.mjs\";\nimport { DateParser } from \"./parsers/DateParser.mjs\";\nimport { DayOfYearParser } from \"./parsers/DayOfYearParser.mjs\";\nimport { DayParser } from \"./parsers/DayParser.mjs\";\nimport { LocalDayParser } from \"./parsers/LocalDayParser.mjs\";\nimport { StandAloneLocalDayParser } from \"./parsers/StandAloneLocalDayParser.mjs\";\nimport { ISODayParser } from \"./parsers/ISODayParser.mjs\";\nimport { AMPMParser } from \"./parsers/AMPMParser.mjs\";\nimport { AMPMMidnightParser } from \"./parsers/AMPMMidnightParser.mjs\";\nimport { DayPeriodParser } from \"./parsers/DayPeriodParser.mjs\";\nimport { Hour1to12Parser } from \"./parsers/Hour1to12Parser.mjs\";\nimport { Hour0to23Parser } from \"./parsers/Hour0to23Parser.mjs\";\nimport { Hour0To11Parser } from \"./parsers/Hour0To11Parser.mjs\";\nimport { Hour1To24Parser } from \"./parsers/Hour1To24Parser.mjs\";\nimport { MinuteParser } from \"./parsers/MinuteParser.mjs\";\nimport { SecondParser } from \"./parsers/SecondParser.mjs\";\nimport { FractionOfSecondParser } from \"./parsers/FractionOfSecondParser.mjs\";\nimport { ISOTimezoneWithZParser } from \"./parsers/ISOTimezoneWithZParser.mjs\";\nimport { ISOTimezoneParser } from \"./parsers/ISOTimezoneParser.mjs\";\nimport { TimestampSecondsParser } from \"./parsers/TimestampSecondsParser.mjs\";\nimport { TimestampMillisecondsParser } from \"./parsers/TimestampMillisecondsParser.mjs\";\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O* | Timezone (GMT) |\n * | p | | P | |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z* | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- It's ok, we want any here\nexport const parsers = {\n G: new EraParser(),\n y: new YearParser(),\n Y: new LocalWeekYearParser(),\n R: new ISOWeekYearParser(),\n u: new ExtendedYearParser(),\n Q: new QuarterParser(),\n q: new StandAloneQuarterParser(),\n M: new MonthParser(),\n L: new StandAloneMonthParser(),\n w: new LocalWeekParser(),\n I: new ISOWeekParser(),\n d: new DateParser(),\n D: new DayOfYearParser(),\n E: new DayParser(),\n e: new LocalDayParser(),\n c: new StandAloneLocalDayParser(),\n i: new ISODayParser(),\n a: new AMPMParser(),\n b: new AMPMMidnightParser(),\n B: new DayPeriodParser(),\n h: new Hour1to12Parser(),\n H: new Hour0to23Parser(),\n K: new Hour0To11Parser(),\n k: new Hour1To24Parser(),\n m: new MinuteParser(),\n s: new SecondParser(),\n S: new FractionOfSecondParser(),\n X: new ISOTimezoneWithZParser(),\n x: new ISOTimezoneParser(),\n t: new TimestampSecondsParser(),\n T: new TimestampMillisecondsParser(),\n};\n", "import { constructFrom } from \"./constructFrom.mjs\";\nimport { getDefaultOptions } from \"./getDefaultOptions.mjs\";\nimport { defaultLocale } from \"./_lib/defaultLocale.mjs\";\nimport { toDate } from \"./toDate.mjs\";\nimport { longFormatters } from \"./_lib/format/longFormatters.mjs\";\nimport {\n isProtectedDayOfYearToken,\n isProtectedWeekYearToken,\n warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.mjs\";\nimport { parsers } from \"./parse/_lib/parsers.mjs\";\nimport { DateToSystemTimezoneSetter } from \"./parse/_lib/Setter.mjs\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { longFormatters, parsers };\n\n/**\n * The {@link parse} function options.\n */\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\n\nconst notWhitespaceRegExp = /\\S/;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | QQ | 01, 02, 03, 04 | |\n * | | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | qq | 01, 02, 03, 04 | |\n * | | | qqq | Q1, Q2, Q3, Q4 | |\n * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | | qqqqq | 1, 2, 3, 4 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\n * | | | MM | 01, 02, ..., 12 | |\n * | | | MMM | Jan, Feb, ..., Dec | |\n * | | | MMMM | January, February, ..., December | 2 |\n * | | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\n * | | | LL | 01, 02, ..., 12 | |\n * | | | LLL | Jan, Feb, ..., Dec | |\n * | | | LLLL | January, February, ..., December | 2 |\n * | | | LLLLL | J, F, ..., D | |\n * | Local week of year | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | | EEEEE | M, T, W, T, F, S, S | |\n * | | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\n * | | | ee | 02, 03, ..., 01 | |\n * | | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | | eeeee | M, T, W, T, F, S, S | |\n * | | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\n * | | | cc | 02, 03, ..., 01 | |\n * | | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | | ccccc | M, T, W, T, F, S, S | |\n * | | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | |\n * | | | BBBB | at night, in the morning, ... | 2 |\n * | | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | |\n * | | | XX | -0800, +0530, Z | |\n * | | | XXX | -08:00, +05:30, Z | |\n * | | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | |\n * | | | xx | -0800, +0530, +0000 | |\n * | | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular.\n * In `format` function, they will produce different result:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * `parse` will try to match both formatting and stand-alone units interchangably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [setISOWeekYear](https://date-fns.org/docs/setISOWeekYear)\n * and [setWeekYear](https://date-fns.org/docs/setWeekYear)).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateStr - The string to parse\n * @param formatStr - The string of tokens\n * @param referenceDate - defines values missing from the parsed dateString\n * @param options - An object with options.\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @returns The parsed date\n *\n * @throws `options.locale` must contain `match` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\nexport function parse(dateStr, formatStr, referenceDate, options) {\n const defaultOptions = getDefaultOptions();\n const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n if (formatStr === \"\") {\n if (dateStr === \"\") {\n return toDate(referenceDate);\n } else {\n return constructFrom(referenceDate, NaN);\n }\n }\n\n const subFnOptions = {\n firstWeekContainsDate,\n weekStartsOn,\n locale,\n };\n\n // If timezone isn't specified, it will be set to the system timezone\n const setters = [new DateToSystemTimezoneSetter()];\n\n const tokens = formatStr\n .match(longFormattingTokensRegExp)\n .map((substring) => {\n const firstCharacter = substring[0];\n if (firstCharacter in longFormatters) {\n const longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n return substring;\n })\n .join(\"\")\n .match(formattingTokensRegExp);\n\n const usedTokens = [];\n\n for (let token of tokens) {\n if (\n !options?.useAdditionalWeekYearTokens &&\n isProtectedWeekYearToken(token)\n ) {\n warnOrThrowProtectedError(token, formatStr, dateStr);\n }\n if (\n !options?.useAdditionalDayOfYearTokens &&\n isProtectedDayOfYearToken(token)\n ) {\n warnOrThrowProtectedError(token, formatStr, dateStr);\n }\n\n const firstCharacter = token[0];\n const parser = parsers[firstCharacter];\n if (parser) {\n const { incompatibleTokens } = parser;\n if (Array.isArray(incompatibleTokens)) {\n const incompatibleToken = usedTokens.find(\n (usedToken) =>\n incompatibleTokens.includes(usedToken.token) ||\n usedToken.token === firstCharacter,\n );\n if (incompatibleToken) {\n throw new RangeError(\n `The format string mustn't contain \\`${incompatibleToken.fullToken}\\` and \\`${token}\\` at the same time`,\n );\n }\n } else if (parser.incompatibleTokens === \"*\" && usedTokens.length > 0) {\n throw new RangeError(\n `The format string mustn't contain \\`${token}\\` and any other token at the same time`,\n );\n }\n\n usedTokens.push({ token: firstCharacter, fullToken: token });\n\n const parseResult = parser.run(\n dateStr,\n token,\n locale.match,\n subFnOptions,\n );\n\n if (!parseResult) {\n return constructFrom(referenceDate, NaN);\n }\n\n setters.push(parseResult.setter);\n\n dateStr = parseResult.rest;\n } else {\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError(\n \"Format string contains an unescaped latin alphabet character `\" +\n firstCharacter +\n \"`\",\n );\n }\n\n // Replace two single quote characters with one single quote character\n if (token === \"''\") {\n token = \"'\";\n } else if (firstCharacter === \"'\") {\n token = cleanEscapedString(token);\n }\n\n // Cut token from string, or, if string doesn't match the token, return Invalid Date\n if (dateStr.indexOf(token) === 0) {\n dateStr = dateStr.slice(token.length);\n } else {\n return constructFrom(referenceDate, NaN);\n }\n }\n }\n\n // Check if the remaining input contains something other than whitespace\n if (dateStr.length > 0 && notWhitespaceRegExp.test(dateStr)) {\n return constructFrom(referenceDate, NaN);\n }\n\n const uniquePrioritySetters = setters\n .map((setter) => setter.priority)\n .sort((a, b) => b - a)\n .filter((priority, index, array) => array.indexOf(priority) === index)\n .map((priority) =>\n setters\n .filter((setter) => setter.priority === priority)\n .sort((a, b) => b.subPriority - a.subPriority),\n )\n .map((setterArray) => setterArray[0]);\n\n let date = toDate(referenceDate);\n\n if (isNaN(date.getTime())) {\n return constructFrom(referenceDate, NaN);\n }\n\n const flags = {};\n for (const setter of uniquePrioritySetters) {\n if (!setter.validate(date, subFnOptions)) {\n return constructFrom(referenceDate, NaN);\n }\n\n const result = setter.set(date, flags, subFnOptions);\n // Result is tuple (date, flags)\n if (Array.isArray(result)) {\n date = result[0];\n Object.assign(flags, result[1]);\n // Result is date\n } else {\n date = result;\n }\n }\n\n return constructFrom(referenceDate, date);\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default parse;\n", "import { isValid } from \"./isValid.mjs\";\nimport { parse } from \"./parse.mjs\";\n\n/**\n * The {@link isMatch} function options.\n */\n\n/**\n * @name isMatch\n * @category Common Helpers\n * @summary validates the date string against given formats\n *\n * @description\n * Return the true if given date is string correct against the given format else\n * will return false.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * isMatch('23 AM', 'HH a')\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | QQ | 01, 02, 03, 04 | |\n * | | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | qq | 01, 02, 03, 04 | |\n * | | | qqq | Q1, Q2, Q3, Q4 | |\n * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | | qqqqq | 1, 2, 3, 4 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\n * | | | MM | 01, 02, ..., 12 | |\n * | | | MMM | Jan, Feb, ..., Dec | |\n * | | | MMMM | January, February, ..., December | 2 |\n * | | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\n * | | | LL | 01, 02, ..., 12 | |\n * | | | LLL | Jan, Feb, ..., Dec | |\n * | | | LLLL | January, February, ..., December | 2 |\n * | | | LLLLL | J, F, ..., D | |\n * | Local week of year | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Su | |\n * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | | EEEEE | M, T, W, T, F, S, S | |\n * | | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Su | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\n * | | | ee | 02, 03, ..., 01 | |\n * | | | eee | Mon, Tue, Wed, ..., Su | |\n * | | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | | eeeee | M, T, W, T, F, S, S | |\n * | | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\n * | | | cc | 02, 03, ..., 01 | |\n * | | | ccc | Mon, Tue, Wed, ..., Su | |\n * | | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | | ccccc | M, T, W, T, F, S, S | |\n * | | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | |\n * | | | BBBB | at night, in the morning, ... | 2 |\n * | | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | |\n * | | | XX | -0800, +0530, Z | |\n * | | | XXX | -08:00, +05:30, Z | |\n * | | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | |\n * | | | xx | -0800, +0530, +0000 | |\n * | | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular.\n * In `format` function, they will produce different result:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * `isMatch` will try to match both formatting and stand-alone units interchangably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table:\n * - for numerical units (`yyyyyyyy`) `isMatch` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `isMatch` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `isMatch('50', 'yy') //=> true`\n *\n * `isMatch('75', 'yy') //=> true`\n *\n * while `uu` will use the year as is:\n *\n * `isMatch('50', 'uu') //=> true`\n *\n * `isMatch('75', 'uu') //=> true`\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [setISOWeekYear](https://date-fns.org/docs/setISOWeekYear)\n * and [setWeekYear](https://date-fns.org/docs/setWeekYear)).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be checked in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are matched (e.g. when matching string 'January 1st' without a year),\n * the values will be taken from today's using `new Date()` date which works as a context of parsing.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateStr - The date string to verify\n * @param format - The string of tokens\n * @param options - An object with options.\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @returns Is format string a match for date string?\n *\n * @throws `options.locale` must contain `match` property\n * @throws use `yyyy` instead of `YYYY` for formatting years; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Match 11 February 2014 from middle-endian format:\n * const result = isMatch('02/11/2014', 'MM/dd/yyyy')\n * //=> true\n *\n * @example\n * // Match 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * const result = isMatch('28-a de februaro', \"do 'de' MMMM\", {\n * locale: eo\n * })\n * //=> true\n */\nexport function isMatch(dateStr, formatStr, options) {\n return isValid(parse(dateStr, formatStr, new Date(), options));\n}\n\n// Fallback for modularized imports:\nexport default isMatch;\n", "import { millisecondsInHour, millisecondsInMinute } from \"./constants.mjs\";\n\n/**\n * The {@link parseISO} function options.\n */\n\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param argument - The value to convert\n * @param options - An object with options\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport function parseISO(argument, options) {\n const additionalDigits = options?.additionalDigits ?? 2;\n const dateStrings = splitDateString(argument);\n\n let date;\n if (dateStrings.date) {\n const parseYearResult = parseYear(dateStrings.date, additionalDigits);\n date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n }\n\n if (!date || isNaN(date.getTime())) {\n return new Date(NaN);\n }\n\n const timestamp = date.getTime();\n let time = 0;\n let offset;\n\n if (dateStrings.time) {\n time = parseTime(dateStrings.time);\n if (isNaN(time)) {\n return new Date(NaN);\n }\n }\n\n if (dateStrings.timezone) {\n offset = parseTimezone(dateStrings.timezone);\n if (isNaN(offset)) {\n return new Date(NaN);\n }\n } else {\n const dirtyDate = new Date(timestamp + time);\n // JS parsed string assuming it's in UTC timezone\n // but we need it to be parsed in our timezone\n // so we use utc values to build date in our timezone.\n // Year values from 0 to 99 map to the years 1900 to 1999\n // so set year explicitly with setFullYear.\n const result = new Date(0);\n result.setFullYear(\n dirtyDate.getUTCFullYear(),\n dirtyDate.getUTCMonth(),\n dirtyDate.getUTCDate(),\n );\n result.setHours(\n dirtyDate.getUTCHours(),\n dirtyDate.getUTCMinutes(),\n dirtyDate.getUTCSeconds(),\n dirtyDate.getUTCMilliseconds(),\n );\n return result;\n }\n\n return new Date(timestamp + time + offset);\n}\n\nconst patterns = {\n dateTimeDelimiter: /[T ]/,\n timeZoneDelimiter: /[Z ]/i,\n timezone: /([Z+-].*)$/,\n};\n\nconst dateRegex =\n /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nconst timeRegex =\n /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nconst timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\n\nfunction splitDateString(dateString) {\n const dateStrings = {};\n const array = dateString.split(patterns.dateTimeDelimiter);\n let timeString;\n\n // The regex match should only return at maximum two array elements.\n // [date], [time], or [date, time].\n if (array.length > 2) {\n return dateStrings;\n }\n\n if (/:/.test(array[0])) {\n timeString = array[0];\n } else {\n dateStrings.date = array[0];\n timeString = array[1];\n if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n timeString = dateString.substr(\n dateStrings.date.length,\n dateString.length,\n );\n }\n }\n\n if (timeString) {\n const token = patterns.timezone.exec(timeString);\n if (token) {\n dateStrings.time = timeString.replace(token[1], \"\");\n dateStrings.timezone = token[1];\n } else {\n dateStrings.time = timeString;\n }\n }\n\n return dateStrings;\n}\n\nfunction parseYear(dateString, additionalDigits) {\n const regex = new RegExp(\n \"^(?:(\\\\d{4}|[+-]\\\\d{\" +\n (4 + additionalDigits) +\n \"})|(\\\\d{2}|[+-]\\\\d{\" +\n (2 + additionalDigits) +\n \"})$)\",\n );\n\n const captures = dateString.match(regex);\n // Invalid ISO-formatted year\n if (!captures) return { year: NaN, restDateString: \"\" };\n\n const year = captures[1] ? parseInt(captures[1]) : null;\n const century = captures[2] ? parseInt(captures[2]) : null;\n\n // either year or century is null, not both\n return {\n year: century === null ? year : century * 100,\n restDateString: dateString.slice((captures[1] || captures[2]).length),\n };\n}\n\nfunction parseDate(dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) return new Date(NaN);\n\n const captures = dateString.match(dateRegex);\n // Invalid ISO-formatted string\n if (!captures) return new Date(NaN);\n\n const isWeekDate = !!captures[4];\n const dayOfYear = parseDateUnit(captures[1]);\n const month = parseDateUnit(captures[2]) - 1;\n const day = parseDateUnit(captures[3]);\n const week = parseDateUnit(captures[4]);\n const dayOfWeek = parseDateUnit(captures[5]) - 1;\n\n if (isWeekDate) {\n if (!validateWeekDate(year, week, dayOfWeek)) {\n return new Date(NaN);\n }\n return dayOfISOWeekYear(year, week, dayOfWeek);\n } else {\n const date = new Date(0);\n if (\n !validateDate(year, month, day) ||\n !validateDayOfYearDate(year, dayOfYear)\n ) {\n return new Date(NaN);\n }\n date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n return date;\n }\n}\n\nfunction parseDateUnit(value) {\n return value ? parseInt(value) : 1;\n}\n\nfunction parseTime(timeString) {\n const captures = timeString.match(timeRegex);\n if (!captures) return NaN; // Invalid ISO-formatted time\n\n const hours = parseTimeUnit(captures[1]);\n const minutes = parseTimeUnit(captures[2]);\n const seconds = parseTimeUnit(captures[3]);\n\n if (!validateTime(hours, minutes, seconds)) {\n return NaN;\n }\n\n return (\n hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000\n );\n}\n\nfunction parseTimeUnit(value) {\n return (value && parseFloat(value.replace(\",\", \".\"))) || 0;\n}\n\nfunction parseTimezone(timezoneString) {\n if (timezoneString === \"Z\") return 0;\n\n const captures = timezoneString.match(timezoneRegex);\n if (!captures) return 0;\n\n const sign = captures[1] === \"+\" ? -1 : 1;\n const hours = parseInt(captures[2]);\n const minutes = (captures[3] && parseInt(captures[3])) || 0;\n\n if (!validateTimezone(hours, minutes)) {\n return NaN;\n }\n\n return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n const date = new Date(0);\n date.setUTCFullYear(isoWeekYear, 0, 4);\n const fourthOfJanuaryDay = date.getUTCDay() || 7;\n const diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nconst daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n\nfunction validateDate(year, month, date) {\n return (\n month >= 0 &&\n month <= 11 &&\n date >= 1 &&\n date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28))\n );\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\n\nfunction validateWeekDate(_year, week, day) {\n return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\n\nfunction validateTime(hours, minutes, seconds) {\n if (hours === 24) {\n return minutes === 0 && seconds === 0;\n }\n\n return (\n seconds >= 0 &&\n seconds < 60 &&\n minutes >= 0 &&\n minutes < 60 &&\n hours >= 0 &&\n hours < 25\n );\n}\n\nfunction validateTimezone(_hours, minutes) {\n return minutes >= 0 && minutes <= 59;\n}\n\n// Fallback for modularized imports:\nexport default parseISO;\n", "import { isMatch, isValid, parseISO } from 'date-fns';\n\nexport const isNumeric = (value: any) =>\n !isNaN(parseFloat(value)) && isFinite(value);\nexport const valuesAreNumeric = (values: any[]) => values.every(isNumeric);\n\nexport const isInteger = (value: any) =>\n Number.isInteger(value) || !isNaN(parseInt(value));\nexport const valuesAreInteger = (values: any[]) => values.every(isInteger);\n\nexport const isBoolean = (value: any) => typeof value === 'boolean';\nexport const valuesAreBoolean = (values: any[]) => values.every(isBoolean);\n\nexport const isBooleanString = (value: any) =>\n ['true', 'false'].includes(value.toString().toLowerCase());\nexport const valuesAreBooleanString = (values: any[]) =>\n values.every(isBooleanString);\n\nexport const isString = (value: any) => typeof value === 'string';\nexport const valuesAreString = (values: any[]) => values.every(isString);\n\nconst HtmlRegexp = /<([A-Z][A-Z0-9]*)\\b[^>]*>(.*?)<\\/\\1>/i;\nexport const isHtml = (value: any) => !value || HtmlRegexp.test(value);\nexport const valuesAreHtml = (values: any[]) => values.every(isHtml);\n\nconst UrlRegexp = /http(s*):\\/\\/.*/i;\nexport const isUrl = (value: any) => !value || UrlRegexp.test(value);\nexport const valuesAreUrl = (values: any[]) => values.every(isUrl);\n\nconst ImageUrlRegexp =\n /http(s*):\\/\\/.*\\.(jpeg|jpg|jfif|pjpeg|pjp|png|svg|gif|webp|apng|bmp|ico|cur|tif|tiff)/i;\nexport const isImageUrl = (value: any) => !value || ImageUrlRegexp.test(value);\nexport const valuesAreImageUrl = (values: any[]) => values.every(isImageUrl);\n\n// This is a very simple regex to find emails\n// It is NOT meant to validate emails as the spec is way more complicated but is\n// enough for our inference needs\nconst EmailRegexp = /@{1}/;\nexport const isEmail = (value: any) => !value || EmailRegexp.test(value);\nexport const valuesAreEmail = (values: any[]) => values.every(isEmail);\n\nexport const isArray = (value: any) => Array.isArray(value);\nexport const valuesAreArray = (values: any[]) => values.every(isArray);\n\nexport const isDate = (value: any) => !value || value instanceof Date;\nexport const valuesAreDate = (values: any[]) => values.every(isDate);\n\nexport const isDateString = (value: any) =>\n !value ||\n (typeof value === 'string' &&\n (isMatch(value, 'MM/dd/yyyy') ||\n isMatch(value, 'MM/dd/yy') ||\n isValid(parseISO(value))));\n\nexport const valuesAreDateString = (values: any[]) =>\n values.every(isDateString);\n\nexport const isObject = (value: any) =>\n Object.prototype.toString.call(value) === '[object Object]';\nexport const valuesAreObject = (values: any[]) => values.every(isObject);\n", "import inferElementFromValues from './inferElementFromValues';\nimport getValuesFromRecords from './getValuesFromRecords';\nimport { InferredTypeMap } from './types';\nimport InferredElement from './InferredElement';\n\n/**\n * Get a list of React-admin field components from a list of records\n *\n * @example\n * const records = [\n * {\n * \"id\": 1,\n * \"title\": \"Lorem Ipsum\",\n * \"views\": 254,\n * \"user_id\": 123,\n * },\n * {\n * \"id\": 2,\n * \"title\": \"Sic Dolor amet\",\n * \"user_id\": 456,\n * },\n * ];\n * const types = {\n * id: NumberField,\n * string: TextField,\n * number: NumberField,\n * reference: ReferenceField\n * };\n * const components = getElementsFromRecords(records, types);\n * // [\n * // <NumberField source=\"id\" />,\n * // <TextField source=\"title\" />,\n * // <NumberField source=\"views\" />,\n * // <ReferenceField source=\"user_id\" reference=\"users\"><NumberField source=\"id\" /></ReferenceField>,\n * // ];\n */\nexport default (records: any[], types: InferredTypeMap) => {\n const fieldValues = getValuesFromRecords(records);\n return Object.keys(fieldValues)\n .reduce(\n (fields, fieldName) =>\n fields.concat(\n inferElementFromValues(\n fieldName,\n fieldValues[fieldName],\n types\n )\n ),\n [] as InferredElement[]\n )\n .filter(inferredElement => inferredElement.isDefined());\n};\n", "import getValuesFromRecords from './getValuesFromRecords';\n\nimport {\n isObject,\n valuesAreArray,\n valuesAreBoolean,\n valuesAreDate,\n valuesAreDateString,\n valuesAreHtml,\n valuesAreInteger,\n valuesAreNumeric,\n valuesAreObject,\n valuesAreString,\n valuesAreUrl,\n valuesAreImageUrl,\n valuesAreEmail,\n} from './assertions';\nimport { pluralize } from 'inflection';\n\nexport const InferenceTypes = [\n 'array',\n 'boolean',\n 'date',\n 'email',\n 'id',\n 'image',\n 'number',\n 'reference',\n 'referenceChild',\n 'referenceArray',\n 'referenceArrayChild',\n 'richText',\n 'string',\n 'url',\n 'object',\n] as const;\n\nexport type PossibleInferredElementTypes = (typeof InferenceTypes)[number];\n\nexport interface InferredElementDescription {\n type: PossibleInferredElementTypes;\n props?: any;\n children?: InferredElementDescription | InferredElementDescription[];\n}\n\n/**\n * Guesses an element type based on an array of values\n *\n * @example\n * inferElementFromValues(\n * 'address',\n * ['2 Baker Street', '1 Downing street'],\n * );\n * // { type: 'string', props: { source: 'address' } }\n *\n * @param {string} name Property name, e.g. 'date_of_birth'\n * @param {any[]} values an array of values from which to determine the type, e.g. [12, 34.4, 43]\n */\nexport const inferTypeFromValues = (\n name,\n values = []\n): InferredElementDescription => {\n if (name === 'id') {\n return { type: 'id', props: { source: name } };\n }\n if (name.substr(name.length - 3) === '_id') {\n return {\n type: 'reference',\n props: {\n source: name,\n reference: pluralize(name.substr(0, name.length - 3)),\n },\n children: { type: 'referenceChild' },\n };\n }\n if (name.substr(name.length - 2) === 'Id') {\n return {\n type: 'reference',\n props: {\n source: name,\n reference: pluralize(name.substr(0, name.length - 2)),\n },\n children: { type: 'referenceChild' },\n };\n }\n if (name.substr(name.length - 4) === '_ids') {\n return {\n type: 'referenceArray',\n props: {\n source: name,\n reference: pluralize(name.substr(0, name.length - 4)),\n },\n children: { type: 'referenceArrayChild' },\n };\n }\n if (name.substr(name.length - 3) === 'Ids') {\n return {\n type: 'referenceArray',\n props: {\n source: name,\n reference: pluralize(name.substr(0, name.length - 3)),\n },\n children: { type: 'referenceArrayChild' },\n };\n }\n if (values.length === 0) {\n if (name === 'email') {\n return { type: 'email', props: { source: name } };\n }\n if (name === 'url') {\n return { type: 'url', props: { source: name } };\n }\n // FIXME introspect further using name\n return { type: 'string', props: { source: name } };\n }\n if (valuesAreArray(values)) {\n if (isObject(values[0][0])) {\n const leafValues = getValuesFromRecords(\n values.reduce((acc, vals) => acc.concat(vals), [])\n );\n // FIXME bad visual representation\n return {\n type: 'array',\n props: { source: name },\n children: Object.keys(leafValues).map(leafName =>\n inferTypeFromValues(leafName, leafValues[leafName])\n ),\n };\n }\n // FIXME introspect further\n return { type: 'string', props: { source: name } };\n }\n if (valuesAreBoolean(values)) {\n return { type: 'boolean', props: { source: name } };\n }\n if (valuesAreDate(values)) {\n return { type: 'date', props: { source: name } };\n }\n if (valuesAreString(values)) {\n if (name === 'email' || valuesAreEmail(values)) {\n return { type: 'email', props: { source: name } };\n }\n if (name === 'url' || valuesAreUrl(values)) {\n if (valuesAreImageUrl(values)) {\n return { type: 'image', props: { source: name } };\n }\n return { type: 'url', props: { source: name } };\n }\n if (valuesAreDateString(values)) {\n return { type: 'date', props: { source: name } };\n }\n if (valuesAreHtml(values)) {\n return { type: 'richText', props: { source: name } };\n }\n if (valuesAreInteger(values) || valuesAreNumeric(values)) {\n return { type: 'number', props: { source: name } };\n }\n return { type: 'string', props: { source: name } };\n }\n if (valuesAreInteger(values) || valuesAreNumeric(values)) {\n return { type: 'number', props: { source: name } };\n }\n if (valuesAreObject(values)) {\n /// Arbitrarily, choose the first prop of the first object\n const propName = Object.keys(values[0]).shift();\n if (!propName) {\n return { type: 'object', props: { source: name } };\n }\n const leafValues = values.map(v => v[propName]);\n return inferTypeFromValues(`${name}.${propName}`, leafValues);\n }\n return { type: 'string', props: { source: name } };\n};\n", "import { ComponentType, ReactElement, ReactNode } from 'react';\nimport { FieldPath } from 'react-hook-form';\nimport { WithPermissionsChildrenParams } from './auth/WithPermissions';\nimport { AuthActionType } from './auth/types';\n\n/**\n * data types\n */\n\nexport type Identifier = string | number;\n\nexport interface RaRecord<IdentifierType extends Identifier = Identifier>\n extends Record<string, any> {\n id: IdentifierType;\n}\n\nexport interface SortPayload {\n field: string;\n order: 'ASC' | 'DESC';\n}\nexport interface FilterPayload {\n [k: string]: any;\n}\nexport interface PaginationPayload {\n page: number;\n perPage: number;\n}\nexport type ValidUntil = Date;\n/**\n * i18nProvider types\n */\n\nexport const I18N_TRANSLATE = 'I18N_TRANSLATE';\nexport const I18N_CHANGE_LOCALE = 'I18N_CHANGE_LOCALE';\n\nexport type Translate = (key: string, options?: any) => string;\n\nexport type Locale = {\n locale: string;\n name: string;\n};\n\nexport type I18nProvider = {\n translate: Translate;\n changeLocale: (locale: string, options?: any) => Promise<void>;\n getLocale: () => string;\n getLocales?: () => Locale[];\n [key: string]: any;\n};\n\nexport interface UserIdentity {\n id: Identifier;\n fullName?: string;\n avatar?: string;\n [key: string]: any;\n}\n\n/**\n * authProvider types\n */\nexport type AuthProvider = {\n login: (\n params: any\n ) => Promise<{ redirectTo?: string | boolean } | void | any>;\n logout: (params: any) => Promise<void | false | string>;\n checkAuth: (params: any & QueryFunctionContext) => Promise<void>;\n checkError: (error: any) => Promise<void>;\n getIdentity?: (params?: QueryFunctionContext) => Promise<UserIdentity>;\n getPermissions?: (params: any & QueryFunctionContext) => Promise<any>;\n handleCallback?: (\n params?: QueryFunctionContext\n ) => Promise<AuthRedirectResult | void | any>;\n canAccess?: <RecordType extends Record<string, any> = Record<string, any>>(\n params: QueryFunctionContext & {\n action: string;\n resource: string;\n record?: RecordType;\n }\n ) => Promise<boolean>;\n [key: string]: any;\n supportAbortSignal?: boolean;\n};\n\nexport type AuthRedirectResult = {\n redirectTo?: string | false;\n logoutOnFailure?: boolean;\n};\n\nexport type LegacyAuthProvider = (\n type: AuthActionType,\n params?: any\n) => Promise<any>;\n\n/**\n * dataProvider types\n */\n\nexport type DataProvider<ResourceType extends string = string> = {\n getList: <RecordType extends RaRecord = any>(\n resource: ResourceType,\n params: GetListParams & QueryFunctionContext\n ) => Promise<GetListResult<RecordType>>;\n\n getOne: <RecordType extends RaRecord = any>(\n resource: ResourceType,\n params: GetOneParams<RecordType> & QueryFunctionContext\n ) => Promise<GetOneResult<RecordType>>;\n\n getMany: <RecordType extends RaRecord = any>(\n resource: ResourceType,\n params: GetManyParams<RecordType> & QueryFunctionContext\n ) => Promise<GetManyResult<RecordType>>;\n\n getManyReference: <RecordType extends RaRecord = any>(\n resource: ResourceType,\n params: GetManyReferenceParams & QueryFunctionContext\n ) => Promise<GetManyReferenceResult<RecordType>>;\n\n update: <RecordType extends RaRecord = any>(\n resource: ResourceType,\n params: UpdateParams\n ) => Promise<UpdateResult<RecordType>>;\n\n updateMany: <RecordType extends RaRecord = any>(\n resource: ResourceType,\n params: UpdateManyParams\n ) => Promise<UpdateManyResult<RecordType>>;\n\n create: <\n RecordType extends Omit<RaRecord, 'id'> = any,\n ResultRecordType extends RaRecord = RecordType & { id: Identifier },\n >(\n resource: ResourceType,\n params: CreateParams\n ) => Promise<CreateResult<ResultRecordType>>;\n\n delete: <RecordType extends RaRecord = any>(\n resource: ResourceType,\n params: DeleteParams<RecordType>\n ) => Promise<DeleteResult<RecordType>>;\n\n deleteMany: <RecordType extends RaRecord = any>(\n resource: ResourceType,\n params: DeleteManyParams<RecordType>\n ) => Promise<DeleteManyResult<RecordType>>;\n\n [key: string]: any;\n supportAbortSignal?: boolean;\n};\n\nexport interface QueryFunctionContext {\n signal?: AbortSignal;\n}\n\nexport interface GetListParams {\n pagination?: PaginationPayload;\n sort?: SortPayload;\n filter?: any;\n meta?: any;\n signal?: AbortSignal;\n}\nexport interface GetListResult<RecordType extends RaRecord = any> {\n data: RecordType[];\n total?: number;\n pageInfo?: {\n hasNextPage?: boolean;\n hasPreviousPage?: boolean;\n };\n meta?: any;\n}\n\nexport interface GetInfiniteListResult<RecordType extends RaRecord = any>\n extends GetListResult<RecordType> {\n pageParam: number;\n}\nexport interface GetOneParams<RecordType extends RaRecord = any> {\n id: RecordType['id'];\n meta?: any;\n signal?: AbortSignal;\n}\nexport interface GetOneResult<RecordType extends RaRecord = any> {\n data: RecordType;\n meta?: any;\n}\n\nexport interface GetManyParams<RecordType extends RaRecord = any> {\n ids: RecordType['id'][];\n meta?: any;\n signal?: AbortSignal;\n}\nexport interface GetManyResult<RecordType extends RaRecord = any> {\n data: RecordType[];\n meta?: any;\n}\n\nexport interface GetManyReferenceParams {\n target: string;\n id: Identifier;\n pagination: PaginationPayload;\n sort: SortPayload;\n filter: any;\n meta?: any;\n signal?: AbortSignal;\n}\nexport interface GetManyReferenceResult<RecordType extends RaRecord = any> {\n data: RecordType[];\n total?: number;\n pageInfo?: {\n hasNextPage?: boolean;\n hasPreviousPage?: boolean;\n };\n meta?: any;\n}\n\nexport interface UpdateParams<RecordType extends RaRecord = any> {\n id: RecordType['id'];\n data: Partial<RecordType>;\n previousData: RecordType;\n meta?: any;\n}\nexport interface UpdateResult<RecordType extends RaRecord = any> {\n data: RecordType;\n meta?: any;\n}\n\nexport interface UpdateManyParams<T = any> {\n ids: Identifier[];\n data: Partial<T>;\n meta?: any;\n}\nexport interface UpdateManyResult<RecordType extends RaRecord = any> {\n data?: RecordType['id'][];\n meta?: any;\n}\n\nexport interface CreateParams<T = any> {\n data: Partial<T>;\n meta?: any;\n}\nexport interface CreateResult<RecordType extends RaRecord = any> {\n data: RecordType;\n meta?: any;\n}\n\nexport interface DeleteParams<RecordType extends RaRecord = any> {\n id: RecordType['id'];\n previousData?: RecordType;\n meta?: any;\n}\nexport interface DeleteResult<RecordType extends RaRecord = any> {\n data: RecordType;\n meta?: any;\n}\n\nexport interface DeleteManyParams<RecordType extends RaRecord = any> {\n ids: RecordType['id'][];\n meta?: any;\n}\nexport interface DeleteManyResult<RecordType extends RaRecord = any> {\n data?: RecordType['id'][];\n meta?: any;\n}\n\nexport type DataProviderResult<RecordType extends RaRecord = any> =\n | CreateResult<RecordType>\n | DeleteResult<RecordType>\n | DeleteManyResult\n | GetListResult<RecordType>\n | GetManyResult<RecordType>\n | GetManyReferenceResult<RecordType>\n | GetOneResult<RecordType>\n | UpdateResult<RecordType>\n | UpdateManyResult;\n\nexport type MutationMode = 'pessimistic' | 'optimistic' | 'undoable';\nexport type OnSuccess = (\n response?: any,\n variables?: any,\n context?: any\n) => void;\n\nexport type OnError = (error?: any, variables?: any, context?: any) => void;\n\nexport type TransformData = (\n data: any,\n options?: { previousData: any }\n) => any | Promise<any>;\n\nexport interface UseDataProviderOptions {\n action?: string;\n fetch?: string;\n meta?: object;\n mutationMode?: MutationMode;\n onSuccess?: OnSuccess;\n onError?: OnError;\n enabled?: boolean;\n}\n\nexport type LegacyDataProvider = (\n type: string,\n resource: string,\n params: any\n) => Promise<any>;\n\nexport type RecordToStringFunction = (record: any) => string;\n\nexport interface ResourceDefinition<OptionsType extends ResourceOptions = any> {\n readonly name: string;\n readonly options?: OptionsType;\n readonly hasList?: boolean;\n readonly hasEdit?: boolean;\n readonly hasShow?: boolean;\n readonly hasCreate?: boolean;\n readonly icon?: any;\n readonly recordRepresentation?:\n | ReactElement\n | RecordToStringFunction\n | string;\n}\n\n/**\n * Misc types\n */\n\nexport type Dispatch<T> = T extends (...args: infer A) => any\n ? (...args: A) => void\n : never;\n\nexport type ResourceElement = ReactElement<ResourceProps>;\nexport type RenderResourcesFunction = (permissions: any) =>\n | ReactNode // (permissions) => <><Resource /><Resource /><Resource /></>\n | Promise<ReactNode> // (permissions) => fetch().then(() => <><Resource /><Resource /><Resource /></>)\n | ResourceElement[] // // (permissions) => [<Resource />, <Resource />, <Resource />]\n | Promise<ResourceElement[]>; // (permissions) => fetch().then(() => [<Resource />, <Resource />, <Resource />])\nexport type AdminChildren =\n | RenderResourcesFunction\n | Iterable<ReactNode | RenderResourcesFunction>\n | ReactNode;\n\nexport type TitleComponent = string | ReactElement<any>;\nexport type CatchAllComponent = ComponentType<{ title?: TitleComponent }>;\n\nexport type LoginComponent = ComponentType<{}> | ReactElement<any>;\nexport type DashboardComponent = ComponentType<WithPermissionsChildrenParams>;\n\nexport interface CoreLayoutProps {\n children: ReactNode;\n}\n\nexport type LayoutComponent = ComponentType<CoreLayoutProps>;\nexport type LoadingComponent = ComponentType<{\n loadingPrimary?: string;\n loadingSecondary?: string;\n}>;\n\nexport interface ResourceComponentInjectedProps {\n permissions?: any;\n resource?: string;\n options?: any;\n hasList?: boolean;\n hasEdit?: boolean;\n hasShow?: boolean;\n hasCreate?: boolean;\n}\n\nexport interface ResourceOptions {\n label?: string;\n [key: string]: any;\n}\n\nexport interface ResourceProps {\n intent?: 'route' | 'registration';\n name: string;\n list?: ComponentType<any> | ReactElement;\n create?: ComponentType<any> | ReactElement;\n edit?: ComponentType<any> | ReactElement;\n show?: ComponentType<any> | ReactElement;\n hasCreate?: boolean;\n hasEdit?: boolean;\n hasShow?: boolean;\n icon?: ComponentType<any>;\n recordRepresentation?: ReactElement | RecordToStringFunction | string;\n options?: ResourceOptions;\n children?: ReactNode;\n}\n\nexport type Exporter<RecordType extends RaRecord = any> = (\n data: RecordType[],\n fetchRelatedRecords: FetchRelatedRecords,\n dataProvider: DataProvider,\n resource?: string\n) => void | Promise<void>;\n\nexport type FetchRelatedRecords = <RecordType = any>(\n data: any[],\n field: string,\n resource: string\n) => Promise<{ [key: Identifier]: RecordType }>;\n\nexport type SetOnSave = (\n onSave?: (values: object, redirect: any) => void\n) => void;\n\nexport type FormFunctions = {\n setOnSave?: SetOnSave;\n};\n\n// Type for a string that accept one of the known values but also any other string\n// Useful for IDE autocompletion without preventing custom values\nexport type HintedString<KnownValues extends string> = AnyString | KnownValues;\n\n// Re-export react-hook-form implementation of FieldPath that returns all possible paths of an object\n// This will allow us to either include the FieldPath implementation from react-hook-form or replace it with our own\n// should we move away from react-hook-form\n// type Post = { title: string; author: { name: string; }; tags: { id: string; name: string} };\n// => Valid paths are \"title\" | \"author\" | \"author.name\" | \"tags.id\" | \"tags.name\"\nexport type RecordValues = Record<string, any>;\nexport type RecordPath<TRecordValues extends RecordValues> =\n FieldPath<TRecordValues>;\n\n// Returns the union of all possible paths of a type if it is provided, otherwise returns a string\n// Useful for props such as \"source\" in react-admin components\nexport type ExtractRecordPaths<T extends RecordValues> =\n // Trick that allows to check whether T was provided\n [T] extends [never] ? string : RecordPath<T>;\n\nexport type AnyString = string & {};\n"],
"mappings": "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A,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA,MAGA;AAAA;AAAA,MAEA;AAAA;AAAA;AAAA,MAGA;AAAA;AAAA,MAEA;AAAA;AAAA,MAEA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA,MAGA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA;AAAA;AAAA,MAGA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA;AAAA;AAAA;AAAA,MAIA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA,MAGA;AAAA,MACA;AAAA;AAAA;AAAA,MAGA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAA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",
"names": ["parse", "serialize", "decode", "max", "min", "isDate", "value", "parse", "cookies", "splitCookiesString", "isObject", "set", "unset", "data", "Map", "data", "data", "othValue", "Uint8Array", "set", "Symbol", "Uint8Array", "isArray", "Buffer", "isArray", "transform", "isFunction", "Promise", "Set", "WeakMap", "Map", "Promise", "Set", "WeakMap", "isArray", "isEqual", "Buffer", "Uint8Array", "isObject", "isPlainObject", "isObject", "isArray", "isFunction", "isObject", "isPlainObject", "isObject", "identity", "isObject", "merge", "Symbol", "isArray", "isObject", "key", "cloneDeep", "isObject", "isObject", "debounce", "decode", "match", "isNullOrUndefined", "encode", "isArray", "decode", "hash", "parse", "EventEmitter", "noop", "Set", "noop", "set", "union", "baseGet", "isArray", "pick", "Handler", "number", "Parser", "parse", "fillGaps", "getHeaderIndex", "fillRows", "fillAndPush", "newRow", "get", "require_dist", "Parser", "defaults", "pluralize", "inflect", "humanize", "transform", "regex", "import_react", "import_react", "data", "max", "_a", "_a", "_cleanup", "_setup", "data", "_a", "_a", "_a", "data", "_b", "_c", "_a", "_a", "_retryer", "getDefaultState", "dispatch_fn", "data", "_a", "_a", "data", "_b", "_a", "_mutationCache", "_defaultOptions", "data", "defaults", "_a", "_client", "data", "_a", "MutationObserver", "_a", "_client", "_currentResult", "notify_fn", "getDefaultState", "React", "React", "React", "import_jsx_runtime", "React", "noop", "React", "_a", "noop", "React", "React", "React", "React", "MutationObserver", "noop", "import_react", "React3", "React", "React2", "React10", "React9", "React4", "React8", "React7", "React5", "React6", "React11", "__privateGet", "__privateAdd", "hash", "message", "__privateAdd", "__privateGet", "match", "_a", "required", "match", "memo2", "hash", "flushSync", "_a", "match", "match", "_a", "message", "hash", "_a", "match", "message", "_a", "message", "flushSync", "hash", "message", "match", "_a", "set", "_a", "match", "React", "React2", "_a", "LocalStorageShim", "get", "set", "unset", "data", "isEmpty", "import_react", "React", "import_react", "_a", "React", "import_react", "import_react", "_a", "import_react", "import_isEqual", "React", "import_react", "data", "React", "import_get", "React", "import_react", "import_react", "import_react", "import_react", "React", "import_react", "_a", "notifications", "import_react", "import_react", "import_react", "message", "_a", "_a", "key", "_a", "message", "lodashGet", "import_react", "React", "_a", "_a", "merge", "__spreadArray", "import_react", "import_react", "import_react", "_a", "_a", "import_react", "import_set", "import_get", "_a", "get", "set", "cloneDeep", "__spreadArray", "acc", "import_react", "import_react", "import_react", "React", "React", "import_react", "React", "React", "import_react", "_a", "_a", "Router", "import_react", "_a", "debounce", "_a", "debounce", "import_react", "import_react", "_a", "import_react", "import_react", "import_react", "import_react", "React", "import_react", "_a", "createPath", "_a", "import_react", "import_react", "React", "import_react", "_a", "isEqual", "_b", "__rest", "__assign", "createPath", "__awaiter", "_a", "import_react", "createPath", "data", "__assign", "_a", "import_react", "import_react", "_a", "React", "_a", "__rest", "__assign", "__spreadArray", "import_react", "HttpError", "message", "__assign", "_a", "isArray", "isObject", "__spreadArray", "import_index", "EventEmitter", "_a", "__spreadArray", "__awaiter", "__assign", "__assign", "_a", "import_react", "import_react", "__awaiter", "_a", "_a", "data", "_a", "import_react", "_a", "import_react", "React", "_a", "import_react", "import_react", "_a", "noop", "queryOptions", "__rest", "__assign", "data", "import_react", "_a", "noop", "queryOptions", "__rest", "__assign", "data", "meta", "import_react", "_a", "noop", "queryOptions", "__rest", "__assign", "data", "import_react", "_a", "noop", "queryOptions", "__rest", "__assign", "__spreadArray", "ids", "union", "meta", "signal", "data", "import_react", "_a", "noop", "queryOptions", "__rest", "__assign", "data", "meta", "_b", "import_react", "import_debounce", "import_isEqual", "_a", "__assign", "isEqual", "debounce", "import_react", "import_set", "__assign", "_a", "_a", "__assign", "set", "_a", "_a", "sort", "import_react", "__assign", "_a", "React", "import_react", "_a", "__rest", "redirect", "__assign", "import_react", "_a", "__rest", "redirect", "__assign", "React", "import_react", "import_react", "React", "_a", "import_react", "pick", "import_react", "import_react", "__spreadArray", "_i", "import_react", "_a", "transform", "_a", "redirect", "__rest", "__assign", "data", "__awaiter", "_b", "React", "import_react", "_a", "__assign", "_a", "__rest", "_a", "__rest", "import_react", "React", "import_react", "_a", "queryOptions", "transform", "redirect", "__rest", "__assign", "refetch", "data", "__awaiter", "error", "_b", "React", "React", "_a", "React", "_a", "React", "import_react", "_a", "_a", "__rest", "_a", "__rest", "import_react", "React", "import_react", "import_react", "_a", "__rest", "data", "refetch", "queryOptions", "__assign", "import_get", "React", "import_react", "data", "jsonExport", "import_react", "data", "_a", "import_react", "_a", "__spreadArray", "ids", "import_react", "import_query_string", "import_debounce", "import_react", "import_isEqual", "initialState", "_a", "isEqual", "timer", "_a", "debounce", "defaultSort", "__assign", "__spreadArray", "sort", "lodashDebounce", "_a", "queryOptions", "__rest", "__assign", "_a", "debounce", "queryOptions", "__rest", "__assign", "error", "data", "hasNextPage", "hasPreviousPage", "refetch", "__spreadArray", "React", "import_react", "import_react", "import_pick", "pick", "import_react", "import_pick", "pick", "import_react", "import_pick", "pick", "_a", "import_react", "_a", "__rest", "React", "import_react", "_a", "debounce", "queryOptions", "defaultSort", "__rest", "__assign", "error", "data", "refetch", "_a", "__rest", "_a", "__rest", "import_react", "_a", "__spreadArray", "import_react", "import_react", "import_get", "import_isEqual", "data", "defaultFilter", "sort", "_a", "_b", "__rest", "__assign", "displayedFilters", "isEqual", "get", "import_react", "import_react", "defaults", "_a", "data", "refetch", "import_react", "import_react", "import_react", "import_react", "_a", "import_react", "_a", "_a", "defaultFilter", "_a", "queryOptions", "get", "__rest", "__assign", "error", "data", "refetch", "import_react", "import_get", "import_isEqual", "import_debounce", "debounce", "defaultFilter", "queryOptions", "_a", "__rest", "sort", "_b", "__assign", "lodashDebounce", "displayedFilters", "isEqual", "get", "error", "data", "refetch", "_c", "_d", "meta", "_f", "_e", "import_get", "_a", "queryOptions", "__rest", "get", "__assign", "error", "data", "refetch", "_a", "choices", "import_react", "isObject", "isPlainObject", "data", "isArray", "get", "result", "set", "React", "field", "message", "name", "value", "message", "get", "isObject", "set", "required", "maxLength", "minLength", "min", "max", "message", "isRadioOrCheckbox", "isEmpty", "unset", "isObject", "_observers", "isObject", "data", "isCheckBox", "get", "set", "unset", "timer", "debounce", "isValid", "getValues", "name", "message", "React", "import_react", "import_debounce", "_a", "defaultSort", "debounce", "defaultParams", "getQuery", "sort", "emptyObject", "lodashDebounce", "filter", "getQuery", "_a", "hasCustomParams", "__assign", "getNumberOrDefault", "emptyObject", "defaultSort", "defaultParams", "debounce", "queryOptions", "getValues", "_a", "__rest", "__assign", "refetch", "__spreadArray", "import_react", "debounce", "_a", "queryOptions", "__rest", "__assign", "__spreadArray", "refetch", "import_react", "import_react", "React", "_a", "import_react", "choices", "_a", "data", "__rest", "_b", "_c", "_d", "React", "import_react", "import_get", "_a", "get", "React", "import_react", "React", "import_react", "import_react", "_a", "__spreadArray", "import_react", "_a", "_a", "import_react", "import_merge", "import_merge", "merge", "data", "__awaiter", "_a", "isEmptyObject", "__assign", "errors", "_a", "import_react", "_a", "import_react", "import_query_string", "import_isEqual", "_a", "isEqual", "_a", "sanitizeEmptyValues", "__rest", "__assign", "merge", "__awaiter", "Form", "_a", "__assign", "React", "import_get", "getValues", "__assign", "__assign", "get", "import_react", "React", "import_react", "import_react", "_a", "import_react", "import_get", "import_isEqual", "_a", "get", "isEqual", "import_react", "import_react", "import_get", "_a", "getValues", "get", "import_react", "import_get", "_a", "message", "__assign", "import_react", "import_merge", "import_set", "isEmpty", "message", "lodashMemoize", "isFunction", "_i", "min", "max", "_a", "_a", "merge", "message", "__awaiter", "isEmpty", "set", "data", "React", "_a", "message", "__assign", "_a", "format", "__rest", "parse", "__assign", "get", "__awaiter", "_b", "_c", "import_react", "import_set", "_a", "choices", "createValue", "regex", "__spreadArray", "set", "React", "import_isEqual", "import_cloneDeep", "import_get", "import_set", "import_react", "_a", "debounce", "Component", "__rest", "__assign", "getValues", "isValid", "isEqual", "get", "cloneDeep", "set", "_a", "__assign", "React", "React", "_a", "queryOptions", "redirect", "__rest", "__assign", "refetch", "React", "import_react", "_a", "_a", "__rest", "_a", "__rest", "import_react", "queryOptions", "createPath", "__assign", "__rest", "_a", "data", "record", "_a", "import_react", "__rest", "__assign", "_a", "data", "import_react", "import_react", "import_react", "data", "_a", "__rest", "resource", "id", "meta", "__spreadArray", "__assign", "__awaiter", "mutationMode", "import_react", "data", "_a", "__rest", "resource", "ids", "meta", "__spreadArray", "__assign", "__awaiter", "mutationMode", "import_react", "_a", "__rest", "resource", "id", "__spreadArray", "__assign", "data", "__awaiter", "mutationMode", "import_react", "_a", "__rest", "resource", "ids", "__spreadArray", "__assign", "data", "__awaiter", "mutationMode", "import_react", "MAX_DATA_LENGTH_TO_CACHE", "noop", "queryOptions", "__rest", "__assign", "_a", "data", "meta", "import_react", "React", "import_react", "_a", "mutations", "__spreadArray", "import_react", "React", "import_react", "import_react", "_a", "title", "titleOptions", "defaultStore", "_a", "React", "import_react", "import_react", "React", "import_react", "React", "import_react", "import_react", "_a", "queryOptions", "__rest", "__assign", "noop", "_a", "__assign", "__awaiter", "initialState", "import_react", "React", "import_react", "__rest", "__assign", "_a", "__awaiter", "result", "_a", "_a", "createPath", "_a", "defaultAuthParams", "import_react", "_a", "Noop", "_a", "React", "React", "_a", "_a", "React", "import_react", "_a", "import_react", "React", "import_react", "import_get", "import_react", "import_defaults", "_a", "defaults", "get", "_a", "isRequired", "React", "import_react", "_a", "href", "__assign", "message", "import_react", "__assign", "import_inflection", "_a", "mergeRefs", "React", "import_react", "useLayoutEffect", "React", "import_react", "import_debounce", "useLayoutEffect", "debounce", "import_get", "get", "import_debounce", "debounce", "import_react", "_a", "hash", "__awaiter", "_a", "isEqual", "set", "import_react", "import_react", "emptyParams", "queryOptions", "__rest", "__assign", "_a", "noop", "getErrorMessage", "React", "import_react", "_a", "__rest", "emptyParams", "_a", "__rest", "__assign", "import_react", "import_react", "React", "_a", "React", "import_react", "__assign", "_a", "_a", "__rest", "import_react", "import_react", "getErrorMessage", "import_react", "queryOptions", "__rest", "__assign", "_a", "noop", "noop", "import_react", "redirect", "_a", "queryOptions", "__rest", "__assign", "data", "noop", "__rest", "import_react", "_a", "data", "__rest", "_a", "_a", "React", "import_react", "_a", "import_react", "import_react", "_a", "__spreadArray", "import_react", "React", "import_react", "InferredElement", "__assign", "defaultOptions", "_a", "defaultOptions", "format", "number", "_a", "defaultOptions", "_a", "defaultOptions", "formatLong", "format", "getDefaultOptions", "match", "match", "match", "match", "match", "match", "match", "match", "match", "match", "match", "isLeapYear", "match", "isLeapYear", "_a", "defaultOptions", "match", "match", "match", "match", "match", "match", "match", "match", "match", "match", "match", "match", "match", "parse", "_a", "defaultOptions", "getDefaultOptions", "parse", "regex", "isLeapYearIndex", "isBoolean", "isString", "isDate", "isObject", "import_inflection", "isObject", "import_inflection", "isObject"]
}