{"version":3,"sources":["../src/get-trace.ts","../src/clean-stack.ts","../src/constants.ts","../src/is-refine-stack.ts","../src/get-package-name-from-filename.ts","../src/get-resource-path.ts","../src/get-xray.ts","../src/use-query-subscription.tsx","../src/listeners.ts","../src/create-identifier.ts"],"sourcesContent":["import ErrorStackParser from \"error-stack-parser\";\nimport { cleanStack } from \"./clean-stack\";\nimport { isRefineStack } from \"./is-refine-stack\";\nimport { getPackageNameFromFilename } from \"./get-package-name-from-filename\";\nimport type { TraceType } from \"@refinedev/devtools-shared\";\n\nexport function getTrace(excludeFromTrace?: string[]) {\n  if (__DEV_CONDITION__ !== \"development\") {\n    return [];\n  }\n  try {\n    const error = new Error();\n    const stack = ErrorStackParser.parse(error);\n    const clean = cleanStack(stack);\n    const traces = clean\n      .map(\n        (frame) =>\n          ({\n            file: frame.fileName,\n            line: frame.lineNumber,\n            column: frame.columnNumber,\n            function: frame.functionName,\n            isRefine: isRefineStack(frame.fileName),\n            packageName: getPackageNameFromFilename(frame.fileName),\n          }) as TraceType,\n      )\n      .filter((trace) => trace.function)\n      .filter((trace) => !excludeFromTrace?.includes(trace.function ?? \"\"));\n    return traces.slice(1);\n  } catch (error) {\n    return [];\n  }\n}\n","import type { StackFrame } from \"error-stack-parser\";\n\nconst unrelatedFunctionName = \"renderWithHooks\";\n\nexport const cleanStack = (stack: StackFrame[]) => {\n  const firstUnrelatedIndex = stack.findIndex(\n    (frame) => frame.functionName === unrelatedFunctionName,\n  );\n\n  if (firstUnrelatedIndex !== -1) {\n    return stack.slice(0, firstUnrelatedIndex);\n  }\n\n  return stack;\n};\n","export const REFINE_PACKAGE_FILEPATH_REGEXP =\n  __DEV_CONDITION__ !== \"development\"\n    ? /node_modules\\/refinedev\\/(.*?)\\//\n    : /\\/refine\\/packages\\/(.*?)\\//;\n","import { REFINE_PACKAGE_FILEPATH_REGEXP } from \"./constants\";\n\nexport const isRefineStack = (filename?: string) => {\n  if (!filename) return false;\n\n  const match = filename.match(REFINE_PACKAGE_FILEPATH_REGEXP);\n\n  return !!match;\n};\n","import { REFINE_PACKAGE_FILEPATH_REGEXP } from \"./constants\";\n\nexport const getPackageNameFromFilename = (filename?: string) => {\n  if (!filename) return;\n\n  const match = filename.match(REFINE_PACKAGE_FILEPATH_REGEXP);\n\n  const name = match?.groups?.name;\n\n  if (!name) return;\n\n  return `@refinedev/${name}`;\n};\n","import {\n  type DevtoolsEvent,\n  type DevtoolsEventPayloads,\n  type RefineHook,\n  scopes,\n} from \"@refinedev/devtools-shared\";\n\nexport type Activity =\n  DevtoolsEventPayloads[DevtoolsEvent.DEVTOOLS_ACTIVITY_UPDATE][\"updatedActivities\"][number];\n\nexport const getResourcePath = (hookName: RefineHook): string | null => {\n  if (scopes[hookName] === \"auth\") {\n    return null;\n  }\n  if (hookName === \"useCan\") {\n    return \"key[1]\";\n  }\n  if (scopes[hookName] === \"audit-log\") {\n    if (hookName === \"useLog\") {\n      return \"variables.resource\";\n    }\n    return \"key[1]\";\n  }\n  if (scopes[hookName] === \"data\") {\n    if (hookName === \"useCustom\" || hookName === \"useCustomMutation\") {\n      return null;\n    }\n    switch (hookName) {\n      case \"useList\":\n      case \"useInfiniteList\":\n      case \"useOne\":\n      case \"useMany\":\n        return \"key[2]\";\n      case \"useCreate\":\n      case \"useCreateMany\":\n      case \"useDelete\":\n      case \"useDeleteMany\":\n      case \"useUpdate\":\n      case \"useUpdateMany\":\n        return \"variables.resource\";\n    }\n  }\n  return null;\n};\n","import type { RefineHook, TraceType } from \"@refinedev/devtools-shared\";\nimport { getTrace } from \"./get-trace\";\nimport { getResourcePath } from \"./get-resource-path\";\n\nexport type XRayResponse = {\n  hookName: string;\n  trace: TraceType[];\n  resourcePath: string | null;\n  resourceName?: string;\n};\n\nexport function getXRay(\n  hookName: string,\n  resourceName?: string,\n  excludeFromTrace?: string[],\n): XRayResponse {\n  if (__DEV_CONDITION__ !== \"development\") {\n    return {\n      hookName: \"\",\n      trace: [],\n      resourcePath: null,\n    };\n  }\n  const trace = getTrace(excludeFromTrace).slice(1);\n\n  const resourcePath = getResourcePath(hookName as RefineHook);\n\n  return {\n    hookName,\n    trace,\n    resourcePath,\n    resourceName,\n  };\n}\n","import {\n  DevToolsContext,\n  DevtoolsEvent,\n  receive,\n} from \"@refinedev/devtools-shared\";\nimport type { QueryClient } from \"@tanstack/react-query\";\nimport React, { useContext } from \"react\";\nimport { createQueryListener, createMutationListener } from \"./listeners\";\n\nconst empty = {};\nconst noop = () => empty;\n\nexport const useQuerySubscription =\n  __DEV_CONDITION__ !== \"development\"\n    ? noop\n    : (queryClient: QueryClient) => {\n        const { ws } = useContext(DevToolsContext);\n        const queryCacheSubscription = React.useRef<() => void>(noop);\n        const mutationCacheSubscription = React.useRef<() => void>(noop);\n\n        React.useEffect(() => {\n          if (!ws) return () => 0;\n\n          const queryCache = queryClient.getQueryCache();\n\n          const queryListener = createQueryListener(ws);\n\n          queryCache.getAll().forEach(queryListener);\n\n          queryCacheSubscription.current = queryCache.subscribe(\n            ({ query, type }) =>\n              (type === \"added\" || type === \"updated\") && queryListener(query),\n          );\n\n          return () => {\n            queryCacheSubscription.current?.();\n          };\n        }, [ws, queryClient]);\n\n        React.useEffect(() => {\n          if (!ws) return () => 0;\n\n          const mutationCache = queryClient.getMutationCache();\n\n          const mutationListener = createMutationListener(ws);\n\n          mutationCache.getAll().forEach(mutationListener);\n\n          mutationCacheSubscription.current = mutationCache.subscribe(\n            ({ mutation, type }) =>\n              (type === \"added\" || type === \"updated\") &&\n              mutationListener(mutation),\n          );\n\n          return () => {\n            mutationCacheSubscription.current?.();\n          };\n        }, [ws, queryClient]);\n\n        React.useEffect(() => {\n          if (!ws) return () => 0;\n\n          const cb = receive(\n            ws,\n            DevtoolsEvent.DEVTOOLS_INVALIDATE_QUERY_ACTION,\n            ({ queryKey }) => {\n              if (queryKey) {\n                queryClient.invalidateQueries({ queryKey });\n              }\n            },\n          );\n\n          return cb;\n        }, [ws, queryClient]);\n\n        return {};\n      };\n","import { DevtoolsEvent, send } from \"@refinedev/devtools-shared\";\nimport type { Mutation, Query } from \"@tanstack/react-query\";\n\nimport { createIdentifier } from \"./create-identifier\";\nimport type { XRayResponse } from \"./get-xray\";\n\nexport const createMutationListener =\n  (ws: WebSocket) => (mutation?: Mutation) => {\n    if (!mutation?.meta?.trace) return;\n\n    const meta: XRayResponse = mutation?.meta as any;\n\n    new Promise<void>((resolve) => {\n      send(ws, DevtoolsEvent.ACTIVITY, {\n        type: \"mutation\",\n        identifier: createIdentifier(\n          mutation?.options.mutationKey,\n          mutation?.meta?.trace as any,\n        ),\n        key: mutation?.options.mutationKey as any,\n        status: mutation?.state.status,\n        state: mutation?.state,\n        variables: mutation?.state?.variables,\n        ...meta,\n      });\n      resolve();\n    });\n  };\n\nexport const createQueryListener = (ws: WebSocket) => (query: Query) => {\n  if (!query?.meta?.trace) return;\n\n  const meta: XRayResponse = query?.meta as any;\n\n  new Promise<void>((resolve) => {\n    send(ws, DevtoolsEvent.ACTIVITY, {\n      type: \"query\",\n      identifier: createIdentifier(query.queryKey, query.meta?.trace as any),\n      key: query.queryKey as any,\n      status: query.state.status,\n      state: query.state,\n      ...meta,\n    });\n    resolve();\n  });\n};\n","import type { TraceType } from \"@refinedev/devtools-shared\";\nimport type { MutationKey, QueryKey } from \"@tanstack/react-query\";\n\nexport const createIdentifier = (\n  key?: QueryKey | MutationKey,\n  trace?: TraceType[],\n) => {\n  const simpleTrace = trace?.map(\n    (t) =>\n      `${t.file}:${t.line}:${t.column}#${t.function}-${t.packageName}-${\n        t.isRefine ? 1 : 0\n      }`,\n  );\n  const str = JSON.stringify([...(key ?? []), ...(simpleTrace ?? [])]);\n\n  return str;\n};\n"],"mappings":"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","names":["DevtoolsEvent","_a","DevtoolsEvent"]}