UNPKG

@refinedev/core

Version:

Refine is a React meta-framework for building enterprise-level, data-intensive applications rapidly with support for modern UI libraries and headless integrations.

1,376 lines (1,319 loc) 310 kB
"use client" var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.tsx var src_exports = {}; __export(src_exports, { AccessControlContext: () => AccessControlContext, ActionTypes: () => ActionTypes, AuthPage: () => AuthPage, Authenticated: () => Authenticated, AutoSaveIndicator: () => AutoSaveIndicator, CanAccess: () => CanAccess, ErrorComponent: () => ErrorComponent, GitHubBanner: () => GitHubBanner, I18nContext: () => I18nContext, KeyBuilder: () => KeyBuilder, Link: () => Link, MetaContextProvider: () => MetaContextProvider, QS_PARSE_DEPTH: () => QS_PARSE_DEPTH, Refine: () => Refine, ResourceContext: () => ResourceContext, RouteChangeHandler: () => RouteChangeHandler, TranslationContext: () => I18nContext, UndoableQueue: () => UndoableQueue, WelcomePage: () => WelcomePage, file2Base64: () => file2Base64, flattenObjectKeys: () => flattenObjectKeys, generateDefaultDocumentTitle: () => generateDefaultDocumentTitle, getDefaultFilter: () => getDefaultFilter, getDefaultSortOrder: () => getDefaultSortOrder, getNextPageParam: () => getNextPageParam, getPreviousPageParam: () => getPreviousPageParam, handleUseParams: () => handleUseParams, importCSVMapper: () => importCSVMapper, keys: () => keys, matchResourceFromRoute: () => matchResourceFromRoute, parseTableParams: () => parseTableParams, parseTableParamsFromQuery: () => parseTableParamsFromQuery, pickDataProvider: () => pickDataProvider, propertyPathToArray: () => propertyPathToArray, setInitialFilters: () => setInitialFilters, setInitialSorters: () => setInitialSorters, stringifyTableParams: () => stringifyTableParams, unionFilters: () => unionFilters, unionSorters: () => unionSorters, useActiveAuthProvider: () => useActiveAuthProvider, useApiUrl: () => useApiUrl, useBack: () => useBack, useBreadcrumb: () => useBreadcrumb, useCan: () => useCan, useCanWithoutCache: () => useCanWithoutCache, useCancelNotification: () => useCancelNotification, useCloneButton: () => useCloneButton, useCreate: () => useCreate, useCreateButton: () => useCreateButton, useCreateMany: () => useCreateMany, useCustom: () => useCustom, useCustomMutation: () => useCustomMutation, useDataProvider: () => useDataProvider, useDelete: () => useDelete, useDeleteButton: () => useDeleteButton, useDeleteMany: () => useDeleteMany, useEditButton: () => useEditButton, useExport: () => useExport, useExportButton: () => useExportButton, useForgotPassword: () => useForgotPassword, useForm: () => useForm, useGetIdentity: () => useGetIdentity, useGetLocale: () => useGetLocale, useGetToPath: () => useGetToPath, useGo: () => useGo, useHandleNotification: () => useHandleNotification, useImport: () => useImport, useImportButton: () => useImportButton, useInfiniteList: () => useInfiniteList, useInvalidate: () => useInvalidate, useInvalidateAuthStore: () => useInvalidateAuthStore, useIsAuthenticated: () => useIsAuthenticated, useIsExistAuthentication: () => useIsExistAuthentication, useKeys: () => useKeys, useLink: () => useLink, useList: () => useList, useListButton: () => useListButton, useLiveMode: () => useLiveMode, useLoadingOvertime: () => useLoadingOvertime, useLog: () => useLog, useLogList: () => useLogList, useLogin: () => useLogin, useLogout: () => useLogout, useMany: () => useMany, useMenu: () => useMenu, useMeta: () => useMeta, useMetaContext: () => useMetaContext, useModal: () => useModal, useMutationMode: () => useMutationMode, useNavigation: () => useNavigation2, useNotification: () => useNotification, useOnError: () => useOnError, useOne: () => useOne, useParse: () => useParse, useParsed: () => useParsed, usePermissions: () => usePermissions, usePublish: () => usePublish, useRedirectionAfterSubmission: () => useRedirectionAfterSubmission, useRefineContext: () => useRefineContext, useRefineOptions: () => useRefineOptions, useRefreshButton: () => useRefreshButton, useRegister: () => useRegister, useResourceParams: () => useResourceParams, useResourceSubscription: () => useResourceSubscription, useSaveButton: () => useSaveButton, useSelect: () => useSelect, useSetLocale: () => useSetLocale, useShow: () => useShow, useShowButton: () => useShowButton, useSubscription: () => useSubscription, useSyncWithLocation: () => useSyncWithLocation, useTable: () => useTable, useToPath: () => useToPath, useTranslate: () => useTranslate, useTranslation: () => useTranslation, useUpdate: () => useUpdate, useUpdateMany: () => useUpdateMany, useUpdatePassword: () => useUpdatePassword, useUserFriendlyName: () => useUserFriendlyName, useWarnAboutChange: () => useWarnAboutChange }); module.exports = __toCommonJS(src_exports); // src/components/pages/error/index.tsx var import_react64 = __toESM(require("react")); // src/hooks/auth/usePermissions/index.ts var import_devtools_internal = require("@refinedev/devtools-internal"); var import_react_query2 = require("@tanstack/react-query"); // src/contexts/auth/index.tsx var import_react = __toESM(require("react")); var import_react_query = require("@tanstack/react-query"); var AuthProviderContext = import_react.default.createContext( {} ); var AuthProviderContextProvider = /* @__PURE__ */ __name(({ children, isProvided, ...authProvider }) => { const queryClient = (0, import_react_query.useQueryClient)(); const handleLogin = /* @__PURE__ */ __name(async (params) => { var _a; try { const result = await ((_a = authProvider.login) == null ? void 0 : _a.call(authProvider, params)); return result; } catch (error) { console.warn( "Unhandled Error in login: refine always expects a resolved promise.", error ); return Promise.reject(error); } }, "handleLogin"); const handleRegister = /* @__PURE__ */ __name(async (params) => { var _a; try { const result = await ((_a = authProvider.register) == null ? void 0 : _a.call(authProvider, params)); return result; } catch (error) { console.warn( "Unhandled Error in register: refine always expects a resolved promise.", error ); return Promise.reject(error); } }, "handleRegister"); const handleLogout = /* @__PURE__ */ __name(async (params) => { var _a; try { const result = await ((_a = authProvider.logout) == null ? void 0 : _a.call(authProvider, params)); queryClient.invalidateQueries(); return result; } catch (error) { console.warn( "Unhandled Error in logout: refine always expects a resolved promise.", error ); return Promise.reject(error); } }, "handleLogout"); const handleCheck = /* @__PURE__ */ __name(async (params) => { var _a; try { const result = await ((_a = authProvider.check) == null ? void 0 : _a.call(authProvider, params)); return Promise.resolve(result); } catch (error) { console.warn( "Unhandled Error in check: refine always expects a resolved promise.", error ); return Promise.reject(error); } }, "handleCheck"); const handleForgotPassword = /* @__PURE__ */ __name(async (params) => { var _a; try { const result = await ((_a = authProvider.forgotPassword) == null ? void 0 : _a.call(authProvider, params)); return Promise.resolve(result); } catch (error) { console.warn( "Unhandled Error in forgotPassword: refine always expects a resolved promise.", error ); return Promise.reject(error); } }, "handleForgotPassword"); const handleUpdatePassword = /* @__PURE__ */ __name(async (params) => { var _a; try { const result = await ((_a = authProvider.updatePassword) == null ? void 0 : _a.call(authProvider, params)); return Promise.resolve(result); } catch (error) { console.warn( "Unhandled Error in updatePassword: refine always expects a resolved promise.", error ); return Promise.reject(error); } }, "handleUpdatePassword"); return /* @__PURE__ */ import_react.default.createElement( AuthProviderContext.Provider, { value: { ...authProvider, login: handleLogin, logout: handleLogout, check: handleCheck, register: handleRegister, forgotPassword: handleForgotPassword, updatePassword: handleUpdatePassword, isProvided } }, children ); }, "AuthProviderContextProvider"); var useAuthProviderContext = /* @__PURE__ */ __name(() => { const context = import_react.default.useContext(AuthProviderContext); return context; }, "useAuthProviderContext"); // src/definitions/table/index.ts var import_differenceWith = __toESM(require("lodash/differenceWith")); var import_unionWith = __toESM(require("lodash/unionWith")); var import_qs = __toESM(require("qs")); var import_warn_once = __toESM(require("warn-once")); var QS_PARSE_DEPTH = 10; var parseTableParams = /* @__PURE__ */ __name((url) => { const { currentPage, pageSize, sorters, sorter, filters } = import_qs.default.parse( url.substring(1), // remove first ? character { depth: QS_PARSE_DEPTH } ); return { parsedCurrentPage: currentPage && Number(currentPage), parsedPageSize: pageSize && Number(pageSize), parsedSorter: sorters || sorter || [], parsedFilters: filters ?? [] }; }, "parseTableParams"); var parseTableParamsFromQuery = /* @__PURE__ */ __name((params) => { const { currentPage, pageSize, sorters, sorter, filters } = params; return { parsedCurrentPage: currentPage && Number(currentPage), parsedPageSize: pageSize && Number(pageSize), parsedSorter: sorters || sorter || [], parsedFilters: filters ?? [] }; }, "parseTableParamsFromQuery"); var stringifyTableParams = /* @__PURE__ */ __name((params) => { const options = { skipNulls: true, arrayFormat: "indices", encode: false }; const { pagination, sorters, sorter, filters, ...rest } = params; const finalSorters = sorters && sorters.length > 0 ? sorters : sorter; const queryString = import_qs.default.stringify( { ...rest, ...pagination ? pagination : {}, sorters: finalSorters, filters }, options ); return queryString; }, "stringifyTableParams"); var compareFilters = /* @__PURE__ */ __name((left, right) => { if (left.operator !== "and" && left.operator !== "or" && right.operator !== "and" && right.operator !== "or") { return ("field" in left ? left.field : void 0) === ("field" in right ? right.field : void 0) && left.operator === right.operator; } return ("key" in left ? left.key : void 0) === ("key" in right ? right.key : void 0) && left.operator === right.operator; }, "compareFilters"); var compareSorters = /* @__PURE__ */ __name((left, right) => left.field === right.field, "compareSorters"); var unionFilters = /* @__PURE__ */ __name((permanentFilter, newFilters, prevFilters = []) => { const isKeyRequired = newFilters.filter( (f) => (f.operator === "or" || f.operator === "and") && !f.key ); if (isKeyRequired.length > 1) { (0, import_warn_once.default)( true, "[conditionalFilters]: You have created multiple Conditional Filters at the top level, this requires the key parameter. \nFor more information, see https://refine.dev/docs/advanced-tutorials/data-provider/handling-filters/#top-level-multiple-conditional-filters-usage" ); } return (0, import_unionWith.default)( permanentFilter, newFilters, prevFilters, compareFilters ).filter( (crudFilter) => crudFilter.value !== void 0 && crudFilter.value !== null && (crudFilter.operator !== "or" || crudFilter.operator === "or" && crudFilter.value.length !== 0) && (crudFilter.operator !== "and" || crudFilter.operator === "and" && crudFilter.value.length !== 0) ); }, "unionFilters"); var unionSorters = /* @__PURE__ */ __name((permanentSorter, newSorters) => (0, import_unionWith.default)(permanentSorter, newSorters, compareSorters).filter( (crudSorter) => crudSorter.order !== void 0 && crudSorter.order !== null ), "unionSorters"); var setInitialFilters = /* @__PURE__ */ __name((permanentFilter, defaultFilter) => [ ...(0, import_differenceWith.default)(defaultFilter, permanentFilter, compareFilters), ...permanentFilter ], "setInitialFilters"); var setInitialSorters = /* @__PURE__ */ __name((permanentSorter, defaultSorter) => [ ...(0, import_differenceWith.default)(defaultSorter, permanentSorter, compareSorters), ...permanentSorter ], "setInitialSorters"); var getDefaultSortOrder = /* @__PURE__ */ __name((columnName, sorter) => { if (!sorter) { return void 0; } const sortItem = sorter.find((item) => item.field === columnName); if (sortItem) { return sortItem.order; } return void 0; }, "getDefaultSortOrder"); var getDefaultFilter = /* @__PURE__ */ __name((columnName, filters, operatorType = "eq") => { const filter = filters == null ? void 0 : filters.find((filter2) => { if (filter2.operator !== "or" && filter2.operator !== "and" && "field" in filter2) { const { operator, field } = filter2; return field === columnName && operator === operatorType; } return void 0; }); if (filter) { return filter.value || []; } return void 0; }, "getDefaultFilter"); // src/definitions/helpers/userFriendlySeconds/index.ts var userFriendlySecond = /* @__PURE__ */ __name((miliseconds) => { return miliseconds / 1e3; }, "userFriendlySecond"); // src/definitions/helpers/importCSVMapper/index.ts var import_fromPairs = __toESM(require("lodash/fromPairs")); var import_zip = __toESM(require("lodash/zip")); var importCSVMapper = /* @__PURE__ */ __name((data, mapData = (item) => item) => { const [headers, ...body] = data; return body.map((entry) => (0, import_fromPairs.default)((0, import_zip.default)(headers, entry))).map( (item, index, array) => mapData.call(void 0, item, index, array) ); }, "importCSVMapper"); // src/definitions/helpers/handleUseParams/index.tsx var handleUseParams = /* @__PURE__ */ __name((params = {}) => { if (params == null ? void 0 : params.id) { return { ...params, id: decodeURIComponent(params.id) }; } return params; }, "handleUseParams"); // src/definitions/helpers/hasPermission/index.ts var hasPermission = /* @__PURE__ */ __name((permissions, action) => { if (!permissions || !action) { return false; } return !!permissions.find((i) => i === action); }, "hasPermission"); // src/definitions/helpers/humanizeString/index.ts var humanizeString = /* @__PURE__ */ __name((text2) => { text2 = text2.replace(/([a-z]{1})([A-Z]{1})/g, "$1-$2"); text2 = text2.replace(/([A-Z]{1})([A-Z]{1})([a-z]{1})/g, "$1-$2$3"); text2 = text2.toLowerCase().replace(/[_-]+/g, " ").replace(/\s{2,}/g, " ").trim(); text2 = text2.charAt(0).toUpperCase() + text2.slice(1); return text2; }, "humanizeString"); // src/contexts/refine/index.tsx var import_react2 = __toESM(require("react")); var import_pluralize = __toESM(require("pluralize")); var defaultTitle = { icon: /* @__PURE__ */ import_react2.default.createElement( "svg", { width: 24, height: 24, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", "data-testid": "refine-logo", id: "refine-default-logo" }, /* @__PURE__ */ import_react2.default.createElement( "path", { fillRule: "evenodd", clipRule: "evenodd", d: "M13.7889 0.422291C12.6627 -0.140764 11.3373 -0.140764 10.2111 0.422291L2.21115 4.42229C0.85601 5.09986 0 6.48491 0 8V16C0 17.5151 0.85601 18.9001 2.21115 19.5777L10.2111 23.5777C11.3373 24.1408 12.6627 24.1408 13.7889 23.5777L21.7889 19.5777C23.144 18.9001 24 17.5151 24 16V8C24 6.48491 23.144 5.09986 21.7889 4.42229L13.7889 0.422291ZM8 8C8 5.79086 9.79086 4 12 4C14.2091 4 16 5.79086 16 8V16C16 18.2091 14.2091 20 12 20C9.79086 20 8 18.2091 8 16V8Z", fill: "currentColor" } ), /* @__PURE__ */ import_react2.default.createElement( "path", { d: "M14 8C14 9.10457 13.1046 10 12 10C10.8954 10 10 9.10457 10 8C10 6.89543 10.8954 6 12 6C13.1046 6 14 6.89543 14 8Z", fill: "currentColor" } ) ), text: "Refine Project" }; var defaultRefineOptions = { mutationMode: "pessimistic", syncWithLocation: false, undoableTimeout: 5e3, warnWhenUnsavedChanges: false, liveMode: "off", redirect: { afterCreate: "list", afterClone: "list", afterEdit: "list" }, overtime: { enabled: true, interval: 1e3 }, textTransformers: { humanize: humanizeString, plural: import_pluralize.default.plural, singular: import_pluralize.default.singular }, disableServerSideValidation: false, disableRouteChangeHandler: false, title: defaultTitle }; var RefineContext = import_react2.default.createContext({ mutationMode: "pessimistic", warnWhenUnsavedChanges: false, syncWithLocation: false, undoableTimeout: 5e3, liveMode: "off", onLiveEvent: void 0, options: defaultRefineOptions }); var RefineContextProvider = /* @__PURE__ */ __name(({ mutationMode, warnWhenUnsavedChanges, syncWithLocation, undoableTimeout, children, liveMode = "off", onLiveEvent, options }) => { return /* @__PURE__ */ import_react2.default.createElement( RefineContext.Provider, { value: { __initialized: true, mutationMode, warnWhenUnsavedChanges, syncWithLocation, undoableTimeout, liveMode, onLiveEvent, options } }, children ); }, "RefineContextProvider"); // src/definitions/helpers/handleRefineOptions/index.ts var handleRefineOptions = /* @__PURE__ */ __name(({ options, disableTelemetry, liveMode, mutationMode, reactQueryClientConfig, reactQueryDevtoolConfig, syncWithLocation, undoableTimeout, warnWhenUnsavedChanges, disableRouteChangeHandler } = {}) => { var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k; const optionsWithDefaults = { breadcrumb: options == null ? void 0 : options.breadcrumb, mutationMode: (options == null ? void 0 : options.mutationMode) ?? mutationMode ?? defaultRefineOptions.mutationMode, undoableTimeout: (options == null ? void 0 : options.undoableTimeout) ?? undoableTimeout ?? defaultRefineOptions.undoableTimeout, syncWithLocation: (options == null ? void 0 : options.syncWithLocation) ?? syncWithLocation ?? defaultRefineOptions.syncWithLocation, warnWhenUnsavedChanges: (options == null ? void 0 : options.warnWhenUnsavedChanges) ?? warnWhenUnsavedChanges ?? defaultRefineOptions.warnWhenUnsavedChanges, liveMode: (options == null ? void 0 : options.liveMode) ?? liveMode ?? defaultRefineOptions.liveMode, redirect: { afterCreate: ((_a = options == null ? void 0 : options.redirect) == null ? void 0 : _a.afterCreate) ?? defaultRefineOptions.redirect.afterCreate, afterClone: ((_b = options == null ? void 0 : options.redirect) == null ? void 0 : _b.afterClone) ?? defaultRefineOptions.redirect.afterClone, afterEdit: ((_c = options == null ? void 0 : options.redirect) == null ? void 0 : _c.afterEdit) ?? defaultRefineOptions.redirect.afterEdit }, overtime: (options == null ? void 0 : options.overtime) ?? defaultRefineOptions.overtime, textTransformers: { humanize: ((_d = options == null ? void 0 : options.textTransformers) == null ? void 0 : _d.humanize) ?? defaultRefineOptions.textTransformers.humanize, plural: ((_e = options == null ? void 0 : options.textTransformers) == null ? void 0 : _e.plural) ?? defaultRefineOptions.textTransformers.plural, singular: ((_f = options == null ? void 0 : options.textTransformers) == null ? void 0 : _f.singular) ?? defaultRefineOptions.textTransformers.singular }, disableServerSideValidation: (options == null ? void 0 : options.disableServerSideValidation) ?? defaultRefineOptions.disableServerSideValidation, projectId: options == null ? void 0 : options.projectId, title: { icon: typeof ((_g = options == null ? void 0 : options.title) == null ? void 0 : _g.icon) === "undefined" ? defaultRefineOptions.title.icon : (_h = options == null ? void 0 : options.title) == null ? void 0 : _h.icon, text: typeof ((_i = options == null ? void 0 : options.title) == null ? void 0 : _i.text) === "undefined" ? defaultRefineOptions.title.text : (_j = options == null ? void 0 : options.title) == null ? void 0 : _j.text }, disableRouteChangeHandler: (options == null ? void 0 : options.disableRouteChangeHandler) ?? disableRouteChangeHandler ?? defaultRefineOptions.disableRouteChangeHandler }; const disableTelemetryWithDefault = (options == null ? void 0 : options.disableTelemetry) ?? disableTelemetry ?? false; const reactQueryWithDefaults = { clientConfig: ((_k = options == null ? void 0 : options.reactQuery) == null ? void 0 : _k.clientConfig) ?? reactQueryClientConfig ?? {}, devtoolConfig: reactQueryDevtoolConfig ?? {} }; return { optionsWithDefaults, disableTelemetryWithDefault, reactQueryWithDefaults }; }, "handleRefineOptions"); // src/definitions/helpers/redirectPage/index.ts var redirectPage = /* @__PURE__ */ __name(({ redirectFromProps, action, redirectOptions }) => { if (redirectFromProps || redirectFromProps === false) { return redirectFromProps; } switch (action) { case "clone": return redirectOptions.afterClone; case "create": return redirectOptions.afterCreate; case "edit": return redirectOptions.afterEdit; default: return false; } }, "redirectPage"); // src/definitions/helpers/sequentialPromises/index.ts var sequentialPromises = /* @__PURE__ */ __name(async (promises, onEachResolve, onEachReject) => { const results = []; for (const [index, promise] of promises.entries()) { try { const result = await promise(); results.push(onEachResolve(result, index)); } catch (error) { results.push(onEachReject(error, index)); } } return results; }, "sequentialPromises"); // src/definitions/helpers/pick-resource/index.ts var pickResource = /* @__PURE__ */ __name((identifier, resources = []) => { if (!identifier) { return void 0; } let resource = resources.find((r) => r.identifier === identifier); if (!resource) { resource = resources.find((r) => r.name === identifier); } return resource; }, "pickResource"); // src/definitions/helpers/pickDataProvider/index.ts var pickDataProvider = /* @__PURE__ */ __name((resourceName, dataProviderName, resources) => { if (dataProviderName) { return dataProviderName; } const resource = pickResource(resourceName, resources); const meta = resource == null ? void 0 : resource.meta; if (meta == null ? void 0 : meta.dataProviderName) { return meta.dataProviderName; } return "default"; }, "pickDataProvider"); // src/definitions/helpers/handleMultiple/index.ts var handleMultiple = /* @__PURE__ */ __name(async (promises) => { return { data: (await Promise.all(promises)).map((res) => res.data) }; }, "handleMultiple"); // src/definitions/helpers/useInfinitePagination/index.ts var getNextPageParam = /* @__PURE__ */ __name((lastPage) => { const { pagination, cursor } = lastPage; if (cursor == null ? void 0 : cursor.next) { return cursor.next; } const current = (pagination == null ? void 0 : pagination.currentPage) || 1; const pageSize = (pagination == null ? void 0 : pagination.pageSize) || 10; const totalPages = Math.ceil((lastPage.total || 0) / pageSize); return current < totalPages ? Number(current) + 1 : void 0; }, "getNextPageParam"); var getPreviousPageParam = /* @__PURE__ */ __name((lastPage) => { const { pagination, cursor } = lastPage; if (cursor == null ? void 0 : cursor.prev) { return cursor.prev; } const current = (pagination == null ? void 0 : pagination.currentPage) || 1; return current === 1 ? void 0 : current - 1; }, "getPreviousPageParam"); // src/definitions/helpers/router/is-parameter.ts var isParameter = /* @__PURE__ */ __name((segment) => { return segment.startsWith(":"); }, "isParameter"); // src/definitions/helpers/router/split-to-segments.ts var splitToSegments = /* @__PURE__ */ __name((path) => { const segments = path.split("/").filter((segment) => segment !== ""); return segments; }, "splitToSegments"); // src/definitions/helpers/router/is-segment-counts-same.ts var isSegmentCountsSame = /* @__PURE__ */ __name((route, resourceRoute) => { const routeSegments = splitToSegments(route); const resourceRouteSegments = splitToSegments(resourceRoute); return routeSegments.length === resourceRouteSegments.length; }, "isSegmentCountsSame"); // src/definitions/helpers/router/remove-leading-trailing-slashes.ts var removeLeadingTrailingSlashes = /* @__PURE__ */ __name((route) => { return route.replace(/^\/|\/$/g, ""); }, "removeLeadingTrailingSlashes"); // src/definitions/helpers/router/check-by-segments.ts var checkBySegments = /* @__PURE__ */ __name((route, resourceRoute) => { const stdRoute = removeLeadingTrailingSlashes(route); const stdResourceRoute = removeLeadingTrailingSlashes(resourceRoute); if (!isSegmentCountsSame(stdRoute, stdResourceRoute)) { return false; } const routeSegments = splitToSegments(stdRoute); const resourceRouteSegments = splitToSegments(stdResourceRoute); return resourceRouteSegments.every((segment, index) => { return isParameter(segment) || segment === routeSegments[index]; }); }, "checkBySegments"); // src/definitions/helpers/router/get-action-routes-from-resource.ts var getActionRoutesFromResource = /* @__PURE__ */ __name((resource, resources) => { const actions = []; const actionList = ["list", "show", "edit", "create", "clone"]; actionList.forEach((action) => { const route = resource[action]; if (route) { actions.push({ action, resource, route: `/${route.replace(/^\//, "")}` }); } }); return actions; }, "getActionRoutesFromResource"); // src/definitions/helpers/router/pick-matched-route.ts var pickMatchedRoute = /* @__PURE__ */ __name((routes) => { var _a; if (routes.length === 0) { return void 0; } if (routes.length === 1) { return routes[0]; } const sanitizedRoutes = routes.map((route) => ({ ...route, splitted: splitToSegments(removeLeadingTrailingSlashes(route.route)) })); const segmentsCount = ((_a = sanitizedRoutes[0]) == null ? void 0 : _a.splitted.length) ?? 0; let eligibleRoutes = [ ...sanitizedRoutes ]; for (let i = 0; i < segmentsCount; i++) { const nonParametrizedRoutes = eligibleRoutes.filter( (route) => !isParameter(route.splitted[i]) ); if (nonParametrizedRoutes.length === 0) { continue; } if (nonParametrizedRoutes.length === 1) { eligibleRoutes = nonParametrizedRoutes; break; } eligibleRoutes = nonParametrizedRoutes; } return eligibleRoutes[0]; }, "pickMatchedRoute"); // src/definitions/helpers/router/match-resource-from-route.ts var matchResourceFromRoute = /* @__PURE__ */ __name((route, resources) => { const allActionRoutes = resources.flatMap((resource) => { return getActionRoutesFromResource(resource, resources); }); const allFound = allActionRoutes.filter((actionRoute) => { return checkBySegments(route, actionRoute.route); }); const mostEligible = pickMatchedRoute(allFound); return { found: !!mostEligible, resource: mostEligible == null ? void 0 : mostEligible.resource, action: mostEligible == null ? void 0 : mostEligible.action, matchedRoute: mostEligible == null ? void 0 : mostEligible.route }; }, "matchResourceFromRoute"); // src/definitions/helpers/router/get-parent-resource.ts var getParentResource = /* @__PURE__ */ __name((resource, resources) => { var _a; const parentName = (_a = resource.meta) == null ? void 0 : _a.parent; if (!parentName) { return void 0; } const parentResource = resources.find( (resource2) => (resource2.identifier ?? resource2.name) === parentName ); return parentResource ?? { name: parentName }; }, "getParentResource"); // src/definitions/helpers/router/pick-route-params.ts var pickRouteParams = /* @__PURE__ */ __name((route) => { const segments = splitToSegments(removeLeadingTrailingSlashes(route)); return segments.flatMap((s) => { if (isParameter(s)) { return [s.slice(1)]; } return []; }); }, "pickRouteParams"); // src/definitions/helpers/router/prepare-route-params.ts var prepareRouteParams = /* @__PURE__ */ __name((routeParams, meta = {}) => { return routeParams.reduce( (acc, key) => { const value = meta[key]; if (typeof value !== "undefined") { acc[key] = value; } return acc; }, {} ); }, "prepareRouteParams"); // src/definitions/helpers/router/compose-route.ts var composeRoute = /* @__PURE__ */ __name((designatedRoute, resourceMeta = {}, parsed = {}, meta = {}) => { const routeParams = pickRouteParams(designatedRoute); const preparedRouteParams = prepareRouteParams(routeParams, { ...resourceMeta, ...typeof (parsed == null ? void 0 : parsed.id) !== "undefined" ? { id: parsed.id } : {}, ...typeof (parsed == null ? void 0 : parsed.action) !== "undefined" ? { action: parsed.action } : {}, ...typeof (parsed == null ? void 0 : parsed.resource) !== "undefined" ? { resource: parsed.resource } : {}, ...parsed == null ? void 0 : parsed.params, ...meta }); return designatedRoute.replace(/:([^\/]+)/g, (match, key) => { const fromParams = preparedRouteParams[key]; if (typeof fromParams !== "undefined") { return `${fromParams}`; } return match; }); }, "composeRoute"); // src/definitions/helpers/useActiveAuthProvider/index.ts var useActiveAuthProvider = /* @__PURE__ */ __name(() => { const authProvider = useAuthProviderContext(); if (authProvider.isProvided) { return authProvider; } return null; }, "useActiveAuthProvider"); // src/definitions/helpers/handlePaginationParams/index.ts var handlePaginationParams = /* @__PURE__ */ __name(({ pagination } = {}) => { const mode = (pagination == null ? void 0 : pagination.mode) ?? "server"; const currentPage = (pagination == null ? void 0 : pagination.currentPage) ?? 1; const pageSize = (pagination == null ? void 0 : pagination.pageSize) ?? 10; return { currentPage, pageSize, mode }; }, "handlePaginationParams"); // src/definitions/helpers/useMediaQuery/index.ts var import_react3 = require("react"); var useMediaQuery = /* @__PURE__ */ __name((query) => { const [matches, setMatches] = (0, import_react3.useState)(false); (0, import_react3.useEffect)(() => { const media = window.matchMedia(query); if (media.matches !== matches) { setMatches(media.matches); } const listener = /* @__PURE__ */ __name(() => setMatches(media.matches), "listener"); window.addEventListener("resize", listener); return () => window.removeEventListener("resize", listener); }, [matches, query]); return matches; }, "useMediaQuery"); // src/definitions/helpers/safe-translate/index.ts var safeTranslate = /* @__PURE__ */ __name((translate, key, defaultMessage, options) => { const translated = options ? translate(key, options, defaultMessage) : translate(key, defaultMessage); const fallback = defaultMessage ?? key; if (translated === key || typeof translated === "undefined") { return fallback; } return translated; }, "safeTranslate"); // src/hooks/refine/useMutationMode.ts var import_react4 = require("react"); var useMutationMode = /* @__PURE__ */ __name((preferredMutationMode, preferredUndoableTimeout) => { const { mutationMode, undoableTimeout } = (0, import_react4.useContext)(RefineContext); return { mutationMode: preferredMutationMode ?? mutationMode, undoableTimeout: preferredUndoableTimeout ?? undoableTimeout }; }, "useMutationMode"); // src/hooks/refine/useWarnAboutChange/index.ts var import_react6 = require("react"); // src/contexts/unsavedWarn/index.tsx var import_react5 = __toESM(require("react")); var UnsavedWarnContext = import_react5.default.createContext({}); var UnsavedWarnContextProvider = /* @__PURE__ */ __name(({ children }) => { const [warnWhen, setWarnWhen] = (0, import_react5.useState)(false); return /* @__PURE__ */ import_react5.default.createElement(UnsavedWarnContext.Provider, { value: { warnWhen, setWarnWhen } }, children); }, "UnsavedWarnContextProvider"); // src/hooks/refine/useWarnAboutChange/index.ts var useWarnAboutChange = /* @__PURE__ */ __name(() => { const { warnWhenUnsavedChanges } = (0, import_react6.useContext)(RefineContext); const { warnWhen, setWarnWhen } = (0, import_react6.useContext)(UnsavedWarnContext); return { warnWhenUnsavedChanges, warnWhen: Boolean(warnWhen), setWarnWhen: setWarnWhen ?? (() => void 0) }; }, "useWarnAboutChange"); // src/hooks/refine/useSyncWithLocation.ts var import_react7 = require("react"); var useSyncWithLocation = /* @__PURE__ */ __name(() => { const { syncWithLocation } = (0, import_react7.useContext)(RefineContext); return { syncWithLocation }; }, "useSyncWithLocation"); // src/hooks/refine/useRefineContext.ts var import_react8 = require("react"); var useRefineContext = /* @__PURE__ */ __name(() => { const { mutationMode, syncWithLocation, undoableTimeout, warnWhenUnsavedChanges, liveMode, onLiveEvent, options, __initialized } = (0, import_react8.useContext)(RefineContext); return { __initialized, mutationMode, syncWithLocation, undoableTimeout, warnWhenUnsavedChanges, liveMode, onLiveEvent, options }; }, "useRefineContext"); // src/definitions/helpers/useUserFriendlyName/index.ts var useUserFriendlyName = /* @__PURE__ */ __name(() => { const { options: { textTransformers } } = useRefineContext(); const getFriendlyName = /* @__PURE__ */ __name((name = "", type) => { const humanizeName = textTransformers.humanize(name); if (type === "singular") { return textTransformers.singular(humanizeName); } return textTransformers.plural(humanizeName); }, "getFriendlyName"); return getFriendlyName; }, "useUserFriendlyName"); // src/definitions/helpers/generateDocumentTitle/index.ts function generateDefaultDocumentTitle(translate, resource, action, id, resourceName, getUserFriendlyName) { var _a; const getFriendlyName = getUserFriendlyName || useUserFriendlyName(); const actionPrefixMatcher = { create: "Create new ", clone: `#${id ?? ""} Clone `, edit: `#${id ?? ""} Edit `, show: `#${id ?? ""} Show `, list: "" }; const identifier = (resource == null ? void 0 : resource.identifier) ?? (resource == null ? void 0 : resource.name); const resourceNameFallback = ((_a = resource == null ? void 0 : resource.meta) == null ? void 0 : _a.label) ?? (identifier ? getFriendlyName(identifier, action === "list" ? "plural" : "singular") : identifier); const resourceNameWithFallback = resourceName ?? resourceNameFallback; const defaultTitle2 = safeTranslate( translate, "documentTitle.default", "Refine" ); const suffix = safeTranslate(translate, "documentTitle.suffix", " | Refine"); let autoGeneratedTitle = defaultTitle2; if (action && identifier) { autoGeneratedTitle = safeTranslate( translate, `documentTitle.${identifier}.${action}`, `${actionPrefixMatcher[action] ?? ""}${resourceNameWithFallback}${suffix}`, { id } ); } return autoGeneratedTitle; } __name(generateDefaultDocumentTitle, "generateDefaultDocumentTitle"); // src/definitions/helpers/keys/index.ts var BaseKeyBuilder = class { constructor(segments = []) { this.segments = []; this.segments = segments; } key() { return this.segments; } get() { return this.segments; } }; __name(BaseKeyBuilder, "BaseKeyBuilder"); var ParamsKeyBuilder = class extends BaseKeyBuilder { params(paramsValue) { return new BaseKeyBuilder([...this.segments, paramsValue]); } }; __name(ParamsKeyBuilder, "ParamsKeyBuilder"); var DataIdRequiringKeyBuilder = class extends BaseKeyBuilder { id(idValue) { return new ParamsKeyBuilder([ ...this.segments, idValue ? String(idValue) : void 0 ]); } }; __name(DataIdRequiringKeyBuilder, "DataIdRequiringKeyBuilder"); var DataIdsRequiringKeyBuilder = class extends BaseKeyBuilder { ids(...idsValue) { return new ParamsKeyBuilder([ ...this.segments, ...idsValue.length ? [idsValue.map((el) => String(el))] : [] ]); } }; __name(DataIdsRequiringKeyBuilder, "DataIdsRequiringKeyBuilder"); var DataResourceKeyBuilder = class extends BaseKeyBuilder { action(actionType) { if (actionType === "one") { return new DataIdRequiringKeyBuilder([...this.segments, actionType]); } if (actionType === "many") { return new DataIdsRequiringKeyBuilder([...this.segments, actionType]); } if (["list", "infinite"].includes(actionType)) { return new ParamsKeyBuilder([...this.segments, actionType]); } throw new Error("Invalid action type"); } }; __name(DataResourceKeyBuilder, "DataResourceKeyBuilder"); var DataKeyBuilder = class extends BaseKeyBuilder { resource(resourceName) { return new DataResourceKeyBuilder([...this.segments, resourceName]); } mutation(mutationName) { return new ParamsKeyBuilder([ ...mutationName === "custom" ? this.segments : [this.segments[0]], mutationName ]); } }; __name(DataKeyBuilder, "DataKeyBuilder"); var AuthKeyBuilder = class extends BaseKeyBuilder { action(actionType) { return new ParamsKeyBuilder([...this.segments, actionType]); } }; __name(AuthKeyBuilder, "AuthKeyBuilder"); var AccessResourceKeyBuilder = class extends BaseKeyBuilder { action(resourceName) { return new ParamsKeyBuilder([...this.segments, resourceName]); } }; __name(AccessResourceKeyBuilder, "AccessResourceKeyBuilder"); var AccessKeyBuilder = class extends BaseKeyBuilder { resource(resourceName) { return new AccessResourceKeyBuilder([...this.segments, resourceName]); } }; __name(AccessKeyBuilder, "AccessKeyBuilder"); var AuditActionKeyBuilder = class extends BaseKeyBuilder { action(actionType) { return new ParamsKeyBuilder([...this.segments, actionType]); } }; __name(AuditActionKeyBuilder, "AuditActionKeyBuilder"); var AuditKeyBuilder = class extends BaseKeyBuilder { resource(resourceName) { return new AuditActionKeyBuilder([...this.segments, resourceName]); } action(actionType) { return new ParamsKeyBuilder([...this.segments, actionType]); } }; __name(AuditKeyBuilder, "AuditKeyBuilder"); var KeyBuilder = class extends BaseKeyBuilder { data(name) { return new DataKeyBuilder(["data", name || "default"]); } auth() { return new AuthKeyBuilder(["auth"]); } access() { return new AccessKeyBuilder(["access"]); } audit() { return new AuditKeyBuilder(["audit"]); } }; __name(KeyBuilder, "KeyBuilder"); var keys = /* @__PURE__ */ __name(() => new KeyBuilder([]), "keys"); // src/definitions/helpers/flatten-object-keys/index.ts var isNested = /* @__PURE__ */ __name((obj) => typeof obj === "object" && obj !== null, "isNested"); var isArray = /* @__PURE__ */ __name((obj) => Array.isArray(obj), "isArray"); var flattenObjectKeys = /* @__PURE__ */ __name((obj, prefix = "") => { if (!isNested(obj)) { return { [prefix]: obj }; } return Object.keys(obj).reduce( (acc, key) => { const currentPrefix = prefix.length ? `${prefix}.` : ""; if (isNested(obj[key]) && Object.keys(obj[key]).length) { if (isArray(obj[key]) && obj[key].length) { obj[key].forEach((item, index) => { Object.assign( acc, flattenObjectKeys(item, `${currentPrefix + key}.${index}`) ); }); } else { Object.assign(acc, flattenObjectKeys(obj[key], currentPrefix + key)); } acc[currentPrefix + key] = obj[key]; } else { acc[currentPrefix + key] = obj[key]; } return acc; }, {} ); }, "flattenObjectKeys"); // src/definitions/helpers/property-path-to-array/index.ts var propertyPathToArray = /* @__PURE__ */ __name((propertyPath) => { return propertyPath.split(".").map((item) => !Number.isNaN(Number(item)) ? Number(item) : item); }, "propertyPathToArray"); // src/definitions/helpers/downloadInBrowser/index.ts var downloadInBrowser = /* @__PURE__ */ __name((filename, content, type) => { if (typeof window === "undefined") { return; } const blob = new Blob([content], { type }); const link = document.createElement("a"); link.setAttribute("visibility", "hidden"); link.download = filename; const blobUrl = URL.createObjectURL(blob); link.href = blobUrl; document.body.appendChild(link); link.click(); document.body.removeChild(link); setTimeout(() => { URL.revokeObjectURL(blobUrl); }); }, "downloadInBrowser"); // src/definitions/helpers/defer-execution/index.ts var deferExecution = /* @__PURE__ */ __name((fn) => { setTimeout(fn, 0); }, "deferExecution"); // src/definitions/helpers/async-debounce/index.ts var import_debounce = __toESM(require("lodash/debounce")); var asyncDebounce = /* @__PURE__ */ __name((func, wait = 1e3, cancelReason) => { let callbacks = []; const cancelPrevious = /* @__PURE__ */ __name(() => { callbacks.forEach((cb) => { var _a; return (_a = cb.reject) == null ? void 0 : _a.call(cb, cancelReason); }); callbacks = []; }, "cancelPrevious"); const debouncedFunc = (0, import_debounce.default)((...args) => { const { resolve, reject } = callbacks.pop() || {}; Promise.resolve(func(...args)).then(resolve).catch(reject); }, wait); const runner = /* @__PURE__ */ __name((...args) => { return new Promise((resolve, reject) => { cancelPrevious(); callbacks.push({ resolve, reject }); debouncedFunc(...args); }); }, "runner"); runner.flush = () => debouncedFunc.flush(); runner.cancel = () => { debouncedFunc.cancel(); cancelPrevious(); }; return runner; }, "asyncDebounce"); // src/definitions/helpers/prepare-query-context/index.ts var prepareQueryContext = /* @__PURE__ */ __name((context) => { const queryContext = { queryKey: context.queryKey, signal: void 0 }; Object.defineProperty(queryContext, "signal", { enumerable: true, get: () => { return context.signal; } }); return queryContext; }, "prepareQueryContext"); // src/definitions/upload/file2Base64/index.ts var file2Base64 = /* @__PURE__ */ __name((file) => { return new Promise((resolve, reject) => { const reader = new FileReader(); const resultHandler = /* @__PURE__ */ __name(() => { if (reader.result) { reader.removeEventListener("load", resultHandler, false); resolve(reader.result); } }, "resultHandler"); reader.addEventListener("load", resultHandler, false); reader.readAsDataURL(file.originFileObj); reader.onerror = (error) => { reader.removeEventListener("load", resultHandler, false); return reject(error); }; }); }, "file2Base64"); // src/hooks/useKeys/index.tsx var useKeys = /* @__PURE__ */ __name(() => { return { keys }; }, "useKeys"); // src/hooks/auth/usePermissions/index.ts function usePermissions({ options, params }) { const { getPermissions } = useAuthProviderContext(); const { keys: keys2 } = useKeys(); const queryResponse = (0, import_react_query2.useQuery)({ queryKey: keys2().auth().action("permissions").get(), queryFn: getPermissions ? () => getPermissions(params) : () => Promise.resolve(void 0), enabled: !!getPermissions, ...options, meta: { ...options == null ? void 0 : options.meta, ...(0, import_devtools_internal.getXRay)("usePermissions") } }); return queryResponse; } __name(usePermissions, "usePermissions"); // src/hooks/auth/useGetIdentity/index.ts var import_devtools_internal2 = require("@refinedev/devtools-internal"); var import_react_query3 = require("@tanstack/react-query"); function useGetIdentity({ queryOptions } = {}) { const { getIdentity } = useAuthProviderContext(); const { keys: keys2 } = useKeys(); const queryResponse = (0, import_react_query3.useQuery)({ queryKey: keys2().auth().action("identity").get(), queryFn: getIdentity ?? (() => Promise.resolve({})), retry: false, enabled: !!getIdentity, ...queryOptions, meta: { ...queryOptions == null ? void 0 : queryOptions.meta, ...(0, import_devtools_internal2.getXRay)("useGetIdentity") } }); return queryResponse; } __name(useGetIdentity, "useGetIdentity"); // src/hooks/auth/useLogout/index.ts var import_devtools_internal3 = require("@refinedev/devtools-internal"); var import_react_query5 = require("@tanstack/react-query"); // src/hooks/auth/useInvalidateAuthStore/index.ts var import_react_query4 = require("@tanstack/react-query"); var useInvalidateAuthStore = /* @__PURE__ */ __name(() => { const queryClient = (0, import_react_query4.useQueryClient)(); const { keys: keys2 } = useKeys(); const invalidate = /* @__PURE__ */ __name(async () => { await Promise.all( ["check", "identity", "permissions"].map( (action) => queryClient.invalidateQueries({ queryKey: keys2().auth().action(action).get() }) ) ); }, "invalidate"); return invalidate; }, "useInvalidateAuthStore"); // src/hooks/auth/useLogout/index.ts function useLogout({ mutationOptions } = {}) { const invalidateAuthStore = useInvalidateAuthStore(); const go = useGo(); const { open, close } = useNotification(); const { logout: logoutFromContext } = useAuthProviderContext(); const { keys: keys2 } = useKeys(); const mutation = (0, import_react_query5.useMutation)({ mutationKey: keys2().auth().action("logout").get(), mutationFn: logoutFromContext, ...mutationOptions, onSuccess: (data, variables) => { const { success, error, redirectTo, successNotification } = data; const { redirectPath } = variables ?? {}; const redirect = redirectPath ?? redirectTo; if (success) { close == null ? void 0 : close("useLogout-error"); if (successNotification) { open == null ? void 0 : open(buildSuccessNotification(successNotification)); } } if (error || !success) { open == null ? void 0 : open(buildNotification(error)); } if (redirect !== false) { if (redirect) { go({ to: redirect }); } } invalidateAuthStore(); }, onError: (error) => { open == null ? void 0 : open(buildNotification(error)); }, meta: { ...mutationOptions == null ? void 0 : mutationOptions.meta, ...(0, import_devtools_internal3.getXRay)("useLogout") } }); return { ...mutation }; } __name(useLogout, "useLogout"); var buildNotification = /* @__PURE__ */ __name((error) => { return { key: "useLogout-error", type: "error", message: (error == null ? void 0 : error.name) || "Logout Error", description: (error == null ? void 0 : error.message) || "Something went wrong during logout" }; }, "buildNotification"); var buildSuccessNotification = /* @__PURE__ */ __name((successNotification) => { return { message: successNotification.message, description: successNotification.description, key: "logout-success", type: "success" }; }, "buildSuccessNotification"); // src/hooks/auth/useLogin/index.ts var import_devtools_internal4 = require("@refinedev/devtools-internal"); var import_react_query6 = require("@tanstack/react-query"); function useLogin({ mutationOptions } = {}) { var _a; const invalidateAuthStore = useInvalidateAuthStore(); const go = useGo(); const parsed = useParsed(); const { close, open } = useNotification(); const { login: loginFromContext } = useAuthProviderContext(); const { keys: keys2 } = useKeys(); const to = (_a = parsed.params) == null ? void 0 : _a.to; const mutation = (0, impo