@tanstack/solid-router 1.168.22 → 1.168.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,17 +11,28 @@ function useAwaited({ promise: _promise }) {
11
11
  return [promise[_tanstack_router_core.TSR_DEFERRED_PROMISE].data, promise];
12
12
  }
13
13
  function Await(props) {
14
- const [resource] = solid_js.createResource(() => (0, _tanstack_router_core.defer)(props.promise), (p) => p, { deferStream: true });
15
- return (0, solid_js_web.createComponent)(solid_js.Show, {
14
+ if (!("fallback" in props)) {
15
+ const [resource] = solid_js.createResource(() => (0, _tanstack_router_core.defer)(props.promise), (p) => p, { deferStream: true });
16
+ return (0, solid_js_web.createComponent)(solid_js.Show, {
17
+ get when() {
18
+ return resource();
19
+ },
20
+ children: (data) => props.children(data())
21
+ });
22
+ }
23
+ return (0, solid_js_web.createComponent)(solid_js.Suspense, {
16
24
  get fallback() {
17
25
  return props.fallback;
18
26
  },
19
- get when() {
20
- return resource();
21
- },
22
- children: (data) => props.children(data())
27
+ get children() {
28
+ return (0, solid_js_web.createComponent)(AwaitInner, props);
29
+ }
23
30
  });
24
31
  }
32
+ function AwaitInner(props) {
33
+ const [resource] = solid_js.createResource(() => (0, _tanstack_router_core.defer)(props.promise), (p) => p);
34
+ return props.children(resource());
35
+ }
25
36
  //#endregion
26
37
  exports.Await = Await;
27
38
  exports.useAwaited = useAwaited;
@@ -1 +1 @@
1
- {"version":3,"file":"awaited.cjs","names":["Solid","TSR_DEFERRED_PROMISE","defer","DeferredPromise","SolidNode","AwaitOptions","promise","Promise","T","useAwaited","_promise","status","error","data","Await","props","fallback","children","result","resource","createResource","p","deferStream","_$createComponent","Show","when"],"sources":["../../src/awaited.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\n\nimport { TSR_DEFERRED_PROMISE, defer } from '@tanstack/router-core'\nimport type { DeferredPromise } from '@tanstack/router-core'\nimport type { SolidNode } from './route'\n\nexport type AwaitOptions<T> = {\n promise: Promise<T>\n}\n\nexport function useAwaited<T>({\n promise: _promise,\n}: AwaitOptions<T>): [T, DeferredPromise<T>] {\n const promise = defer(_promise)\n\n if (promise[TSR_DEFERRED_PROMISE].status === 'pending') {\n throw promise\n }\n\n if (promise[TSR_DEFERRED_PROMISE].status === 'error') {\n throw promise[TSR_DEFERRED_PROMISE].error\n }\n\n return [promise[TSR_DEFERRED_PROMISE].data, promise]\n}\n\nexport function Await<T>(\n props: AwaitOptions<T> & {\n fallback?: SolidNode\n children: (result: T) => SolidNode\n },\n) {\n const [resource] = Solid.createResource(\n () => defer(props.promise),\n // Simple passthrough - just return the promise for Solid to await\n (p) => p,\n {\n deferStream: true,\n },\n )\n\n return (\n <Solid.Show fallback={props.fallback} when={resource()}>\n {(data) => props.children(data())}\n </Solid.Show>\n )\n}\n"],"mappings":";;;;;;AAUA,SAAgBS,WAAc,EAC5BH,SAASI,YACkC;CAC3C,MAAMJ,WAAAA,GAAAA,sBAAAA,OAAgBI,SAAS;AAE/B,KAAIJ,QAAQL,sBAAAA,sBAAsBU,WAAW,UAC3C,OAAML;AAGR,KAAIA,QAAQL,sBAAAA,sBAAsBU,WAAW,QAC3C,OAAML,QAAQL,sBAAAA,sBAAsBW;AAGtC,QAAO,CAACN,QAAQL,sBAAAA,sBAAsBY,MAAMP,QAAQ;;AAGtD,SAAgBQ,MACdC,OAIA;CACA,MAAM,CAACI,YAAYnB,SAAMoB,sBAAAA,GAAAA,sBAAAA,OACXL,MAAMT,QAAQ,GAEzBe,MAAMA,GACP,EACEC,aAAa,MAEjB,CAAC;AAED,SAAA,GAAA,aAAA,iBACGtB,SAAMwB,MAAI;EAAA,IAACR,WAAQ;AAAA,UAAED,MAAMC;;EAAQ,IAAES,OAAI;AAAA,UAAEN,UAAU;;EAAAF,WAClDJ,SAASE,MAAME,SAASJ,MAAM,CAAA;EAAC,CAAA"}
1
+ {"version":3,"file":"awaited.cjs","names":["Solid","TSR_DEFERRED_PROMISE","defer","DeferredPromise","SolidNode","AwaitOptions","promise","Promise","T","useAwaited","_promise","status","error","data","Await","props","fallback","children","result","resource","createResource","p","deferStream","_$createComponent","Show","when","Suspense","AwaitInner"],"sources":["../../src/awaited.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\n\nimport { TSR_DEFERRED_PROMISE, defer } from '@tanstack/router-core'\nimport type { DeferredPromise } from '@tanstack/router-core'\nimport type { SolidNode } from './route'\n\nexport type AwaitOptions<T> = {\n promise: Promise<T>\n}\n\nexport function useAwaited<T>({\n promise: _promise,\n}: AwaitOptions<T>): [T, DeferredPromise<T>] {\n const promise = defer(_promise)\n\n if (promise[TSR_DEFERRED_PROMISE].status === 'pending') {\n throw promise\n }\n\n if (promise[TSR_DEFERRED_PROMISE].status === 'error') {\n throw promise[TSR_DEFERRED_PROMISE].error\n }\n\n return [promise[TSR_DEFERRED_PROMISE].data, promise]\n}\n\nexport function Await<T>(\n props: AwaitOptions<T> & {\n fallback?: SolidNode\n children: (result: T) => SolidNode\n },\n) {\n if (!('fallback' in props)) {\n const [resource] = Solid.createResource(\n () => defer(props.promise),\n (p) => p,\n {\n deferStream: true,\n },\n )\n\n return (\n <Solid.Show when={resource()}>\n {(data) => props.children(data())}\n </Solid.Show>\n )\n }\n\n return (\n <Solid.Suspense fallback={props.fallback}>\n <AwaitInner {...props} />\n </Solid.Suspense>\n )\n}\n\nfunction AwaitInner<T>(\n props: AwaitOptions<T> & {\n fallback?: SolidNode\n children: (result: T) => SolidNode\n },\n) {\n const [resource] = Solid.createResource(\n () => defer(props.promise),\n (p) => p,\n )\n\n return props.children(resource() as T)\n}\n"],"mappings":";;;;;;AAUA,SAAgBS,WAAc,EAC5BH,SAASI,YACkC;CAC3C,MAAMJ,WAAAA,GAAAA,sBAAAA,OAAgBI,SAAS;AAE/B,KAAIJ,QAAQL,sBAAAA,sBAAsBU,WAAW,UAC3C,OAAML;AAGR,KAAIA,QAAQL,sBAAAA,sBAAsBU,WAAW,QAC3C,OAAML,QAAQL,sBAAAA,sBAAsBW;AAGtC,QAAO,CAACN,QAAQL,sBAAAA,sBAAsBY,MAAMP,QAAQ;;AAGtD,SAAgBQ,MACdC,OAIA;AACA,KAAI,EAAE,cAAcA,QAAQ;EAC1B,MAAM,CAACI,YAAYnB,SAAMoB,sBAAAA,GAAAA,sBAAAA,OACXL,MAAMT,QAAQ,GACzBe,MAAMA,GACP,EACEC,aAAa,MAEjB,CAAC;AAED,UAAA,GAAA,aAAA,iBACGtB,SAAMwB,MAAI;GAAA,IAACC,OAAI;AAAA,WAAEN,UAAU;;GAAAF,WACxBJ,SAASE,MAAME,SAASJ,MAAM,CAAA;GAAC,CAAA;;AAKvC,SAAA,GAAA,aAAA,iBACGb,SAAM0B,UAAQ;EAAA,IAACV,WAAQ;AAAA,UAAED,MAAMC;;EAAQ,IAAAC,WAAA;AAAA,WAAA,GAAA,aAAA,iBACrCU,YAAeZ,MAAK;;EAAA,CAAA;;AAK3B,SAASY,WACPZ,OAIA;CACA,MAAM,CAACI,YAAYnB,SAAMoB,sBAAAA,GAAAA,sBAAAA,OACXL,MAAMT,QAAQ,GACzBe,MAAMA,EACR;AAED,QAAON,MAAME,SAASE,UAAU,CAAM"}
@@ -21,7 +21,11 @@ function useMatch(opts) {
21
21
  });
22
22
  return solid_js.createMemo((prev) => {
23
23
  const selectedMatch = match();
24
- if (selectedMatch === void 0) return void 0;
24
+ if (selectedMatch === void 0) {
25
+ const hasPendingMatch = opts.from ? Boolean(router.stores.pendingRouteIds.get()[opts.from]) : nearestMatch?.hasPending() ?? false;
26
+ if (prev !== void 0 && (hasPendingMatch || router.stores.isTransitioning.get())) return prev;
27
+ return;
28
+ }
25
29
  const res = opts.select ? opts.select(selectedMatch) : selectedMatch;
26
30
  if (prev === void 0) return res;
27
31
  return (0, _tanstack_router_core.replaceEqualDeep)(prev, res);
@@ -1 +1 @@
1
- {"version":3,"file":"useMatch.cjs","names":["Solid","invariant","replaceEqualDeep","nearestMatchContext","useRouter","AnyRouter","MakeRouteMatch","MakeRouteMatchUnion","RegisteredRouter","StrictOrFrom","ThrowConstraint","ThrowOrOptional","UseMatchBaseOptions","select","match","TRouter","TFrom","TStrict","TSelected","shouldThrow","TThrow","UseMatchRoute","opts","Accessor","UseMatchResult","UseMatchOptions","useMatch","router","nearestMatch","from","undefined","useContext","stores","getRouteMatchStore","get","createEffect","hasPendingMatch","Boolean","pendingRouteIds","hasPending","isTransitioning","process","env","NODE_ENV","Error","createMemo","prev","selectedMatch","res"],"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 nearestMatch = opts.from\n ? undefined\n : Solid.useContext(nearestMatchContext)\n\n const match = () => {\n if (opts.from) {\n return router.stores.getRouteMatchStore(opts.from).get()\n }\n\n return nearestMatch?.match()\n }\n\n Solid.createEffect(() => {\n if (match() !== undefined) {\n return\n }\n\n const hasPendingMatch = opts.from\n ? Boolean(router.stores.pendingRouteIds.get()[opts.from!])\n : (nearestMatch?.hasPending() ?? false)\n\n if (\n !hasPendingMatch &&\n !router.stores.isTransitioning.get() &&\n (opts.shouldThrow ?? true)\n ) {\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) return undefined\n const res = opts.select ? opts.select(selectedMatch as any) : selectedMatch\n if (prev === undefined) return res as TSelected\n return replaceEqualDeep(prev, res) as TSelected\n }) as any\n}\n"],"mappings":";;;;;;;AAsDA,SAAgB0B,SAOdJ,MASA;CACA,MAAMK,SAASvB,kBAAAA,WAAoB;CACnC,MAAMwB,eAAeN,KAAKO,OACtBC,KAAAA,IACA9B,SAAM+B,WAAW5B,qBAAAA,oBAAoB;CAEzC,MAAMW,cAAc;AAClB,MAAIQ,KAAKO,KACP,QAAOF,OAAOK,OAAOC,mBAAmBX,KAAKO,KAAK,CAACK,KAAK;AAG1D,SAAON,cAAcd,OAAO;;AAG9Bd,UAAMmC,mBAAmB;AACvB,MAAIrB,OAAO,KAAKgB,KAAAA,EACd;AAOF,MACE,EALsBR,KAAKO,OACzBQ,QAAQV,OAAOK,OAAOM,gBAAgBJ,KAAK,CAACZ,KAAKO,MAAO,GACvDD,cAAcW,YAAY,IAAI,UAIjC,CAACZ,OAAOK,OAAOQ,gBAAgBN,KAAK,KACnCZ,KAAKH,eAAe,OACrB;AACA,OAAA,QAAA,IAAA,aAA6B,aAC3B,OAAM,IAAIyB,MACR,oCAAoCtB,KAAKO,OAAO,yBAAyBP,KAAKO,KAAI,KAAM,qBACzF;AAGH5B,IAAAA,GAAAA,sBAAAA,YAAW;;GAEb;AAEF,QAAOD,SAAM6C,YAAYC,SAAgC;EACvD,MAAMC,gBAAgBjC,OAAO;AAE7B,MAAIiC,kBAAkBjB,KAAAA,EAAW,QAAOA,KAAAA;EACxC,MAAMkB,MAAM1B,KAAKT,SAASS,KAAKT,OAAOkC,cAAqB,GAAGA;AAC9D,MAAID,SAAShB,KAAAA,EAAW,QAAOkB;AAC/B,UAAA,GAAA,sBAAA,kBAAwBF,MAAME,IAAI;GAClC"}
1
+ {"version":3,"file":"useMatch.cjs","names":["Solid","invariant","replaceEqualDeep","nearestMatchContext","useRouter","AnyRouter","MakeRouteMatch","MakeRouteMatchUnion","RegisteredRouter","StrictOrFrom","ThrowConstraint","ThrowOrOptional","UseMatchBaseOptions","select","match","TRouter","TFrom","TStrict","TSelected","shouldThrow","TThrow","UseMatchRoute","opts","Accessor","UseMatchResult","UseMatchOptions","useMatch","router","nearestMatch","from","undefined","useContext","stores","getRouteMatchStore","get","createEffect","hasPendingMatch","Boolean","pendingRouteIds","hasPending","isTransitioning","process","env","NODE_ENV","Error","createMemo","prev","selectedMatch","res"],"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 nearestMatch = opts.from\n ? undefined\n : Solid.useContext(nearestMatchContext)\n\n const match = () => {\n if (opts.from) {\n return router.stores.getRouteMatchStore(opts.from).get()\n }\n\n return nearestMatch?.match()\n }\n\n Solid.createEffect(() => {\n if (match() !== undefined) {\n return\n }\n\n const hasPendingMatch = opts.from\n ? Boolean(router.stores.pendingRouteIds.get()[opts.from!])\n : (nearestMatch?.hasPending() ?? false)\n\n if (\n !hasPendingMatch &&\n !router.stores.isTransitioning.get() &&\n (opts.shouldThrow ?? true)\n ) {\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 const hasPendingMatch = opts.from\n ? Boolean(router.stores.pendingRouteIds.get()[opts.from!])\n : (nearestMatch?.hasPending() ?? false)\n\n if (\n prev !== undefined &&\n (hasPendingMatch || router.stores.isTransitioning.get())\n ) {\n return prev\n }\n\n return undefined\n }\n\n const res = opts.select ? opts.select(selectedMatch as any) : selectedMatch\n if (prev === undefined) return res as TSelected\n return replaceEqualDeep(prev, res) as TSelected\n }) as any\n}\n"],"mappings":";;;;;;;AAsDA,SAAgB0B,SAOdJ,MASA;CACA,MAAMK,SAASvB,kBAAAA,WAAoB;CACnC,MAAMwB,eAAeN,KAAKO,OACtBC,KAAAA,IACA9B,SAAM+B,WAAW5B,qBAAAA,oBAAoB;CAEzC,MAAMW,cAAc;AAClB,MAAIQ,KAAKO,KACP,QAAOF,OAAOK,OAAOC,mBAAmBX,KAAKO,KAAK,CAACK,KAAK;AAG1D,SAAON,cAAcd,OAAO;;AAG9Bd,UAAMmC,mBAAmB;AACvB,MAAIrB,OAAO,KAAKgB,KAAAA,EACd;AAOF,MACE,EALsBR,KAAKO,OACzBQ,QAAQV,OAAOK,OAAOM,gBAAgBJ,KAAK,CAACZ,KAAKO,MAAO,GACvDD,cAAcW,YAAY,IAAI,UAIjC,CAACZ,OAAOK,OAAOQ,gBAAgBN,KAAK,KACnCZ,KAAKH,eAAe,OACrB;AACA,OAAA,QAAA,IAAA,aAA6B,aAC3B,OAAM,IAAIyB,MACR,oCAAoCtB,KAAKO,OAAO,yBAAyBP,KAAKO,KAAI,KAAM,qBACzF;AAGH5B,IAAAA,GAAAA,sBAAAA,YAAW;;GAEb;AAEF,QAAOD,SAAM6C,YAAYC,SAAgC;EACvD,MAAMC,gBAAgBjC,OAAO;AAE7B,MAAIiC,kBAAkBjB,KAAAA,GAAW;GAC/B,MAAMM,kBAAkBd,KAAKO,OACzBQ,QAAQV,OAAOK,OAAOM,gBAAgBJ,KAAK,CAACZ,KAAKO,MAAO,GACvDD,cAAcW,YAAY,IAAI;AAEnC,OACEO,SAAShB,KAAAA,MACRM,mBAAmBT,OAAOK,OAAOQ,gBAAgBN,KAAK,EAEvD,QAAOY;AAGT;;EAGF,MAAME,MAAM1B,KAAKT,SAASS,KAAKT,OAAOkC,cAAqB,GAAGA;AAC9D,MAAID,SAAShB,KAAAA,EAAW,QAAOkB;AAC/B,UAAA,GAAA,sBAAA,kBAAwBF,MAAME,IAAI;GAClC"}
@@ -9,17 +9,28 @@ function useAwaited({ promise: _promise }) {
9
9
  return [promise[TSR_DEFERRED_PROMISE].data, promise];
10
10
  }
11
11
  function Await(props) {
12
- const [resource] = Solid.createResource(() => defer(props.promise), (p) => p, { deferStream: true });
13
- return createComponent(Solid.Show, {
12
+ if (!("fallback" in props)) {
13
+ const [resource] = Solid.createResource(() => defer(props.promise), (p) => p, { deferStream: true });
14
+ return createComponent(Solid.Show, {
15
+ get when() {
16
+ return resource();
17
+ },
18
+ children: (data) => props.children(data())
19
+ });
20
+ }
21
+ return createComponent(Solid.Suspense, {
14
22
  get fallback() {
15
23
  return props.fallback;
16
24
  },
17
- get when() {
18
- return resource();
19
- },
20
- children: (data) => props.children(data())
25
+ get children() {
26
+ return createComponent(AwaitInner, props);
27
+ }
21
28
  });
22
29
  }
30
+ function AwaitInner(props) {
31
+ const [resource] = Solid.createResource(() => defer(props.promise), (p) => p);
32
+ return props.children(resource());
33
+ }
23
34
  //#endregion
24
35
  export { Await, useAwaited };
25
36
 
@@ -1 +1 @@
1
- {"version":3,"file":"awaited.js","names":["Solid","TSR_DEFERRED_PROMISE","defer","DeferredPromise","SolidNode","AwaitOptions","promise","Promise","T","useAwaited","_promise","status","error","data","Await","props","fallback","children","result","resource","createResource","p","deferStream","_$createComponent","Show","when"],"sources":["../../src/awaited.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\n\nimport { TSR_DEFERRED_PROMISE, defer } from '@tanstack/router-core'\nimport type { DeferredPromise } from '@tanstack/router-core'\nimport type { SolidNode } from './route'\n\nexport type AwaitOptions<T> = {\n promise: Promise<T>\n}\n\nexport function useAwaited<T>({\n promise: _promise,\n}: AwaitOptions<T>): [T, DeferredPromise<T>] {\n const promise = defer(_promise)\n\n if (promise[TSR_DEFERRED_PROMISE].status === 'pending') {\n throw promise\n }\n\n if (promise[TSR_DEFERRED_PROMISE].status === 'error') {\n throw promise[TSR_DEFERRED_PROMISE].error\n }\n\n return [promise[TSR_DEFERRED_PROMISE].data, promise]\n}\n\nexport function Await<T>(\n props: AwaitOptions<T> & {\n fallback?: SolidNode\n children: (result: T) => SolidNode\n },\n) {\n const [resource] = Solid.createResource(\n () => defer(props.promise),\n // Simple passthrough - just return the promise for Solid to await\n (p) => p,\n {\n deferStream: true,\n },\n )\n\n return (\n <Solid.Show fallback={props.fallback} when={resource()}>\n {(data) => props.children(data())}\n </Solid.Show>\n )\n}\n"],"mappings":";;;;AAUA,SAAgBS,WAAc,EAC5BH,SAASI,YACkC;CAC3C,MAAMJ,UAAUJ,MAAMQ,SAAS;AAE/B,KAAIJ,QAAQL,sBAAsBU,WAAW,UAC3C,OAAML;AAGR,KAAIA,QAAQL,sBAAsBU,WAAW,QAC3C,OAAML,QAAQL,sBAAsBW;AAGtC,QAAO,CAACN,QAAQL,sBAAsBY,MAAMP,QAAQ;;AAGtD,SAAgBQ,MACdC,OAIA;CACA,MAAM,CAACI,YAAYnB,MAAMoB,qBACjBlB,MAAMa,MAAMT,QAAQ,GAEzBe,MAAMA,GACP,EACEC,aAAa,MAEjB,CAAC;AAED,QAAAC,gBACGvB,MAAMwB,MAAI;EAAA,IAACR,WAAQ;AAAA,UAAED,MAAMC;;EAAQ,IAAES,OAAI;AAAA,UAAEN,UAAU;;EAAAF,WAClDJ,SAASE,MAAME,SAASJ,MAAM,CAAA;EAAC,CAAA"}
1
+ {"version":3,"file":"awaited.js","names":["Solid","TSR_DEFERRED_PROMISE","defer","DeferredPromise","SolidNode","AwaitOptions","promise","Promise","T","useAwaited","_promise","status","error","data","Await","props","fallback","children","result","resource","createResource","p","deferStream","_$createComponent","Show","when","Suspense","AwaitInner"],"sources":["../../src/awaited.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\n\nimport { TSR_DEFERRED_PROMISE, defer } from '@tanstack/router-core'\nimport type { DeferredPromise } from '@tanstack/router-core'\nimport type { SolidNode } from './route'\n\nexport type AwaitOptions<T> = {\n promise: Promise<T>\n}\n\nexport function useAwaited<T>({\n promise: _promise,\n}: AwaitOptions<T>): [T, DeferredPromise<T>] {\n const promise = defer(_promise)\n\n if (promise[TSR_DEFERRED_PROMISE].status === 'pending') {\n throw promise\n }\n\n if (promise[TSR_DEFERRED_PROMISE].status === 'error') {\n throw promise[TSR_DEFERRED_PROMISE].error\n }\n\n return [promise[TSR_DEFERRED_PROMISE].data, promise]\n}\n\nexport function Await<T>(\n props: AwaitOptions<T> & {\n fallback?: SolidNode\n children: (result: T) => SolidNode\n },\n) {\n if (!('fallback' in props)) {\n const [resource] = Solid.createResource(\n () => defer(props.promise),\n (p) => p,\n {\n deferStream: true,\n },\n )\n\n return (\n <Solid.Show when={resource()}>\n {(data) => props.children(data())}\n </Solid.Show>\n )\n }\n\n return (\n <Solid.Suspense fallback={props.fallback}>\n <AwaitInner {...props} />\n </Solid.Suspense>\n )\n}\n\nfunction AwaitInner<T>(\n props: AwaitOptions<T> & {\n fallback?: SolidNode\n children: (result: T) => SolidNode\n },\n) {\n const [resource] = Solid.createResource(\n () => defer(props.promise),\n (p) => p,\n )\n\n return props.children(resource() as T)\n}\n"],"mappings":";;;;AAUA,SAAgBS,WAAc,EAC5BH,SAASI,YACkC;CAC3C,MAAMJ,UAAUJ,MAAMQ,SAAS;AAE/B,KAAIJ,QAAQL,sBAAsBU,WAAW,UAC3C,OAAML;AAGR,KAAIA,QAAQL,sBAAsBU,WAAW,QAC3C,OAAML,QAAQL,sBAAsBW;AAGtC,QAAO,CAACN,QAAQL,sBAAsBY,MAAMP,QAAQ;;AAGtD,SAAgBQ,MACdC,OAIA;AACA,KAAI,EAAE,cAAcA,QAAQ;EAC1B,MAAM,CAACI,YAAYnB,MAAMoB,qBACjBlB,MAAMa,MAAMT,QAAQ,GACzBe,MAAMA,GACP,EACEC,aAAa,MAEjB,CAAC;AAED,SAAAC,gBACGvB,MAAMwB,MAAI;GAAA,IAACC,OAAI;AAAA,WAAEN,UAAU;;GAAAF,WACxBJ,SAASE,MAAME,SAASJ,MAAM,CAAA;GAAC,CAAA;;AAKvC,QAAAU,gBACGvB,MAAM0B,UAAQ;EAAA,IAACV,WAAQ;AAAA,UAAED,MAAMC;;EAAQ,IAAAC,WAAA;AAAA,UAAAM,gBACrCI,YAAeZ,MAAK;;EAAA,CAAA;;AAK3B,SAASY,WACPZ,OAIA;CACA,MAAM,CAACI,YAAYnB,MAAMoB,qBACjBlB,MAAMa,MAAMT,QAAQ,GACzBe,MAAMA,EACR;AAED,QAAON,MAAME,SAASE,UAAU,CAAM"}
@@ -19,7 +19,11 @@ function useMatch(opts) {
19
19
  });
20
20
  return Solid.createMemo((prev) => {
21
21
  const selectedMatch = match();
22
- if (selectedMatch === void 0) return void 0;
22
+ if (selectedMatch === void 0) {
23
+ const hasPendingMatch = opts.from ? Boolean(router.stores.pendingRouteIds.get()[opts.from]) : nearestMatch?.hasPending() ?? false;
24
+ if (prev !== void 0 && (hasPendingMatch || router.stores.isTransitioning.get())) return prev;
25
+ return;
26
+ }
23
27
  const res = opts.select ? opts.select(selectedMatch) : selectedMatch;
24
28
  if (prev === void 0) return res;
25
29
  return replaceEqualDeep(prev, res);
@@ -1 +1 @@
1
- {"version":3,"file":"useMatch.js","names":["Solid","invariant","replaceEqualDeep","nearestMatchContext","useRouter","AnyRouter","MakeRouteMatch","MakeRouteMatchUnion","RegisteredRouter","StrictOrFrom","ThrowConstraint","ThrowOrOptional","UseMatchBaseOptions","select","match","TRouter","TFrom","TStrict","TSelected","shouldThrow","TThrow","UseMatchRoute","opts","Accessor","UseMatchResult","UseMatchOptions","useMatch","router","nearestMatch","from","undefined","useContext","stores","getRouteMatchStore","get","createEffect","hasPendingMatch","Boolean","pendingRouteIds","hasPending","isTransitioning","process","env","NODE_ENV","Error","createMemo","prev","selectedMatch","res"],"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 nearestMatch = opts.from\n ? undefined\n : Solid.useContext(nearestMatchContext)\n\n const match = () => {\n if (opts.from) {\n return router.stores.getRouteMatchStore(opts.from).get()\n }\n\n return nearestMatch?.match()\n }\n\n Solid.createEffect(() => {\n if (match() !== undefined) {\n return\n }\n\n const hasPendingMatch = opts.from\n ? Boolean(router.stores.pendingRouteIds.get()[opts.from!])\n : (nearestMatch?.hasPending() ?? false)\n\n if (\n !hasPendingMatch &&\n !router.stores.isTransitioning.get() &&\n (opts.shouldThrow ?? true)\n ) {\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) return undefined\n const res = opts.select ? opts.select(selectedMatch as any) : selectedMatch\n if (prev === undefined) return res as TSelected\n return replaceEqualDeep(prev, res) as TSelected\n }) as any\n}\n"],"mappings":";;;;;AAsDA,SAAgB0B,SAOdJ,MASA;CACA,MAAMK,SAASvB,WAAoB;CACnC,MAAMwB,eAAeN,KAAKO,OACtBC,KAAAA,IACA9B,MAAM+B,WAAW5B,oBAAoB;CAEzC,MAAMW,cAAc;AAClB,MAAIQ,KAAKO,KACP,QAAOF,OAAOK,OAAOC,mBAAmBX,KAAKO,KAAK,CAACK,KAAK;AAG1D,SAAON,cAAcd,OAAO;;AAG9Bd,OAAMmC,mBAAmB;AACvB,MAAIrB,OAAO,KAAKgB,KAAAA,EACd;AAOF,MACE,EALsBR,KAAKO,OACzBQ,QAAQV,OAAOK,OAAOM,gBAAgBJ,KAAK,CAACZ,KAAKO,MAAO,GACvDD,cAAcW,YAAY,IAAI,UAIjC,CAACZ,OAAOK,OAAOQ,gBAAgBN,KAAK,KACnCZ,KAAKH,eAAe,OACrB;AACA,OAAA,QAAA,IAAA,aAA6B,aAC3B,OAAM,IAAIyB,MACR,oCAAoCtB,KAAKO,OAAO,yBAAyBP,KAAKO,KAAI,KAAM,qBACzF;AAGH5B,cAAW;;GAEb;AAEF,QAAOD,MAAM6C,YAAYC,SAAgC;EACvD,MAAMC,gBAAgBjC,OAAO;AAE7B,MAAIiC,kBAAkBjB,KAAAA,EAAW,QAAOA,KAAAA;EACxC,MAAMkB,MAAM1B,KAAKT,SAASS,KAAKT,OAAOkC,cAAqB,GAAGA;AAC9D,MAAID,SAAShB,KAAAA,EAAW,QAAOkB;AAC/B,SAAO9C,iBAAiB4C,MAAME,IAAI;GAClC"}
1
+ {"version":3,"file":"useMatch.js","names":["Solid","invariant","replaceEqualDeep","nearestMatchContext","useRouter","AnyRouter","MakeRouteMatch","MakeRouteMatchUnion","RegisteredRouter","StrictOrFrom","ThrowConstraint","ThrowOrOptional","UseMatchBaseOptions","select","match","TRouter","TFrom","TStrict","TSelected","shouldThrow","TThrow","UseMatchRoute","opts","Accessor","UseMatchResult","UseMatchOptions","useMatch","router","nearestMatch","from","undefined","useContext","stores","getRouteMatchStore","get","createEffect","hasPendingMatch","Boolean","pendingRouteIds","hasPending","isTransitioning","process","env","NODE_ENV","Error","createMemo","prev","selectedMatch","res"],"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 nearestMatch = opts.from\n ? undefined\n : Solid.useContext(nearestMatchContext)\n\n const match = () => {\n if (opts.from) {\n return router.stores.getRouteMatchStore(opts.from).get()\n }\n\n return nearestMatch?.match()\n }\n\n Solid.createEffect(() => {\n if (match() !== undefined) {\n return\n }\n\n const hasPendingMatch = opts.from\n ? Boolean(router.stores.pendingRouteIds.get()[opts.from!])\n : (nearestMatch?.hasPending() ?? false)\n\n if (\n !hasPendingMatch &&\n !router.stores.isTransitioning.get() &&\n (opts.shouldThrow ?? true)\n ) {\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 const hasPendingMatch = opts.from\n ? Boolean(router.stores.pendingRouteIds.get()[opts.from!])\n : (nearestMatch?.hasPending() ?? false)\n\n if (\n prev !== undefined &&\n (hasPendingMatch || router.stores.isTransitioning.get())\n ) {\n return prev\n }\n\n return undefined\n }\n\n const res = opts.select ? opts.select(selectedMatch as any) : selectedMatch\n if (prev === undefined) return res as TSelected\n return replaceEqualDeep(prev, res) as TSelected\n }) as any\n}\n"],"mappings":";;;;;AAsDA,SAAgB0B,SAOdJ,MASA;CACA,MAAMK,SAASvB,WAAoB;CACnC,MAAMwB,eAAeN,KAAKO,OACtBC,KAAAA,IACA9B,MAAM+B,WAAW5B,oBAAoB;CAEzC,MAAMW,cAAc;AAClB,MAAIQ,KAAKO,KACP,QAAOF,OAAOK,OAAOC,mBAAmBX,KAAKO,KAAK,CAACK,KAAK;AAG1D,SAAON,cAAcd,OAAO;;AAG9Bd,OAAMmC,mBAAmB;AACvB,MAAIrB,OAAO,KAAKgB,KAAAA,EACd;AAOF,MACE,EALsBR,KAAKO,OACzBQ,QAAQV,OAAOK,OAAOM,gBAAgBJ,KAAK,CAACZ,KAAKO,MAAO,GACvDD,cAAcW,YAAY,IAAI,UAIjC,CAACZ,OAAOK,OAAOQ,gBAAgBN,KAAK,KACnCZ,KAAKH,eAAe,OACrB;AACA,OAAA,QAAA,IAAA,aAA6B,aAC3B,OAAM,IAAIyB,MACR,oCAAoCtB,KAAKO,OAAO,yBAAyBP,KAAKO,KAAI,KAAM,qBACzF;AAGH5B,cAAW;;GAEb;AAEF,QAAOD,MAAM6C,YAAYC,SAAgC;EACvD,MAAMC,gBAAgBjC,OAAO;AAE7B,MAAIiC,kBAAkBjB,KAAAA,GAAW;GAC/B,MAAMM,kBAAkBd,KAAKO,OACzBQ,QAAQV,OAAOK,OAAOM,gBAAgBJ,KAAK,CAACZ,KAAKO,MAAO,GACvDD,cAAcW,YAAY,IAAI;AAEnC,OACEO,SAAShB,KAAAA,MACRM,mBAAmBT,OAAOK,OAAOQ,gBAAgBN,KAAK,EAEvD,QAAOY;AAGT;;EAGF,MAAME,MAAM1B,KAAKT,SAASS,KAAKT,OAAOkC,cAAqB,GAAGA;AAC9D,MAAID,SAAShB,KAAAA,EAAW,QAAOkB;AAC/B,SAAO9C,iBAAiB4C,MAAME,IAAI;GAClC"}
@@ -11,13 +11,20 @@ export function useAwaited({ promise: _promise, }) {
11
11
  return [promise[TSR_DEFERRED_PROMISE].data, promise];
12
12
  }
13
13
  export function Await(props) {
14
- const [resource] = Solid.createResource(() => defer(props.promise),
15
- // Simple passthrough - just return the promise for Solid to await
16
- (p) => p, {
17
- deferStream: true,
18
- });
19
- return (<Solid.Show fallback={props.fallback} when={resource()}>
20
- {(data) => props.children(data())}
21
- </Solid.Show>);
14
+ if (!('fallback' in props)) {
15
+ const [resource] = Solid.createResource(() => defer(props.promise), (p) => p, {
16
+ deferStream: true,
17
+ });
18
+ return (<Solid.Show when={resource()}>
19
+ {(data) => props.children(data())}
20
+ </Solid.Show>);
21
+ }
22
+ return (<Solid.Suspense fallback={props.fallback}>
23
+ <AwaitInner {...props}/>
24
+ </Solid.Suspense>);
25
+ }
26
+ function AwaitInner(props) {
27
+ const [resource] = Solid.createResource(() => defer(props.promise), (p) => p);
28
+ return props.children(resource());
22
29
  }
23
30
  //# sourceMappingURL=awaited.jsx.map
@@ -1 +1 @@
1
- {"version":3,"file":"awaited.jsx","sourceRoot":"","sources":["../../src/awaited.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,UAAU,CAAA;AAEjC,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAQnE,MAAM,UAAU,UAAU,CAAI,EAC5B,OAAO,EAAE,QAAQ,GACD;IAChB,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;IAE/B,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACvD,MAAM,OAAO,CAAA;IACf,CAAC;IAED,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QACrD,MAAM,OAAO,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAA;IAC3C,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,KAAK,CACnB,KAGC;IAED,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,cAAc,CACrC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;IAC1B,kEAAkE;IAClE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EACR;QACE,WAAW,EAAE,IAAI;KAClB,CACF,CAAA;IAED,OAAO,CACL,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CACrD;MAAA,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CACnC;IAAA,EAAE,KAAK,CAAC,IAAI,CAAC,CACd,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"awaited.jsx","sourceRoot":"","sources":["../../src/awaited.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,UAAU,CAAA;AAEjC,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAQnE,MAAM,UAAU,UAAU,CAAI,EAC5B,OAAO,EAAE,QAAQ,GACD;IAChB,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;IAE/B,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACvD,MAAM,OAAO,CAAA;IACf,CAAC;IAED,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QACrD,MAAM,OAAO,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAA;IAC3C,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,KAAK,CACnB,KAGC;IAED,IAAI,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,cAAc,CACrC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EACR;YACE,WAAW,EAAE,IAAI;SAClB,CACF,CAAA;QAED,OAAO,CACL,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAC3B;QAAA,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CACnC;MAAA,EAAE,KAAK,CAAC,IAAI,CAAC,CACd,CAAA;IACH,CAAC;IAED,OAAO,CACL,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CACvC;MAAA,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,EACxB;IAAA,EAAE,KAAK,CAAC,QAAQ,CAAC,CAClB,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CACjB,KAGC;IAED,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,cAAc,CACrC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CACT,CAAA;IAED,OAAO,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAO,CAAC,CAAA;AACxC,CAAC"}
@@ -31,8 +31,16 @@ export function useMatch(opts) {
31
31
  });
32
32
  return Solid.createMemo((prev) => {
33
33
  const selectedMatch = match();
34
- if (selectedMatch === undefined)
34
+ if (selectedMatch === undefined) {
35
+ const hasPendingMatch = opts.from
36
+ ? Boolean(router.stores.pendingRouteIds.get()[opts.from])
37
+ : (nearestMatch?.hasPending() ?? false);
38
+ if (prev !== undefined &&
39
+ (hasPendingMatch || router.stores.isTransitioning.get())) {
40
+ return prev;
41
+ }
35
42
  return undefined;
43
+ }
36
44
  const res = opts.select ? opts.select(selectedMatch) : selectedMatch;
37
45
  if (prev === undefined)
38
46
  return res;
@@ -1 +1 @@
1
- {"version":3,"file":"useMatch.jsx","sourceRoot":"","sources":["../../src/useMatch.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAmDvC,MAAM,UAAU,QAAQ,CAOtB,IAMC;IAID,MAAM,MAAM,GAAG,SAAS,EAAW,CAAA;IACnC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI;QAC5B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAA;IAEzC,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAA;QAC1D,CAAC;QAED,OAAO,YAAY,EAAE,KAAK,EAAE,CAAA;IAC9B,CAAC,CAAA;IAED,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE;QACtB,IAAI,KAAK,EAAE,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAM;QACR,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI;YAC/B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAK,CAAC,CAAC;YAC1D,CAAC,CAAC,CAAC,YAAY,EAAE,UAAU,EAAE,IAAI,KAAK,CAAC,CAAA;QAEzC,IACE,CAAC,eAAe;YAChB,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE;YACpC,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,EAC1B,CAAC;YACD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CACb,oCAAoC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAC7G,CAAA;YACH,CAAC;YAED,SAAS,EAAE,CAAA;QACb,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC,IAA2B,EAAE,EAAE;QACtD,MAAM,aAAa,GAAG,KAAK,EAAE,CAAA;QAE7B,IAAI,aAAa,KAAK,SAAS;YAAE,OAAO,SAAS,CAAA;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,aAAoB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAA;QAC3E,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,GAAgB,CAAA;QAC/C,OAAO,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAc,CAAA;IACjD,CAAC,CAAQ,CAAA;AACX,CAAC"}
1
+ {"version":3,"file":"useMatch.jsx","sourceRoot":"","sources":["../../src/useMatch.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAmDvC,MAAM,UAAU,QAAQ,CAOtB,IAMC;IAID,MAAM,MAAM,GAAG,SAAS,EAAW,CAAA;IACnC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI;QAC5B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAA;IAEzC,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAA;QAC1D,CAAC;QAED,OAAO,YAAY,EAAE,KAAK,EAAE,CAAA;IAC9B,CAAC,CAAA;IAED,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE;QACtB,IAAI,KAAK,EAAE,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAM;QACR,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI;YAC/B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAK,CAAC,CAAC;YAC1D,CAAC,CAAC,CAAC,YAAY,EAAE,UAAU,EAAE,IAAI,KAAK,CAAC,CAAA;QAEzC,IACE,CAAC,eAAe;YAChB,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE;YACpC,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,EAC1B,CAAC;YACD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CACb,oCAAoC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAC7G,CAAA;YACH,CAAC;YAED,SAAS,EAAE,CAAA;QACb,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC,IAA2B,EAAE,EAAE;QACtD,MAAM,aAAa,GAAG,KAAK,EAAE,CAAA;QAE7B,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI;gBAC/B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAK,CAAC,CAAC;gBAC1D,CAAC,CAAC,CAAC,YAAY,EAAE,UAAU,EAAE,IAAI,KAAK,CAAC,CAAA;YAEzC,IACE,IAAI,KAAK,SAAS;gBAClB,CAAC,eAAe,IAAI,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,EACxD,CAAC;gBACD,OAAO,IAAI,CAAA;YACb,CAAC;YAED,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,aAAoB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAA;QAC3E,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,GAAgB,CAAA;QAC/C,OAAO,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAc,CAAA;IACjD,CAAC,CAAQ,CAAA;AACX,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/solid-router",
3
- "version": "1.168.22",
3
+ "version": "1.168.23",
4
4
  "description": "Modern and scalable routing for Solid applications",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
package/src/awaited.tsx CHANGED
@@ -29,19 +29,40 @@ export function Await<T>(
29
29
  fallback?: SolidNode
30
30
  children: (result: T) => SolidNode
31
31
  },
32
+ ) {
33
+ if (!('fallback' in props)) {
34
+ const [resource] = Solid.createResource(
35
+ () => defer(props.promise),
36
+ (p) => p,
37
+ {
38
+ deferStream: true,
39
+ },
40
+ )
41
+
42
+ return (
43
+ <Solid.Show when={resource()}>
44
+ {(data) => props.children(data())}
45
+ </Solid.Show>
46
+ )
47
+ }
48
+
49
+ return (
50
+ <Solid.Suspense fallback={props.fallback}>
51
+ <AwaitInner {...props} />
52
+ </Solid.Suspense>
53
+ )
54
+ }
55
+
56
+ function AwaitInner<T>(
57
+ props: AwaitOptions<T> & {
58
+ fallback?: SolidNode
59
+ children: (result: T) => SolidNode
60
+ },
32
61
  ) {
33
62
  const [resource] = Solid.createResource(
34
63
  () => defer(props.promise),
35
- // Simple passthrough - just return the promise for Solid to await
36
64
  (p) => p,
37
- {
38
- deferStream: true,
39
- },
40
65
  )
41
66
 
42
- return (
43
- <Solid.Show fallback={props.fallback} when={resource()}>
44
- {(data) => props.children(data())}
45
- </Solid.Show>
46
- )
67
+ return props.children(resource() as T)
47
68
  }
package/src/useMatch.tsx CHANGED
@@ -109,7 +109,21 @@ export function useMatch<
109
109
  return Solid.createMemo((prev: TSelected | undefined) => {
110
110
  const selectedMatch = match()
111
111
 
112
- if (selectedMatch === undefined) return undefined
112
+ if (selectedMatch === undefined) {
113
+ const hasPendingMatch = opts.from
114
+ ? Boolean(router.stores.pendingRouteIds.get()[opts.from!])
115
+ : (nearestMatch?.hasPending() ?? false)
116
+
117
+ if (
118
+ prev !== undefined &&
119
+ (hasPendingMatch || router.stores.isTransitioning.get())
120
+ ) {
121
+ return prev
122
+ }
123
+
124
+ return undefined
125
+ }
126
+
113
127
  const res = opts.select ? opts.select(selectedMatch as any) : selectedMatch
114
128
  if (prev === undefined) return res as TSelected
115
129
  return replaceEqualDeep(prev, res) as TSelected