{"version":3,"file":"useMatch.cjs","names":[],"sources":["../../src/useMatch.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { invariant, replaceEqualDeep } from '@tanstack/router-core'\nimport { nearestMatchContext } from './matchContext'\nimport { useRouter } from './useRouter'\nimport type {\n  AnyRouter,\n  MakeRouteMatch,\n  MakeRouteMatchUnion,\n  RegisteredRouter,\n  StrictOrFrom,\n  ThrowConstraint,\n  ThrowOrOptional,\n} from '@tanstack/router-core'\n\nexport interface UseMatchBaseOptions<\n  TRouter extends AnyRouter,\n  TFrom,\n  TStrict extends boolean,\n  TThrow extends boolean,\n  TSelected,\n> {\n  select?: (\n    match: MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>,\n  ) => TSelected\n  shouldThrow?: TThrow\n}\n\nexport type UseMatchRoute<out TFrom> = <\n  TRouter extends AnyRouter = RegisteredRouter,\n  TSelected = unknown,\n>(\n  opts?: UseMatchBaseOptions<TRouter, TFrom, true, true, TSelected>,\n) => Solid.Accessor<UseMatchResult<TRouter, TFrom, true, TSelected>>\n\nexport type UseMatchOptions<\n  TRouter extends AnyRouter,\n  TFrom extends string | undefined,\n  TStrict extends boolean,\n  TThrow extends boolean,\n  TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n  UseMatchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseMatchResult<\n  TRouter extends AnyRouter,\n  TFrom,\n  TStrict extends boolean,\n  TSelected,\n> = unknown extends TSelected\n  ? TStrict extends true\n    ? MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>\n    : MakeRouteMatchUnion<TRouter>\n  : TSelected\n\nexport function useMatch<\n  TRouter extends AnyRouter = RegisteredRouter,\n  const TFrom extends string | undefined = undefined,\n  TStrict extends boolean = true,\n  TThrow extends boolean = true,\n  TSelected = unknown,\n>(\n  opts: UseMatchOptions<\n    TRouter,\n    TFrom,\n    TStrict,\n    ThrowConstraint<TStrict, TThrow>,\n    TSelected\n  >,\n): Solid.Accessor<\n  ThrowOrOptional<UseMatchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n  const router = useRouter<TRouter>()\n  const contextMatch = Solid.useContext(nearestMatchContext)\n  const nearestMatch = opts.from ? undefined : contextMatch\n\n  const match = () => {\n    if (opts.from) {\n      return router.stores.getMatchStore(opts.from).get()\n    }\n\n    return nearestMatch?.[1 /* match */]()\n  }\n\n  Solid.createEffect(match, (selectedMatch) => {\n    if (selectedMatch !== undefined) {\n      return\n    }\n\n    if (opts.shouldThrow ?? true) {\n      if (process.env.NODE_ENV !== 'production') {\n        throw new Error(\n          `Invariant failed: Could not find ${opts.from ? `an active match from \"${opts.from}\"` : 'a nearest match!'}`,\n        )\n      }\n\n      invariant()\n    }\n  })\n\n  return Solid.createMemo((prev: TSelected | undefined) => {\n    const selectedMatch = match()\n\n    if (selectedMatch === undefined) {\n      return undefined\n    }\n\n    const res = opts.select ? opts.select(selectedMatch) : selectedMatch\n    if (prev === undefined) return res as TSelected\n    return replaceEqualDeep(prev, res) as TSelected\n  }) as any\n}\n"],"mappings":";;;;;;;AAsDA,SAAgB,SAOd,MASA;CACA,MAAM,SAAS,kBAAA,UAAmB;CAClC,MAAM,eAAe,SAAM,WAAW,qBAAA,mBAAmB;CACzD,MAAM,eAAe,KAAK,OAAO,KAAA,IAAY;CAE7C,MAAM,cAAc;EAClB,IAAI,KAAK,MACP,OAAO,OAAO,OAAO,cAAc,KAAK,IAAI,EAAE,IAAI;EAGpD,OAAO,eAAe,GAAe;CACvC;CAEA,SAAM,aAAa,QAAQ,kBAAkB;EAC3C,IAAI,kBAAkB,KAAA,GACpB;EAGF,IAAI,KAAK,eAAe,MAAM;GAC5B,IAAA,QAAA,IAAA,aAA6B,cAC3B,MAAM,IAAI,MACR,oCAAoC,KAAK,OAAO,yBAAyB,KAAK,KAAK,KAAK,oBAC1F;GAGF,CAAA,GAAA,sBAAA,WAAU;EACZ;CACF,CAAC;CAED,OAAO,SAAM,YAAY,SAAgC;EACvD,MAAM,gBAAgB,MAAM;EAE5B,IAAI,kBAAkB,KAAA,GACpB;EAGF,MAAM,MAAM,KAAK,SAAS,KAAK,OAAO,aAAa,IAAI;EACvD,IAAI,SAAS,KAAA,GAAW,OAAO;EAC/B,QAAA,GAAA,sBAAA,kBAAwB,MAAM,GAAG;CACnC,CAAC;AACH"}