{"version":3,"file":"router.mjs","sources":["../../src/router.ts"],"sourcesContent":["import { QueryKey } from '@tanstack/react-query'\n\nimport { createInfiniteQuery } from './createInfiniteQuery'\nimport { createMutation } from './createMutation'\nimport { createQuery } from './createQuery'\nimport { createSuspenseInfiniteQuery } from './createSuspenseInfiniteQuery'\nimport { createSuspenseQuery } from './createSuspenseQuery'\nimport type {\n  CompatibleError,\n  CreateRouter,\n  RouterConfig,\n  RouterInfiniteQuery,\n  RouterInfiniteQueryOptions,\n  RouterMutation,\n  RouterMutationOptions,\n  RouterQuery,\n  RouterQueryOptions,\n} from './types'\n\ntype RouterNode = RouterConfig[string]\ntype RouterTypedNode = RouterNode & {\n  _routerType: 'q' | 'inf' | 'm'\n}\n\nconst isRouterLeaf = (value: RouterNode): value is RouterTypedNode => {\n  return !!value && typeof value._routerType === 'string'\n}\n\nconst buildRouter = (keys: QueryKey, config: RouterConfig) => {\n  return Object.entries(config).reduce(\n    (acc, [key, opts]) => {\n      if (!isRouterLeaf(opts)) {\n        acc[key] = buildRouter([...keys, key], opts)\n      } else {\n        const type = opts._routerType\n        const options: any = {\n          ...opts,\n          [type === `m` ? `mutationKey` : `queryKey`]: [...keys, key],\n        }\n\n        if (type === `m`) {\n          acc[key] = {\n            useMutation: createMutation(options),\n            ...createMutation(options),\n          }\n          return acc\n        }\n\n        acc[key] =\n          type === `q`\n            ? {\n                useQuery: createQuery(options),\n                useSuspenseQuery: createSuspenseQuery(options),\n                ...createQuery(options),\n              }\n            : {\n                useInfiniteQuery: createInfiniteQuery(options),\n                useSuspenseInfiniteQuery: createSuspenseInfiniteQuery(options),\n                ...createInfiniteQuery(options),\n              }\n      }\n\n      return acc\n    },\n    {\n      getKey: () => keys,\n    } as any\n  )\n}\n\nexport const router = <TConfig extends RouterConfig>(\n  key: string | QueryKey,\n  config: TConfig\n): CreateRouter<TConfig> => {\n  return buildRouter(Array.isArray(key) ? key : [key], config)\n}\n\nfunction query<TFnData, TVariables = void, TError = CompatibleError>(\n  options: RouterQueryOptions<TFnData, TVariables, TError>\n): RouterQuery<TFnData, TVariables, TError> {\n  return {\n    ...options,\n    _routerType: 'q',\n  }\n}\n\nfunction infiniteQuery<\n  TFnData,\n  TVariables = void,\n  TError = CompatibleError,\n  TPageParam = number\n>(\n  options: RouterInfiniteQueryOptions<TFnData, TVariables, TError, TPageParam>\n): RouterInfiniteQuery<TFnData, TVariables, TError, TPageParam> {\n  return { ...options, _routerType: 'inf' } as RouterInfiniteQuery<\n    TFnData,\n    TVariables,\n    TError,\n    TPageParam\n  >\n}\n\nfunction mutation<\n  TFnData = unknown,\n  TVariables = void,\n  TError = CompatibleError,\n  TContext = unknown\n>(\n  options: RouterMutationOptions<TFnData, TVariables, TError, TContext>\n): RouterMutation<TFnData, TVariables, TError, TContext> {\n  return { ...options, _routerType: 'm' } as RouterMutation<\n    TFnData,\n    TVariables,\n    TError,\n    TContext\n  >\n}\n\nrouter.query = query\nrouter.infiniteQuery = infiniteQuery\nrouter.mutation = mutation\n"],"names":["isRouterLeaf","value","_routerType","buildRouter","keys","config","Object","entries","reduce","acc","key","opts","type","options","useMutation","createMutation","useQuery","createQuery","useSuspenseQuery","createSuspenseQuery","useInfiniteQuery","createInfiniteQuery","useSuspenseInfiniteQuery","createSuspenseInfiniteQuery","getKey","router","Array","isArray","query","infiniteQuery","mutation"],"mappings":";;;;;;AAwBA,MAAMA,YAAY,GAAIC,KAAD,IAAiD;EACpE,OAAO,CAAC,CAACA,KAAF,IAAW,OAAOA,KAAK,CAACC,WAAb,KAA6B,QAA/C,CAAA;AACD,CAFD,CAAA;;AAIA,MAAMC,WAAW,GAAG,CAACC,IAAD,EAAiBC,MAAjB,KAA0C;AAC5D,EAAA,OAAOC,MAAM,CAACC,OAAP,CAAeF,MAAf,EAAuBG,MAAvB,CACL,CAACC,GAAD,EAAM,CAACC,GAAD,EAAMC,IAAN,CAAN,KAAsB;AACpB,IAAA,IAAI,CAACX,YAAY,CAACW,IAAD,CAAjB,EAAyB;AACvBF,MAAAA,GAAG,CAACC,GAAD,CAAH,GAAWP,WAAW,CAAC,CAAC,GAAGC,IAAJ,EAAUM,GAAV,CAAD,EAAiBC,IAAjB,CAAtB,CAAA;AACD,KAFD,MAEO;AACL,MAAA,MAAMC,IAAI,GAAGD,IAAI,CAACT,WAAlB,CAAA;AACA,MAAA,MAAMW,OAAY,GAAG,EACnB,GAAGF,IADgB;QAEnB,CAACC,IAAI,QAAJ,GAAD,aAAA,GAAA,UAAA,GAA6C,CAAC,GAAGR,IAAJ,EAAUM,GAAV,CAAA;OAF/C,CAAA;;MAKA,IAAIE,IAAI,QAAR,EAAkB;QAChBH,GAAG,CAACC,GAAD,CAAH,GAAW;AACTI,UAAAA,WAAW,EAAEC,cAAc,CAACF,OAAD,CADlB;UAET,GAAGE,cAAc,CAACF,OAAD,CAAA;SAFnB,CAAA;AAIA,QAAA,OAAOJ,GAAP,CAAA;AACD,OAAA;;AAEDA,MAAAA,GAAG,CAACC,GAAD,CAAH,GACEE,IAAI,QAAJ,GACI;AACEI,QAAAA,QAAQ,EAAEC,WAAW,CAACJ,OAAD,CADvB;AAEEK,QAAAA,gBAAgB,EAAEC,mBAAmB,CAACN,OAAD,CAFvC;QAGE,GAAGI,WAAW,CAACJ,OAAD,CAAA;AAHhB,OADJ,GAMI;AACEO,QAAAA,gBAAgB,EAAEC,mBAAmB,CAACR,OAAD,CADvC;AAEES,QAAAA,wBAAwB,EAAEC,2BAA2B,CAACV,OAAD,CAFvD;QAGE,GAAGQ,mBAAmB,CAACR,OAAD,CAAA;OAV9B,CAAA;AAYD,KAAA;;AAED,IAAA,OAAOJ,GAAP,CAAA;AACD,GAlCI,EAmCL;AACEe,IAAAA,MAAM,EAAE,MAAMpB,IAAAA;AADhB,GAnCK,CAAP,CAAA;AAuCD,CAxCD,CAAA;;MA0CaqB,MAAM,GAAG,CACpBf,GADoB,EAEpBL,MAFoB,KAGM;AAC1B,EAAA,OAAOF,WAAW,CAACuB,KAAK,CAACC,OAAN,CAAcjB,GAAd,CAAqBA,GAAAA,GAArB,GAA2B,CAACA,GAAD,CAA5B,EAAmCL,MAAnC,CAAlB,CAAA;AACD,EALM;;AAOP,SAASuB,KAAT,CACEf,OADF,EAE4C;EAC1C,OAAO,EACL,GAAGA,OADE;AAELX,IAAAA,WAAW,EAAE,GAAA;GAFf,CAAA;AAID,CAAA;;AAED,SAAS2B,aAAT,CAMEhB,OANF,EAOgE;EAC9D,OAAO,EAAE,GAAGA,OAAL;AAAcX,IAAAA,WAAW,EAAE,KAAA;GAAlC,CAAA;AAMD,CAAA;;AAED,SAAS4B,QAAT,CAMEjB,OANF,EAOyD;EACvD,OAAO,EAAE,GAAGA,OAAL;AAAcX,IAAAA,WAAW,EAAE,GAAA;GAAlC,CAAA;AAMD,CAAA;;AAEDuB,MAAM,CAACG,KAAP,GAAeA,KAAf,CAAA;AACAH,MAAM,CAACI,aAAP,GAAuBA,aAAvB,CAAA;AACAJ,MAAM,CAACK,QAAP,GAAkBA,QAAlB;;;;"}