{"record":{"id":"eabbf92be0d14123","repo":"marmelab/react-admin","slug":"unknown-dataprovider-function-type","errorCode":null,"errorMessage":"Unknown dataProvider function: ${type}","messagePattern":"Unknown dataProvider function: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/ra-core/src/dataProvider/useDataProvider.ts","lineNumber":102,"sourceCode":"        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,","sourceCodeStart":84,"sourceCodeEnd":120,"githubUrl":"https://github.com/marmelab/react-admin/blob/051f511bb0afb5ea565c2d3728bf4dab0a6fa5e0/packages/ra-core/src/dataProvider/useDataProvider.ts#L84-L120","documentation":"useDataProvider returns a Proxy over the dataProvider; any method accessed on it must exist as a function on the underlying provider. Accessing a property that isn't a function (or a mistyped method name) throws this error instead of 'is not a function'.","triggerScenarios":"Calling dataProvider.geteOne (typo), a method absent from the provider, or a non-function property override in a custom/partial dataProvider passed to <Admin dataProvider={...}>.","commonSituations":"Hand-rolled data providers missing required methods; mock providers built with object spread losing methods; typos in method names after v3/v4 API changes.","solutions":["Fix the method name typo to match the DataProvider interface (getOne, getList, create, update, updateMany, delete, deleteMany)","Implement all required DataProvider methods in your custom provider","Type the provider as DataProvider so TypeScript flags missing/misspelled methods"],"exampleFix":"// before\nconst dataProvider = { getList: ..., getOne: ... }; // missing create etc.\n// after\nconst dataProvider: DataProvider = {\n  getList: ..., getOne: ..., create: ..., update: ...,\n  updateMany: ..., delete: ..., deleteMany: ...,\n};","handlingStrategy":"type-guard","validationCode":"const REQUIRED = ['getList','getOne','getMany','getManyReference','create','update','updateMany','delete','deleteMany'];\nconst missing = REQUIRED.filter(m => typeof dataProvider[m] !== 'function');\nif (missing.length) throw new Error(`dataProvider missing: ${missing.join(', ')}`);","typeGuard":"const isDataProvider = (dp: unknown): dp is DataProvider =>\n  typeof dp === 'object' && dp !== null &&\n  ['getList','getOne','create','update','delete'].every(m => typeof (dp as any)[m] === 'function');","tryCatchPattern":"try {\n  await dataProvider.getOne('posts', { id });\n} catch (e) {\n  if (/Unknown dataProvider function/.test(e.message)) {\n    console.error('Method name mismatch or missing method in dataProvider');\n  }\n  throw e;\n}","preventionTips":["Annotate custom providers with the DataProvider type to catch typos at compile time","Use the exported testDataProvider or a completion helper to build providers","Review method names against the DataProvider interface when migrating major versions"],"tags":["react-admin","data-provider","proxy","typo","contract"],"backgroundTag":"unknown-method","analyzedSha":"051f511bb0afb5ea565c2d3728bf4dab0a6fa5e0","analyzedAt":"2026-08-30T02:28:14.926Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}