@tanstack/solid-router 1.168.19 → 1.168.21
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.
- package/dist/cjs/Asset.cjs +13 -2
- package/dist/cjs/Asset.cjs.map +1 -1
- package/dist/cjs/Asset.d.cts +1 -1
- package/dist/cjs/Match.cjs +11 -5
- package/dist/cjs/Match.cjs.map +1 -1
- package/dist/cjs/headContentUtils.cjs +22 -7
- package/dist/cjs/headContentUtils.cjs.map +1 -1
- package/dist/esm/Asset.d.ts +1 -1
- package/dist/esm/Asset.js +13 -2
- package/dist/esm/Asset.js.map +1 -1
- package/dist/esm/Match.js +11 -5
- package/dist/esm/Match.js.map +1 -1
- package/dist/esm/headContentUtils.js +23 -8
- package/dist/esm/headContentUtils.js.map +1 -1
- package/dist/source/Asset.d.ts +1 -1
- package/dist/source/Asset.jsx +19 -1
- package/dist/source/Asset.jsx.map +1 -1
- package/dist/source/Match.jsx +12 -6
- package/dist/source/Match.jsx.map +1 -1
- package/dist/source/headContentUtils.jsx +33 -11
- package/dist/source/headContentUtils.jsx.map +1 -1
- package/package.json +2 -2
- package/src/Asset.tsx +36 -5
- package/src/Match.tsx +12 -7
- package/src/headContentUtils.tsx +36 -13
package/dist/cjs/Asset.cjs
CHANGED
|
@@ -6,12 +6,19 @@ let _tanstack_router_core_isServer = require("@tanstack/router-core/isServer");
|
|
|
6
6
|
let _solidjs_meta = require("@solidjs/meta");
|
|
7
7
|
//#region src/Asset.tsx
|
|
8
8
|
var _tmpl$ = /* @__PURE__ */ (0, solid_js_web.template)(`<script>`);
|
|
9
|
-
|
|
9
|
+
var INLINE_CSS_HYDRATION_ATTR = "data-tsr-inline-css";
|
|
10
|
+
function Asset(asset) {
|
|
11
|
+
const { tag, attrs, children } = asset;
|
|
10
12
|
switch (tag) {
|
|
11
13
|
case "title": return (0, solid_js_web.createComponent)(_solidjs_meta.Title, (0, solid_js_web.mergeProps)(attrs, { children }));
|
|
12
14
|
case "meta": return (0, solid_js_web.createComponent)(_solidjs_meta.Meta, attrs);
|
|
13
15
|
case "link": return (0, solid_js_web.createComponent)(_solidjs_meta.Link, attrs);
|
|
14
|
-
case "style":
|
|
16
|
+
case "style":
|
|
17
|
+
if (asset.inlineCss && (process.env.TSS_INLINE_CSS_ENABLED === "true" || process.env.TSS_INLINE_CSS_ENABLED === void 0 && _tanstack_router_core_isServer.isServer)) return (0, solid_js_web.createComponent)(InlineCssStyle, {
|
|
18
|
+
attrs,
|
|
19
|
+
children
|
|
20
|
+
});
|
|
21
|
+
return (0, solid_js_web.createComponent)(_solidjs_meta.Style, (0, solid_js_web.mergeProps)(attrs, { children }));
|
|
15
22
|
case "script": return (0, solid_js_web.createComponent)(Script, {
|
|
16
23
|
attrs,
|
|
17
24
|
children
|
|
@@ -19,6 +26,10 @@ function Asset({ tag, attrs, children }) {
|
|
|
19
26
|
default: return null;
|
|
20
27
|
}
|
|
21
28
|
}
|
|
29
|
+
function InlineCssStyle({ attrs, children }) {
|
|
30
|
+
const html = children === void 0 ? typeof document === "undefined" ? "" : document.querySelector(`style[${INLINE_CSS_HYDRATION_ATTR}]`)?.textContent ?? "" : children ?? "";
|
|
31
|
+
return (0, solid_js_web.createComponent)(_solidjs_meta.Style, (0, solid_js_web.mergeProps)(attrs, { [INLINE_CSS_HYDRATION_ATTR]: "" }, { children: html }));
|
|
32
|
+
}
|
|
22
33
|
function Script({ attrs, children }) {
|
|
23
34
|
const router = require_useRouter.useRouter();
|
|
24
35
|
const dataScript = typeof attrs?.type === "string" && attrs.type !== "" && attrs.type !== "text/javascript" && attrs.type !== "module";
|
package/dist/cjs/Asset.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Asset.cjs","names":["Link","Meta","Style","Title","onCleanup","onMount","isServer","useRouter","RouterManagedTag","JSX","Asset","tag","attrs","children","
|
|
1
|
+
{"version":3,"file":"Asset.cjs","names":["Link","Meta","Style","Title","onCleanup","onMount","isServer","useRouter","RouterManagedTag","JSX","INLINE_CSS_HYDRATION_ATTR","Asset","asset","Element","tag","attrs","children","_$createComponent","_$mergeProps","inlineCss","process","env","TSS_INLINE_CSS_ENABLED","undefined","InlineCssStyle","Script","Record","isInlineCssPlaceholder","html","document","querySelector","HTMLStyleElement","textContent","ScriptAttrs","key","src","router","dataScript","type","normSrc","base","baseURI","window","location","href","URL","existingScript","Array","from","querySelectorAll","find","el","HTMLScriptElement","script","createElement","value","Object","entries","setAttribute","String","head","appendChild","parentNode","removeChild","typeAttr","nonceAttr","nonce","sType","getAttribute","sNonce","_el$","_tmpl$","_$spread","_el$2","_el$3"],"sources":["../../src/Asset.tsx"],"sourcesContent":["import { Link, Meta, Style, Title } from '@solidjs/meta'\nimport { onCleanup, onMount } from 'solid-js'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { useRouter } from './useRouter'\nimport type { RouterManagedTag } from '@tanstack/router-core'\nimport type { JSX } from 'solid-js'\n\nconst INLINE_CSS_HYDRATION_ATTR = 'data-tsr-inline-css'\n\nexport function Asset(asset: RouterManagedTag): JSX.Element | null {\n const { tag, attrs, children } = asset\n\n switch (tag) {\n case 'title':\n return <Title {...attrs}>{children}</Title>\n case 'meta':\n return <Meta {...attrs} />\n case 'link':\n return <Link {...attrs} />\n case 'style':\n if (\n asset.inlineCss &&\n (process.env.TSS_INLINE_CSS_ENABLED === 'true' ||\n (process.env.TSS_INLINE_CSS_ENABLED === undefined && isServer))\n ) {\n return <InlineCssStyle attrs={attrs}>{children}</InlineCssStyle>\n }\n\n return <Style {...attrs}>{children}</Style>\n case 'script':\n return <Script attrs={attrs}>{children}</Script>\n default:\n return null\n }\n}\n\nfunction InlineCssStyle({\n attrs,\n children,\n}: {\n attrs?: Record<string, any>\n children?: RouterManagedTag['children']\n}) {\n const isInlineCssPlaceholder = children === undefined\n const html = isInlineCssPlaceholder\n ? typeof document === 'undefined'\n ? ''\n : (document.querySelector<HTMLStyleElement>(\n `style[${INLINE_CSS_HYDRATION_ATTR}]`,\n )?.textContent ?? '')\n : (children ?? '')\n\n return (\n <Style {...attrs} {...{ [INLINE_CSS_HYDRATION_ATTR]: '' }}>\n {html}\n </Style>\n )\n}\n\ninterface ScriptAttrs {\n [key: string]: string | boolean | undefined\n src?: string\n}\n\nfunction Script({\n attrs,\n children,\n}: {\n attrs?: ScriptAttrs\n children?: string\n}): JSX.Element | null {\n const router = useRouter()\n const dataScript =\n typeof attrs?.type === 'string' &&\n attrs.type !== '' &&\n attrs.type !== 'text/javascript' &&\n attrs.type !== 'module'\n\n onMount(() => {\n if (dataScript) return\n\n if (attrs?.src) {\n const normSrc = (() => {\n try {\n const base = document.baseURI || window.location.href\n return new URL(attrs.src, base).href\n } catch {\n return attrs.src\n }\n })()\n const existingScript = Array.from(\n document.querySelectorAll('script[src]'),\n ).find((el) => (el as HTMLScriptElement).src === normSrc)\n\n if (existingScript) {\n return\n }\n\n const script = document.createElement('script')\n\n for (const [key, value] of Object.entries(attrs)) {\n if (value !== undefined && value !== false) {\n script.setAttribute(\n key,\n typeof value === 'boolean' ? '' : String(value),\n )\n }\n }\n\n document.head.appendChild(script)\n\n onCleanup(() => {\n if (script.parentNode) {\n script.parentNode.removeChild(script)\n }\n })\n }\n\n if (typeof children === 'string') {\n const typeAttr =\n typeof attrs?.type === 'string' ? attrs.type : 'text/javascript'\n const nonceAttr =\n typeof attrs?.nonce === 'string' ? attrs.nonce : undefined\n const existingScript = Array.from(\n document.querySelectorAll('script:not([src])'),\n ).find((el) => {\n if (!(el instanceof HTMLScriptElement)) return false\n const sType = el.getAttribute('type') ?? 'text/javascript'\n const sNonce = el.getAttribute('nonce') ?? undefined\n return (\n el.textContent === children &&\n sType === typeAttr &&\n sNonce === nonceAttr\n )\n })\n\n if (existingScript) {\n return\n }\n\n const script = document.createElement('script')\n script.textContent = children\n\n if (attrs) {\n for (const [key, value] of Object.entries(attrs)) {\n if (value !== undefined && value !== false) {\n script.setAttribute(\n key,\n typeof value === 'boolean' ? '' : String(value),\n )\n }\n }\n }\n\n document.head.appendChild(script)\n\n onCleanup(() => {\n if (script.parentNode) {\n script.parentNode.removeChild(script)\n }\n })\n }\n })\n\n if (!(isServer ?? router.isServer)) {\n if (dataScript && typeof children === 'string') {\n return <script {...attrs} innerHTML={children} />\n }\n\n // render an empty script on the client just to avoid hydration errors\n return null\n }\n\n if (attrs?.src && typeof attrs.src === 'string') {\n return <script {...attrs} />\n }\n\n if (typeof children === 'string') {\n return <script {...attrs} innerHTML={children} />\n }\n\n return null\n}\n"],"mappings":";;;;;;;;AAOA,IAAMU,4BAA4B;AAElC,SAAgBC,MAAMC,OAA6C;CACjE,MAAM,EAAEE,KAAKC,OAAOC,aAAaJ;AAEjC,SAAQE,KAAR;EACE,KAAK,QACH,SAAA,GAAA,aAAA,iBAAQX,cAAAA,QAAAA,GAAAA,aAAAA,YAAUY,OAAK,EAAGC,UAAQ,CAAA,CAAA;EACpC,KAAK,OACH,SAAA,GAAA,aAAA,iBAAQf,cAAAA,MAASc,MAAK;EACxB,KAAK,OACH,SAAA,GAAA,aAAA,iBAAQf,cAAAA,MAASe,MAAK;EACxB,KAAK;AACH,OACEH,MAAMO,cACLC,QAAQC,IAAIC,2BAA2B,UACrCF,QAAQC,IAAIC,2BAA2BC,KAAAA,KAAajB,+BAAAA,UAEvD,SAAA,GAAA,aAAA,iBAAQkB,gBAAc;IAAQT;IAAQC;IAAQ,CAAA;AAGhD,WAAA,GAAA,aAAA,iBAAQd,cAAAA,QAAAA,GAAAA,aAAAA,YAAUa,OAAK,EAAGC,UAAQ,CAAA,CAAA;EACpC,KAAK,SACH,SAAA,GAAA,aAAA,iBAAQS,QAAM;GAAQV;GAAQC;GAAQ,CAAA;EACxC,QACE,QAAO;;;AAIb,SAASQ,eAAe,EACtBT,OACAC,YAIC;CAED,MAAMY,OADyBZ,aAAaO,KAAAA,IAExC,OAAOM,aAAa,cAClB,KACCA,SAASC,cACR,SAASpB,0BAAyB,GACnC,EAAEsB,eAAe,KACnBhB,YAAY;AAEjB,SAAA,GAAA,aAAA,iBACGd,cAAAA,QAAAA,GAAAA,aAAAA,YAAUa,OAAW,GAAGL,4BAA4B,IAAI,EAAA,EAAAM,UACtDY,MAAI,CAAA,CAAA;;AAUX,SAASH,OAAO,EACdV,OACAC,YAIqB;CACrB,MAAMoB,SAAS7B,kBAAAA,WAAW;CAC1B,MAAM8B,aACJ,OAAOtB,OAAOuB,SAAS,YACvBvB,MAAMuB,SAAS,MACfvB,MAAMuB,SAAS,qBACfvB,MAAMuB,SAAS;AAEjBjC,EAAAA,GAAAA,SAAAA,eAAc;AACZ,MAAIgC,WAAY;AAEhB,MAAItB,OAAOoB,KAAK;GACd,MAAMI,iBAAiB;AACrB,QAAI;KACF,MAAMC,OAAOX,SAASY,WAAWC,OAAOC,SAASC;AACjD,YAAO,IAAIC,IAAI9B,MAAMoB,KAAKK,KAAK,CAACI;YAC1B;AACN,YAAO7B,MAAMoB;;OAEb;AAKJ,OAJuBY,MAAMC,KAC3BnB,SAASoB,iBAAiB,cAC5B,CAAC,CAACC,MAAMC,OAAQA,GAAyBhB,QAAQI,QAAQ,CAGvD;GAGF,MAAMc,SAASxB,SAASyB,cAAc,SAAS;AAE/C,QAAK,MAAM,CAACpB,KAAKqB,UAAUC,OAAOC,QAAQ1C,MAAM,CAC9C,KAAIwC,UAAUhC,KAAAA,KAAagC,UAAU,MACnCF,QAAOK,aACLxB,KACA,OAAOqB,UAAU,YAAY,KAAKI,OAAOJ,MAC3C,CAAC;AAIL1B,YAAS+B,KAAKC,YAAYR,OAAO;AAEjCjD,IAAAA,GAAAA,SAAAA,iBAAgB;AACd,QAAIiD,OAAOS,WACTT,QAAOS,WAAWC,YAAYV,OAAO;KAEvC;;AAGJ,MAAI,OAAOrC,aAAa,UAAU;GAChC,MAAMgD,WACJ,OAAOjD,OAAOuB,SAAS,WAAWvB,MAAMuB,OAAO;GACjD,MAAM2B,YACJ,OAAOlD,OAAOmD,UAAU,WAAWnD,MAAMmD,QAAQ3C,KAAAA;AAcnD,OAbuBwB,MAAMC,KAC3BnB,SAASoB,iBAAiB,oBAC5B,CAAC,CAACC,MAAMC,OAAO;AACb,QAAI,EAAEA,cAAcC,mBAAoB,QAAO;IAC/C,MAAMe,QAAQhB,GAAGiB,aAAa,OAAO,IAAI;IACzC,MAAMC,SAASlB,GAAGiB,aAAa,QAAQ,IAAI7C,KAAAA;AAC3C,WACE4B,GAAGnB,gBAAgBhB,YACnBmD,UAAUH,YACVK,WAAWJ;KAEb,CAGA;GAGF,MAAMZ,SAASxB,SAASyB,cAAc,SAAS;AAC/CD,UAAOrB,cAAchB;AAErB,OAAID;SACG,MAAM,CAACmB,KAAKqB,UAAUC,OAAOC,QAAQ1C,MAAM,CAC9C,KAAIwC,UAAUhC,KAAAA,KAAagC,UAAU,MACnCF,QAAOK,aACLxB,KACA,OAAOqB,UAAU,YAAY,KAAKI,OAAOJ,MAC3C,CAAC;;AAKP1B,YAAS+B,KAAKC,YAAYR,OAAO;AAEjCjD,IAAAA,GAAAA,SAAAA,iBAAgB;AACd,QAAIiD,OAAOS,WACTT,QAAOS,WAAWC,YAAYV,OAAO;KAEvC;;GAEJ;AAEF,KAAI,EAAE/C,+BAAAA,YAAY8B,OAAO9B,WAAW;AAClC,MAAI+B,cAAc,OAAOrB,aAAa,SACpC,eAAA;GAAA,IAAAsD,OAAAC,QAAA;AAAAC,IAAAA,GAAAA,aAAAA,QAAAF,OAAAA,GAAAA,aAAAA,YAAmBvD,OAAK,EAAA,aAAaC,UAAQ,CAAA,EAAA,OAAA,MAAA;AAAA,UAAAsD;MAAA;AAI/C,SAAO;;AAGT,KAAIvD,OAAOoB,OAAO,OAAOpB,MAAMoB,QAAQ,SACrC,eAAA;EAAA,IAAAsC,QAAAF,QAAA;AAAAC,GAAAA,GAAAA,aAAAA,QAAAC,OAAmB1D,OAAK,OAAA,MAAA;AAAA,SAAA0D;KAAA;AAG1B,KAAI,OAAOzD,aAAa,SACtB,eAAA;EAAA,IAAA0D,QAAAH,QAAA;AAAAC,GAAAA,GAAAA,aAAAA,QAAAE,QAAAA,GAAAA,aAAAA,YAAmB3D,OAAK,EAAA,aAAaC,UAAQ,CAAA,EAAA,OAAA,MAAA;AAAA,SAAA0D;KAAA;AAG/C,QAAO"}
|
package/dist/cjs/Asset.d.cts
CHANGED
package/dist/cjs/Match.cjs
CHANGED
|
@@ -323,10 +323,17 @@ var Outlet = () => {
|
|
|
323
323
|
return router.stores.matchStores.get(id)?.get().status;
|
|
324
324
|
});
|
|
325
325
|
const shouldShowNotFound = () => childMatchStatus() !== "redirected" && parentGlobalNotFound();
|
|
326
|
+
const childRouteKey = solid_js.createMemo(() => {
|
|
327
|
+
if (shouldShowNotFound()) return void 0;
|
|
328
|
+
const cid = childMatchId();
|
|
329
|
+
if (!cid) return void 0;
|
|
330
|
+
return router.stores.matchStores.get(cid)?.routeId ?? cid;
|
|
331
|
+
});
|
|
326
332
|
return (0, solid_js_web.createComponent)(solid_js.Show, {
|
|
327
333
|
get when() {
|
|
328
|
-
return (
|
|
334
|
+
return childRouteKey();
|
|
329
335
|
},
|
|
336
|
+
keyed: true,
|
|
330
337
|
get fallback() {
|
|
331
338
|
return (0, solid_js_web.createComponent)(solid_js.Show, {
|
|
332
339
|
get when() {
|
|
@@ -335,15 +342,14 @@ var Outlet = () => {
|
|
|
335
342
|
children: (resolvedRoute) => require_renderRouteNotFound.renderRouteNotFound(router, resolvedRoute(), void 0)
|
|
336
343
|
});
|
|
337
344
|
},
|
|
338
|
-
children: (
|
|
339
|
-
const currentMatchId = solid_js.createMemo(() => childMatchIdAccessor());
|
|
345
|
+
children: (_routeKey) => {
|
|
340
346
|
return (0, solid_js_web.createComponent)(solid_js.Show, {
|
|
341
347
|
get when() {
|
|
342
348
|
return routeId() === _tanstack_router_core.rootRouteId;
|
|
343
349
|
},
|
|
344
350
|
get fallback() {
|
|
345
351
|
return (0, solid_js_web.createComponent)(Match, { get matchId() {
|
|
346
|
-
return
|
|
352
|
+
return childMatchId();
|
|
347
353
|
} });
|
|
348
354
|
},
|
|
349
355
|
get children() {
|
|
@@ -355,7 +361,7 @@ var Outlet = () => {
|
|
|
355
361
|
},
|
|
356
362
|
get children() {
|
|
357
363
|
return (0, solid_js_web.createComponent)(Match, { get matchId() {
|
|
358
|
-
return
|
|
364
|
+
return childMatchId();
|
|
359
365
|
} });
|
|
360
366
|
}
|
|
361
367
|
});
|
package/dist/cjs/Match.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Match.cjs","names":["Solid","createControlledPromise","getLocationChangeInfo","invariant","isNotFound","isRedirect","rootRouteId","isServer","Dynamic","CatchBoundary","ErrorComponent","useRouter","CatchNotFound","getNotFound","nearestMatchContext","SafeFragment","renderRouteNotFound","ScrollRestoration","AnyRoute","RootRouteOptions","Match","props","matchId","router","match","createMemo","id","undefined","stores","matchStores","get","rawMatchState","currentMatch","routeId","parentRouteId","routesById","parentRoute","ssr","_displayPending","hasPendingMatch","currentRouteId","Boolean","pendingRouteIds","nearestMatch","hasPending","_$createComponent","Show","when","children","currentMatchState","route","resolvePendingComponent","options","pendingComponent","defaultPendingComponent","routeErrorComponent","errorComponent","defaultErrorComponent","routeOnCatch","onCatch","defaultOnCatch","routeNotFoundComponent","isRoot","notFoundComponent","notFoundRoute","component","resolvedNoSsr","ResolvedSuspenseBoundary","Suspense","ResolvedCatchBoundary","ResolvedNotFoundBoundary","ShellComponent","shellComponent","Provider","value","fallback","_$memo","getResetKey","loadedAt","error","Error","notFoundError","process","env","NODE_ENV","console","warn","_$mergeProps","Switch","MatchInner","OnRendered","scrollRestoration","location","resolvedLocation","state","__TSR_key","createEffect","on","emit","type","useContext","remountFn","remountDeps","defaultRemountDeps","loaderDeps","params","_strictParams","search","_strictSearch","key","JSON","stringify","status","_forcePending","componentKey","out","Comp","defaultComponent","Outlet","getLoadPromise","fallbackMatch","_nonReactive","loadPromise","Promise","getMatch","keyedOut","keyed","_key","_","displayPendingResult","createResource","displayPendingPromise","minPendingResult","minPendingPromise","pendingMinMs","defaultPendingMinMs","routerMatch","setTimeout","resolve","loaderResult","r","FallbackComponent","_routeId","RouteErrorComponent","info","componentStack","nearestParentMatch","parentMatch","parentGlobalNotFound","globalNotFound","childMatchId","childMatchIdByRouteId","childMatchStatus","shouldShowNotFound","resolvedRoute","childMatchIdAccessor","currentMatchId"],"sources":["../../src/Match.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport {\n createControlledPromise,\n getLocationChangeInfo,\n invariant,\n isNotFound,\n isRedirect,\n rootRouteId,\n} from '@tanstack/router-core'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { Dynamic } from 'solid-js/web'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouter } from './useRouter'\nimport { CatchNotFound, getNotFound } from './not-found'\nimport { nearestMatchContext } from './matchContext'\nimport { SafeFragment } from './SafeFragment'\nimport { renderRouteNotFound } from './renderRouteNotFound'\nimport { ScrollRestoration } from './scroll-restoration'\nimport type { AnyRoute, RootRouteOptions } from '@tanstack/router-core'\n\nexport const Match = (props: { matchId: string }) => {\n const router = useRouter()\n\n const match = Solid.createMemo(() => {\n const id = props.matchId\n if (!id) return undefined\n return router.stores.matchStores.get(id)?.get()\n })\n\n const rawMatchState = Solid.createMemo(() => {\n const currentMatch = match()\n if (!currentMatch) {\n return null\n }\n\n const routeId = currentMatch.routeId as string\n const parentRouteId = (router.routesById[routeId] as AnyRoute)?.parentRoute\n ?.id\n\n return {\n matchId: currentMatch.id,\n routeId,\n ssr: currentMatch.ssr,\n _displayPending: currentMatch._displayPending,\n parentRouteId: parentRouteId as string | undefined,\n }\n })\n\n const hasPendingMatch = Solid.createMemo(() => {\n const currentRouteId = rawMatchState()?.routeId\n return currentRouteId\n ? Boolean(router.stores.pendingRouteIds.get()[currentRouteId])\n : false\n })\n const nearestMatch = {\n matchId: () => rawMatchState()?.matchId,\n routeId: () => rawMatchState()?.routeId,\n match,\n hasPending: hasPendingMatch,\n }\n\n return (\n <Solid.Show when={rawMatchState()}>\n {(currentMatchState) => {\n const route: () => AnyRoute = () =>\n router.routesById[currentMatchState().routeId]\n\n const resolvePendingComponent = () =>\n route().options.pendingComponent ??\n router.options.defaultPendingComponent\n\n const routeErrorComponent = () =>\n route().options.errorComponent ?? router.options.defaultErrorComponent\n\n const routeOnCatch = () =>\n route().options.onCatch ?? router.options.defaultOnCatch\n\n const routeNotFoundComponent = () =>\n route().isRoot\n ? // If it's the root route, use the globalNotFound option, with fallback to the notFoundRoute's component\n (route().options.notFoundComponent ??\n router.options.notFoundRoute?.options.component)\n : route().options.notFoundComponent\n\n const resolvedNoSsr =\n currentMatchState().ssr === false ||\n currentMatchState().ssr === 'data-only'\n\n const ResolvedSuspenseBoundary = () => Solid.Suspense\n\n const ResolvedCatchBoundary = () =>\n routeErrorComponent() ? CatchBoundary : SafeFragment\n\n const ResolvedNotFoundBoundary = () =>\n routeNotFoundComponent() ? CatchNotFound : SafeFragment\n\n const ShellComponent = route().isRoot\n ? ((route().options as RootRouteOptions).shellComponent ??\n SafeFragment)\n : SafeFragment\n\n return (\n <ShellComponent>\n <nearestMatchContext.Provider value={nearestMatch}>\n <Dynamic\n component={ResolvedSuspenseBoundary()}\n fallback={\n // Don't show fallback on server when using no-ssr mode to avoid hydration mismatch\n (isServer ?? router.isServer) && resolvedNoSsr ? undefined : (\n <Dynamic component={resolvePendingComponent()} />\n )\n }\n >\n <Dynamic\n component={ResolvedCatchBoundary()}\n getResetKey={() => router.stores.loadedAt.get()}\n errorComponent={routeErrorComponent() || ErrorComponent}\n onCatch={(error: Error) => {\n // Forward not found errors (we don't want to show the error component for these)\n const notFoundError = getNotFound(error)\n if (notFoundError) {\n notFoundError.routeId ??= currentMatchState()\n .routeId as any\n throw notFoundError\n }\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Warning: Error in route match: ${currentMatchState().routeId}`,\n )\n }\n routeOnCatch()?.(error)\n }}\n >\n <Dynamic\n component={ResolvedNotFoundBoundary()}\n fallback={(error: any) => {\n const notFoundError = getNotFound(error) ?? error\n\n notFoundError.routeId ??= currentMatchState()\n .routeId as any\n\n // If the current not found handler doesn't exist or it has a\n // route ID which doesn't match the current route, rethrow the error\n if (\n !routeNotFoundComponent() ||\n (notFoundError.routeId &&\n notFoundError.routeId !==\n currentMatchState().routeId) ||\n (!notFoundError.routeId && !route().isRoot)\n )\n throw notFoundError\n\n return (\n <Dynamic\n component={routeNotFoundComponent()}\n {...notFoundError}\n />\n )\n }}\n >\n <Solid.Switch>\n <Solid.Match when={resolvedNoSsr}>\n <Solid.Show\n when={!(isServer ?? router.isServer)}\n fallback={\n <Dynamic component={resolvePendingComponent()} />\n }\n >\n <MatchInner />\n </Solid.Show>\n </Solid.Match>\n <Solid.Match when={!resolvedNoSsr}>\n <MatchInner />\n </Solid.Match>\n </Solid.Switch>\n </Dynamic>\n </Dynamic>\n </Dynamic>\n </nearestMatchContext.Provider>\n\n {currentMatchState().parentRouteId === rootRouteId ? (\n <>\n <OnRendered />\n {router.options.scrollRestoration &&\n (isServer ?? router.isServer) ? (\n <ScrollRestoration />\n ) : null}\n </>\n ) : null}\n </ShellComponent>\n )\n }}\n </Solid.Show>\n )\n}\n\n// On Rendered can't happen above the root layout because it needs to run\n// after the app has committed below the root layout. Keeping it here lets us\n// fire onRendered even after a hydration mismatch above the root layout\n// (like bad head/link tags, which is common).\nfunction OnRendered() {\n const router = useRouter()\n\n const location = Solid.createMemo(\n () => router.stores.resolvedLocation.get()?.state.__TSR_key,\n )\n Solid.createEffect(\n Solid.on([location], () => {\n router.emit({\n type: 'onRendered',\n ...getLocationChangeInfo(\n router.stores.location.get(),\n router.stores.resolvedLocation.get(),\n ),\n })\n }),\n )\n return null\n}\n\nexport const MatchInner = (): any => {\n const router = useRouter()\n const match = Solid.useContext(nearestMatchContext).match\n\n const rawMatchState = Solid.createMemo(() => {\n const currentMatch = match()\n if (!currentMatch) {\n return null\n }\n\n const routeId = currentMatch.routeId as string\n\n const remountFn =\n (router.routesById[routeId] as AnyRoute).options.remountDeps ??\n router.options.defaultRemountDeps\n const remountDeps = remountFn?.({\n routeId,\n loaderDeps: currentMatch.loaderDeps,\n params: currentMatch._strictParams,\n search: currentMatch._strictSearch,\n })\n const key = remountDeps ? JSON.stringify(remountDeps) : undefined\n\n return {\n key,\n routeId,\n match: {\n id: currentMatch.id,\n status: currentMatch.status,\n error: currentMatch.error,\n _forcePending: currentMatch._forcePending ?? false,\n _displayPending: currentMatch._displayPending ?? false,\n },\n }\n })\n\n return (\n <Solid.Show when={rawMatchState()}>\n {(currentMatchState) => {\n const route = () => router.routesById[currentMatchState().routeId]!\n\n const currentMatch = () => currentMatchState().match\n\n const componentKey = () =>\n currentMatchState().key ?? currentMatchState().match.id\n\n const out = () => {\n const Comp =\n route().options.component ?? router.options.defaultComponent\n if (Comp) {\n return <Comp />\n }\n return <Outlet />\n }\n\n const getLoadPromise = (\n matchId: string,\n fallbackMatch:\n | {\n _nonReactive: {\n loadPromise?: Promise<void>\n }\n }\n | undefined,\n ) => {\n return (\n router.getMatch(matchId)?._nonReactive.loadPromise ??\n fallbackMatch?._nonReactive.loadPromise\n )\n }\n\n const keyedOut = () => (\n <Solid.Show when={componentKey()} keyed>\n {(_key) => out()}\n </Solid.Show>\n )\n\n return (\n <Solid.Switch>\n <Solid.Match when={currentMatch()._displayPending}>\n {(_) => {\n const [displayPendingResult] = Solid.createResource(\n () =>\n router.getMatch(currentMatch().id)?._nonReactive\n .displayPendingPromise,\n )\n\n return <>{displayPendingResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch()._forcePending}>\n {(_) => {\n const [minPendingResult] = Solid.createResource(\n () =>\n router.getMatch(currentMatch().id)?._nonReactive\n .minPendingPromise,\n )\n\n return <>{minPendingResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'pending'}>\n {(_) => {\n const pendingMinMs =\n route().options.pendingMinMs ??\n router.options.defaultPendingMinMs\n\n if (pendingMinMs) {\n const routerMatch = router.getMatch(currentMatch().id)\n if (\n routerMatch &&\n !routerMatch._nonReactive.minPendingPromise\n ) {\n // Create a promise that will resolve after the minPendingMs\n if (!(isServer ?? router.isServer)) {\n const minPendingPromise = createControlledPromise<void>()\n\n routerMatch._nonReactive.minPendingPromise =\n minPendingPromise\n\n setTimeout(() => {\n minPendingPromise.resolve()\n // We've handled the minPendingPromise, so we can delete it\n routerMatch._nonReactive.minPendingPromise = undefined\n }, pendingMinMs)\n }\n }\n }\n\n const [loaderResult] = Solid.createResource(async () => {\n await new Promise((r) => setTimeout(r, 0))\n return router.getMatch(currentMatch().id)?._nonReactive\n .loadPromise\n })\n\n const FallbackComponent =\n route().options.pendingComponent ??\n router.options.defaultPendingComponent\n\n return (\n <>\n {FallbackComponent && pendingMinMs > 0 ? (\n <Dynamic component={FallbackComponent} />\n ) : null}\n {loaderResult()}\n </>\n )\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'notFound'}>\n {(_) => {\n if (!isNotFound(currentMatch().error)) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n 'Invariant failed: Expected a notFound error',\n )\n }\n\n invariant()\n }\n\n // Use Show with keyed to ensure re-render when routeId changes\n return (\n <Solid.Show when={currentMatchState().routeId} keyed>\n {(_routeId) =>\n renderRouteNotFound(router, route(), currentMatch().error)\n }\n </Solid.Show>\n )\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'redirected'}>\n {(_) => {\n const matchId = currentMatch().id\n const routerMatch = router.getMatch(matchId)\n\n if (!isRedirect(currentMatch().error)) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n 'Invariant failed: Expected a redirect error',\n )\n }\n\n invariant()\n }\n\n const [loaderResult] = Solid.createResource(async () => {\n await new Promise((r) => setTimeout(r, 0))\n return getLoadPromise(matchId, routerMatch)\n })\n\n return <>{loaderResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'error'}>\n {(_) => {\n if (isServer ?? router.isServer) {\n const RouteErrorComponent =\n (route().options.errorComponent ??\n router.options.defaultErrorComponent) ||\n ErrorComponent\n\n return (\n <RouteErrorComponent\n error={currentMatch().error}\n info={{\n componentStack: '',\n }}\n />\n )\n }\n\n throw currentMatch().error\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'success'}>\n {keyedOut()}\n </Solid.Match>\n </Solid.Switch>\n )\n }}\n </Solid.Show>\n )\n}\n\nexport const Outlet = () => {\n const router = useRouter()\n const nearestParentMatch = Solid.useContext(nearestMatchContext)\n const parentMatch = nearestParentMatch.match\n const routeId = nearestParentMatch.routeId\n const route = Solid.createMemo(() =>\n routeId() ? router.routesById[routeId()!] : undefined,\n )\n\n const parentGlobalNotFound = Solid.createMemo(\n () => parentMatch()?.globalNotFound ?? false,\n )\n\n const childMatchId = Solid.createMemo(() => {\n const currentRouteId = routeId()\n return currentRouteId\n ? router.stores.childMatchIdByRouteId.get()[currentRouteId]\n : undefined\n })\n\n const childMatchStatus = Solid.createMemo(() => {\n const id = childMatchId()\n if (!id) return undefined\n return router.stores.matchStores.get(id)?.get().status\n })\n\n // Only show not-found if we're not in a redirected state\n const shouldShowNotFound = () =>\n childMatchStatus() !== 'redirected' && parentGlobalNotFound()\n\n return (\n <Solid.Show\n when={!shouldShowNotFound() && childMatchId()}\n fallback={\n <Solid.Show when={shouldShowNotFound() && route()}>\n {(resolvedRoute) =>\n renderRouteNotFound(router, resolvedRoute(), undefined)\n }\n </Solid.Show>\n }\n >\n {(childMatchIdAccessor) => {\n const currentMatchId = Solid.createMemo(() => childMatchIdAccessor())\n\n return (\n <Solid.Show\n when={routeId() === rootRouteId}\n fallback={<Match matchId={currentMatchId()} />}\n >\n <Solid.Suspense\n fallback={\n <Dynamic component={router.options.defaultPendingComponent} />\n }\n >\n <Match matchId={currentMatchId()} />\n </Solid.Suspense>\n </Solid.Show>\n )\n }}\n </Solid.Show>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Match.cjs","names":["Solid","createControlledPromise","getLocationChangeInfo","invariant","isNotFound","isRedirect","rootRouteId","isServer","Dynamic","CatchBoundary","ErrorComponent","useRouter","CatchNotFound","getNotFound","nearestMatchContext","SafeFragment","renderRouteNotFound","ScrollRestoration","AnyRoute","RootRouteOptions","Match","props","matchId","router","match","createMemo","id","undefined","stores","matchStores","get","rawMatchState","currentMatch","routeId","parentRouteId","routesById","parentRoute","ssr","_displayPending","hasPendingMatch","currentRouteId","Boolean","pendingRouteIds","nearestMatch","hasPending","_$createComponent","Show","when","children","currentMatchState","route","resolvePendingComponent","options","pendingComponent","defaultPendingComponent","routeErrorComponent","errorComponent","defaultErrorComponent","routeOnCatch","onCatch","defaultOnCatch","routeNotFoundComponent","isRoot","notFoundComponent","notFoundRoute","component","resolvedNoSsr","ResolvedSuspenseBoundary","Suspense","ResolvedCatchBoundary","ResolvedNotFoundBoundary","ShellComponent","shellComponent","Provider","value","fallback","_$memo","getResetKey","loadedAt","error","Error","notFoundError","process","env","NODE_ENV","console","warn","_$mergeProps","Switch","MatchInner","OnRendered","scrollRestoration","location","resolvedLocation","state","__TSR_key","createEffect","on","emit","type","useContext","remountFn","remountDeps","defaultRemountDeps","loaderDeps","params","_strictParams","search","_strictSearch","key","JSON","stringify","status","_forcePending","componentKey","out","Comp","defaultComponent","Outlet","getLoadPromise","fallbackMatch","_nonReactive","loadPromise","Promise","getMatch","keyedOut","keyed","_key","_","displayPendingResult","createResource","displayPendingPromise","minPendingResult","minPendingPromise","pendingMinMs","defaultPendingMinMs","routerMatch","setTimeout","resolve","loaderResult","r","FallbackComponent","_routeId","RouteErrorComponent","info","componentStack","nearestParentMatch","parentMatch","parentGlobalNotFound","globalNotFound","childMatchId","childMatchIdByRouteId","childMatchStatus","shouldShowNotFound","childRouteKey","cid","resolvedRoute","_routeKey"],"sources":["../../src/Match.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport {\n createControlledPromise,\n getLocationChangeInfo,\n invariant,\n isNotFound,\n isRedirect,\n rootRouteId,\n} from '@tanstack/router-core'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { Dynamic } from 'solid-js/web'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouter } from './useRouter'\nimport { CatchNotFound, getNotFound } from './not-found'\nimport { nearestMatchContext } from './matchContext'\nimport { SafeFragment } from './SafeFragment'\nimport { renderRouteNotFound } from './renderRouteNotFound'\nimport { ScrollRestoration } from './scroll-restoration'\nimport type { AnyRoute, RootRouteOptions } from '@tanstack/router-core'\n\nexport const Match = (props: { matchId: string }) => {\n const router = useRouter()\n\n const match = Solid.createMemo(() => {\n const id = props.matchId\n if (!id) return undefined\n return router.stores.matchStores.get(id)?.get()\n })\n\n const rawMatchState = Solid.createMemo(() => {\n const currentMatch = match()\n if (!currentMatch) {\n return null\n }\n\n const routeId = currentMatch.routeId as string\n const parentRouteId = (router.routesById[routeId] as AnyRoute)?.parentRoute\n ?.id\n\n return {\n matchId: currentMatch.id,\n routeId,\n ssr: currentMatch.ssr,\n _displayPending: currentMatch._displayPending,\n parentRouteId: parentRouteId as string | undefined,\n }\n })\n\n const hasPendingMatch = Solid.createMemo(() => {\n const currentRouteId = rawMatchState()?.routeId\n return currentRouteId\n ? Boolean(router.stores.pendingRouteIds.get()[currentRouteId])\n : false\n })\n const nearestMatch = {\n matchId: () => rawMatchState()?.matchId,\n routeId: () => rawMatchState()?.routeId,\n match,\n hasPending: hasPendingMatch,\n }\n\n return (\n <Solid.Show when={rawMatchState()}>\n {(currentMatchState) => {\n const route: () => AnyRoute = () =>\n router.routesById[currentMatchState().routeId]\n\n const resolvePendingComponent = () =>\n route().options.pendingComponent ??\n router.options.defaultPendingComponent\n\n const routeErrorComponent = () =>\n route().options.errorComponent ?? router.options.defaultErrorComponent\n\n const routeOnCatch = () =>\n route().options.onCatch ?? router.options.defaultOnCatch\n\n const routeNotFoundComponent = () =>\n route().isRoot\n ? // If it's the root route, use the globalNotFound option, with fallback to the notFoundRoute's component\n (route().options.notFoundComponent ??\n router.options.notFoundRoute?.options.component)\n : route().options.notFoundComponent\n\n const resolvedNoSsr =\n currentMatchState().ssr === false ||\n currentMatchState().ssr === 'data-only'\n\n const ResolvedSuspenseBoundary = () => Solid.Suspense\n\n const ResolvedCatchBoundary = () =>\n routeErrorComponent() ? CatchBoundary : SafeFragment\n\n const ResolvedNotFoundBoundary = () =>\n routeNotFoundComponent() ? CatchNotFound : SafeFragment\n\n const ShellComponent = route().isRoot\n ? ((route().options as RootRouteOptions).shellComponent ??\n SafeFragment)\n : SafeFragment\n\n return (\n <ShellComponent>\n <nearestMatchContext.Provider value={nearestMatch}>\n <Dynamic\n component={ResolvedSuspenseBoundary()}\n fallback={\n // Don't show fallback on server when using no-ssr mode to avoid hydration mismatch\n (isServer ?? router.isServer) && resolvedNoSsr ? undefined : (\n <Dynamic component={resolvePendingComponent()} />\n )\n }\n >\n <Dynamic\n component={ResolvedCatchBoundary()}\n getResetKey={() => router.stores.loadedAt.get()}\n errorComponent={routeErrorComponent() || ErrorComponent}\n onCatch={(error: Error) => {\n // Forward not found errors (we don't want to show the error component for these)\n const notFoundError = getNotFound(error)\n if (notFoundError) {\n notFoundError.routeId ??= currentMatchState()\n .routeId as any\n throw notFoundError\n }\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Warning: Error in route match: ${currentMatchState().routeId}`,\n )\n }\n routeOnCatch()?.(error)\n }}\n >\n <Dynamic\n component={ResolvedNotFoundBoundary()}\n fallback={(error: any) => {\n const notFoundError = getNotFound(error) ?? error\n\n notFoundError.routeId ??= currentMatchState()\n .routeId as any\n\n // If the current not found handler doesn't exist or it has a\n // route ID which doesn't match the current route, rethrow the error\n if (\n !routeNotFoundComponent() ||\n (notFoundError.routeId &&\n notFoundError.routeId !==\n currentMatchState().routeId) ||\n (!notFoundError.routeId && !route().isRoot)\n )\n throw notFoundError\n\n return (\n <Dynamic\n component={routeNotFoundComponent()}\n {...notFoundError}\n />\n )\n }}\n >\n <Solid.Switch>\n <Solid.Match when={resolvedNoSsr}>\n <Solid.Show\n when={!(isServer ?? router.isServer)}\n fallback={\n <Dynamic component={resolvePendingComponent()} />\n }\n >\n <MatchInner />\n </Solid.Show>\n </Solid.Match>\n <Solid.Match when={!resolvedNoSsr}>\n <MatchInner />\n </Solid.Match>\n </Solid.Switch>\n </Dynamic>\n </Dynamic>\n </Dynamic>\n </nearestMatchContext.Provider>\n\n {currentMatchState().parentRouteId === rootRouteId ? (\n <>\n <OnRendered />\n {router.options.scrollRestoration &&\n (isServer ?? router.isServer) ? (\n <ScrollRestoration />\n ) : null}\n </>\n ) : null}\n </ShellComponent>\n )\n }}\n </Solid.Show>\n )\n}\n\n// On Rendered can't happen above the root layout because it needs to run\n// after the app has committed below the root layout. Keeping it here lets us\n// fire onRendered even after a hydration mismatch above the root layout\n// (like bad head/link tags, which is common).\nfunction OnRendered() {\n const router = useRouter()\n\n const location = Solid.createMemo(\n () => router.stores.resolvedLocation.get()?.state.__TSR_key,\n )\n Solid.createEffect(\n Solid.on([location], () => {\n router.emit({\n type: 'onRendered',\n ...getLocationChangeInfo(\n router.stores.location.get(),\n router.stores.resolvedLocation.get(),\n ),\n })\n }),\n )\n return null\n}\n\nexport const MatchInner = (): any => {\n const router = useRouter()\n const match = Solid.useContext(nearestMatchContext).match\n\n const rawMatchState = Solid.createMemo(() => {\n const currentMatch = match()\n if (!currentMatch) {\n return null\n }\n\n const routeId = currentMatch.routeId as string\n\n const remountFn =\n (router.routesById[routeId] as AnyRoute).options.remountDeps ??\n router.options.defaultRemountDeps\n const remountDeps = remountFn?.({\n routeId,\n loaderDeps: currentMatch.loaderDeps,\n params: currentMatch._strictParams,\n search: currentMatch._strictSearch,\n })\n const key = remountDeps ? JSON.stringify(remountDeps) : undefined\n\n return {\n key,\n routeId,\n match: {\n id: currentMatch.id,\n status: currentMatch.status,\n error: currentMatch.error,\n _forcePending: currentMatch._forcePending ?? false,\n _displayPending: currentMatch._displayPending ?? false,\n },\n }\n })\n\n return (\n <Solid.Show when={rawMatchState()}>\n {(currentMatchState) => {\n const route = () => router.routesById[currentMatchState().routeId]!\n\n const currentMatch = () => currentMatchState().match\n\n const componentKey = () =>\n currentMatchState().key ?? currentMatchState().match.id\n\n const out = () => {\n const Comp =\n route().options.component ?? router.options.defaultComponent\n if (Comp) {\n return <Comp />\n }\n return <Outlet />\n }\n\n const getLoadPromise = (\n matchId: string,\n fallbackMatch:\n | {\n _nonReactive: {\n loadPromise?: Promise<void>\n }\n }\n | undefined,\n ) => {\n return (\n router.getMatch(matchId)?._nonReactive.loadPromise ??\n fallbackMatch?._nonReactive.loadPromise\n )\n }\n\n const keyedOut = () => (\n <Solid.Show when={componentKey()} keyed>\n {(_key) => out()}\n </Solid.Show>\n )\n\n return (\n <Solid.Switch>\n <Solid.Match when={currentMatch()._displayPending}>\n {(_) => {\n const [displayPendingResult] = Solid.createResource(\n () =>\n router.getMatch(currentMatch().id)?._nonReactive\n .displayPendingPromise,\n )\n\n return <>{displayPendingResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch()._forcePending}>\n {(_) => {\n const [minPendingResult] = Solid.createResource(\n () =>\n router.getMatch(currentMatch().id)?._nonReactive\n .minPendingPromise,\n )\n\n return <>{minPendingResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'pending'}>\n {(_) => {\n const pendingMinMs =\n route().options.pendingMinMs ??\n router.options.defaultPendingMinMs\n\n if (pendingMinMs) {\n const routerMatch = router.getMatch(currentMatch().id)\n if (\n routerMatch &&\n !routerMatch._nonReactive.minPendingPromise\n ) {\n // Create a promise that will resolve after the minPendingMs\n if (!(isServer ?? router.isServer)) {\n const minPendingPromise = createControlledPromise<void>()\n\n routerMatch._nonReactive.minPendingPromise =\n minPendingPromise\n\n setTimeout(() => {\n minPendingPromise.resolve()\n // We've handled the minPendingPromise, so we can delete it\n routerMatch._nonReactive.minPendingPromise = undefined\n }, pendingMinMs)\n }\n }\n }\n\n const [loaderResult] = Solid.createResource(async () => {\n await new Promise((r) => setTimeout(r, 0))\n return router.getMatch(currentMatch().id)?._nonReactive\n .loadPromise\n })\n\n const FallbackComponent =\n route().options.pendingComponent ??\n router.options.defaultPendingComponent\n\n return (\n <>\n {FallbackComponent && pendingMinMs > 0 ? (\n <Dynamic component={FallbackComponent} />\n ) : null}\n {loaderResult()}\n </>\n )\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'notFound'}>\n {(_) => {\n if (!isNotFound(currentMatch().error)) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n 'Invariant failed: Expected a notFound error',\n )\n }\n\n invariant()\n }\n\n // Use Show with keyed to ensure re-render when routeId changes\n return (\n <Solid.Show when={currentMatchState().routeId} keyed>\n {(_routeId) =>\n renderRouteNotFound(router, route(), currentMatch().error)\n }\n </Solid.Show>\n )\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'redirected'}>\n {(_) => {\n const matchId = currentMatch().id\n const routerMatch = router.getMatch(matchId)\n\n if (!isRedirect(currentMatch().error)) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n 'Invariant failed: Expected a redirect error',\n )\n }\n\n invariant()\n }\n\n const [loaderResult] = Solid.createResource(async () => {\n await new Promise((r) => setTimeout(r, 0))\n return getLoadPromise(matchId, routerMatch)\n })\n\n return <>{loaderResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'error'}>\n {(_) => {\n if (isServer ?? router.isServer) {\n const RouteErrorComponent =\n (route().options.errorComponent ??\n router.options.defaultErrorComponent) ||\n ErrorComponent\n\n return (\n <RouteErrorComponent\n error={currentMatch().error}\n info={{\n componentStack: '',\n }}\n />\n )\n }\n\n throw currentMatch().error\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'success'}>\n {keyedOut()}\n </Solid.Match>\n </Solid.Switch>\n )\n }}\n </Solid.Show>\n )\n}\n\nexport const Outlet = () => {\n const router = useRouter()\n const nearestParentMatch = Solid.useContext(nearestMatchContext)\n const parentMatch = nearestParentMatch.match\n const routeId = nearestParentMatch.routeId\n const route = Solid.createMemo(() =>\n routeId() ? router.routesById[routeId()!] : undefined,\n )\n\n const parentGlobalNotFound = Solid.createMemo(\n () => parentMatch()?.globalNotFound ?? false,\n )\n\n const childMatchId = Solid.createMemo(() => {\n const currentRouteId = routeId()\n return currentRouteId\n ? router.stores.childMatchIdByRouteId.get()[currentRouteId]\n : undefined\n })\n\n const childMatchStatus = Solid.createMemo(() => {\n const id = childMatchId()\n if (!id) return undefined\n return router.stores.matchStores.get(id)?.get().status\n })\n\n const shouldShowNotFound = () =>\n childMatchStatus() !== 'redirected' && parentGlobalNotFound()\n\n const childRouteKey = Solid.createMemo(() => {\n if (shouldShowNotFound()) return undefined\n const cid = childMatchId()\n if (!cid) return undefined\n return router.stores.matchStores.get(cid)?.routeId ?? cid\n })\n\n return (\n <Solid.Show\n when={childRouteKey()}\n keyed\n fallback={\n <Solid.Show when={shouldShowNotFound() && route()}>\n {(resolvedRoute) =>\n renderRouteNotFound(router, resolvedRoute(), undefined)\n }\n </Solid.Show>\n }\n >\n {(_routeKey: string) => {\n return (\n <Solid.Show\n when={routeId() === rootRouteId}\n fallback={<Match matchId={childMatchId()!} />}\n >\n <Solid.Suspense\n fallback={\n <Dynamic component={router.options.defaultPendingComponent} />\n }\n >\n <Match matchId={childMatchId()!} />\n </Solid.Suspense>\n </Solid.Show>\n )\n }}\n </Solid.Show>\n )\n}\n"],"mappings":"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"}
|
|
@@ -71,14 +71,29 @@ var useTags = (assetCrossOrigin) => {
|
|
|
71
71
|
}
|
|
72
72
|
}));
|
|
73
73
|
const manifest = router.ssr?.manifest;
|
|
74
|
-
const assets = matches.map((match) => manifest?.routes[match.routeId]?.assets ?? []).filter(Boolean).flat(1).
|
|
75
|
-
tag
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
74
|
+
const assets = matches.map((match) => manifest?.routes[match.routeId]?.assets ?? []).filter(Boolean).flat(1).flatMap((asset) => {
|
|
75
|
+
if (asset.tag === "link") {
|
|
76
|
+
if ((0, _tanstack_router_core.isInlinableStylesheet)(manifest, asset)) return [];
|
|
77
|
+
return [{
|
|
78
|
+
tag: "link",
|
|
79
|
+
attrs: {
|
|
80
|
+
...asset.attrs,
|
|
81
|
+
crossOrigin: (0, _tanstack_router_core.getAssetCrossOrigin)(assetCrossOrigin, "stylesheet") ?? asset.attrs?.crossOrigin,
|
|
82
|
+
nonce
|
|
83
|
+
}
|
|
84
|
+
}];
|
|
80
85
|
}
|
|
81
|
-
|
|
86
|
+
if (asset.tag === "style") return [{
|
|
87
|
+
tag: "style",
|
|
88
|
+
attrs: {
|
|
89
|
+
...asset.attrs,
|
|
90
|
+
nonce
|
|
91
|
+
},
|
|
92
|
+
children: asset.children,
|
|
93
|
+
...asset.inlineCss ? { inlineCss: true } : {}
|
|
94
|
+
}];
|
|
95
|
+
return [];
|
|
96
|
+
});
|
|
82
97
|
return [...constructed, ...assets];
|
|
83
98
|
});
|
|
84
99
|
const preloadLinks = solid_js.createMemo(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headContentUtils.cjs","names":["Solid","escapeHtml","getAssetCrossOrigin","replaceEqualDeep","resolveManifestAssetLink","useRouter","AssetCrossOriginConfig","RouterManagedTag","useTags","assetCrossOrigin","router","nonce","options","ssr","activeMatches","createMemo","stores","matches","get","routeMeta","map","match","meta","filter","Boolean","Accessor","Array","resultMeta","metaByAttribute","Record","title","routeMetasArray","i","length","metas","j","m","tag","children","json","JSON","stringify","push","attrs","type","attribute","name","property","content","reverse","links","constructed","flat","link","manifest","assets","routes","routeId","asset","crossOrigin","preloadLinks","looseRoutesById","forEach","route","id","preloads","preload","preloadLink","rel","href","styles","style","headScripts","script","prev","next","uniqBy","d","undefined","arr","T","fn","item","seen","Set","key","has","add"],"sources":["../../src/headContentUtils.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport {\n escapeHtml,\n getAssetCrossOrigin,\n replaceEqualDeep,\n resolveManifestAssetLink,\n} from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport type {\n AssetCrossOriginConfig,\n RouterManagedTag,\n} from '@tanstack/router-core'\n\n/**\n * Build the list of head/link/meta/script tags to render for active matches.\n * Used internally by `HeadContent`.\n */\nexport const useTags = (assetCrossOrigin?: AssetCrossOriginConfig) => {\n const router = useRouter()\n const nonce = router.options.ssr?.nonce\n const activeMatches = Solid.createMemo(() => router.stores.matches.get())\n const routeMeta = Solid.createMemo(() =>\n activeMatches()\n .map((match) => match.meta!)\n .filter(Boolean),\n )\n\n const meta: Solid.Accessor<Array<RouterManagedTag>> = Solid.createMemo(() => {\n const resultMeta: Array<RouterManagedTag> = []\n const metaByAttribute: Record<string, true> = {}\n let title: RouterManagedTag | undefined\n const routeMetasArray = routeMeta()\n for (let i = routeMetasArray.length - 1; i >= 0; i--) {\n const metas = routeMetasArray[i]!\n for (let j = metas.length - 1; j >= 0; j--) {\n const m = metas[j]\n if (!m) continue\n\n if (m.title) {\n if (!title) {\n title = {\n tag: 'title',\n children: m.title,\n }\n }\n } else if ('script:ld+json' in m) {\n // Handle JSON-LD structured data\n // Content is HTML-escaped to prevent XSS when injected via innerHTML\n try {\n const json = JSON.stringify(m['script:ld+json'])\n resultMeta.push({\n tag: 'script',\n attrs: {\n type: 'application/ld+json',\n },\n children: escapeHtml(json),\n })\n } catch {\n // Skip invalid JSON-LD objects\n }\n } else {\n const attribute = m.name ?? m.property\n if (attribute) {\n if (metaByAttribute[attribute]) {\n continue\n } else {\n metaByAttribute[attribute] = true\n }\n }\n\n resultMeta.push({\n tag: 'meta',\n attrs: {\n ...m,\n nonce,\n },\n })\n }\n }\n }\n\n if (title) {\n resultMeta.push(title)\n }\n\n if (router.options.ssr?.nonce) {\n resultMeta.push({\n tag: 'meta',\n attrs: {\n property: 'csp-nonce',\n content: router.options.ssr.nonce,\n },\n })\n }\n resultMeta.reverse()\n\n return resultMeta\n })\n\n const links = Solid.createMemo(() => {\n const matches = activeMatches()\n const constructed = matches\n .map((match) => match.links!)\n .filter(Boolean)\n .flat(1)\n .map((link) => ({\n tag: 'link',\n attrs: {\n ...link,\n nonce,\n },\n })) satisfies Array<RouterManagedTag>\n\n const manifest = router.ssr?.manifest\n\n const assets = matches\n .map((match) => manifest?.routes[match.routeId]?.assets ?? [])\n .filter(Boolean)\n .flat(1)\n .filter((asset) => asset.tag === 'link')\n .map(\n (asset) =>\n ({\n tag: 'link',\n attrs: {\n ...asset.attrs,\n crossOrigin:\n getAssetCrossOrigin(assetCrossOrigin, 'stylesheet') ??\n asset.attrs?.crossOrigin,\n nonce,\n },\n }) satisfies RouterManagedTag,\n )\n\n return [...constructed, ...assets]\n })\n\n const preloadLinks = Solid.createMemo(() => {\n const matches = activeMatches()\n const preloadLinks: Array<RouterManagedTag> = []\n\n matches\n .map((match) => router.looseRoutesById[match.routeId]!)\n .forEach((route) =>\n router.ssr?.manifest?.routes[route.id]?.preloads\n ?.filter(Boolean)\n .forEach((preload) => {\n const preloadLink = resolveManifestAssetLink(preload)\n preloadLinks.push({\n tag: 'link',\n attrs: {\n rel: 'modulepreload',\n href: preloadLink.href,\n crossOrigin:\n getAssetCrossOrigin(assetCrossOrigin, 'modulepreload') ??\n preloadLink.crossOrigin,\n nonce,\n },\n })\n }),\n )\n\n return preloadLinks\n })\n\n const styles = Solid.createMemo(() =>\n (\n activeMatches()\n .map((match) => match.styles!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...style }) => ({\n tag: 'style',\n attrs: {\n ...style,\n nonce,\n },\n children,\n })),\n )\n\n const headScripts = Solid.createMemo(() =>\n (\n activeMatches()\n .map((match) => match.headScripts!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...script }) => ({\n tag: 'script',\n attrs: {\n ...script,\n nonce,\n },\n children,\n })),\n )\n\n return Solid.createMemo((prev: Array<RouterManagedTag> | undefined) => {\n const next = uniqBy(\n [\n ...meta(),\n ...preloadLinks(),\n ...links(),\n ...styles(),\n ...headScripts(),\n ] as Array<RouterManagedTag>,\n (d) => {\n return JSON.stringify(d)\n },\n )\n if (prev === undefined) {\n return next\n }\n return replaceEqualDeep(prev, next)\n })\n}\n\nexport function uniqBy<T>(arr: Array<T>, fn: (item: T) => string) {\n const seen = new Set<string>()\n return arr.filter((item) => {\n const key = fn(item)\n if (seen.has(key)) {\n return false\n }\n seen.add(key)\n return true\n })\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"headContentUtils.cjs","names":["Solid","escapeHtml","getAssetCrossOrigin","isInlinableStylesheet","replaceEqualDeep","resolveManifestAssetLink","useRouter","AssetCrossOriginConfig","RouterManagedTag","useTags","assetCrossOrigin","router","nonce","options","ssr","activeMatches","createMemo","stores","matches","get","routeMeta","map","match","meta","filter","Boolean","Accessor","Array","resultMeta","metaByAttribute","Record","title","routeMetasArray","i","length","metas","j","m","tag","children","json","JSON","stringify","push","attrs","type","attribute","name","property","content","reverse","links","constructed","flat","link","manifest","assets","routes","routeId","flatMap","asset","crossOrigin","inlineCss","const","preloadLinks","looseRoutesById","forEach","route","id","preloads","preload","preloadLink","rel","href","styles","style","headScripts","script","prev","next","uniqBy","d","undefined","arr","T","fn","item","seen","Set","key","has","add"],"sources":["../../src/headContentUtils.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport {\n escapeHtml,\n getAssetCrossOrigin,\n isInlinableStylesheet,\n replaceEqualDeep,\n resolveManifestAssetLink,\n} from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport type {\n AssetCrossOriginConfig,\n RouterManagedTag,\n} from '@tanstack/router-core'\n\n/**\n * Build the list of head/link/meta/script tags to render for active matches.\n * Used internally by `HeadContent`.\n */\nexport const useTags = (assetCrossOrigin?: AssetCrossOriginConfig) => {\n const router = useRouter()\n const nonce = router.options.ssr?.nonce\n const activeMatches = Solid.createMemo(() => router.stores.matches.get())\n const routeMeta = Solid.createMemo(() =>\n activeMatches()\n .map((match) => match.meta!)\n .filter(Boolean),\n )\n\n const meta: Solid.Accessor<Array<RouterManagedTag>> = Solid.createMemo(() => {\n const resultMeta: Array<RouterManagedTag> = []\n const metaByAttribute: Record<string, true> = {}\n let title: RouterManagedTag | undefined\n const routeMetasArray = routeMeta()\n for (let i = routeMetasArray.length - 1; i >= 0; i--) {\n const metas = routeMetasArray[i]!\n for (let j = metas.length - 1; j >= 0; j--) {\n const m = metas[j]\n if (!m) continue\n\n if (m.title) {\n if (!title) {\n title = {\n tag: 'title',\n children: m.title,\n }\n }\n } else if ('script:ld+json' in m) {\n // Handle JSON-LD structured data\n // Content is HTML-escaped to prevent XSS when injected via innerHTML\n try {\n const json = JSON.stringify(m['script:ld+json'])\n resultMeta.push({\n tag: 'script',\n attrs: {\n type: 'application/ld+json',\n },\n children: escapeHtml(json),\n })\n } catch {\n // Skip invalid JSON-LD objects\n }\n } else {\n const attribute = m.name ?? m.property\n if (attribute) {\n if (metaByAttribute[attribute]) {\n continue\n } else {\n metaByAttribute[attribute] = true\n }\n }\n\n resultMeta.push({\n tag: 'meta',\n attrs: {\n ...m,\n nonce,\n },\n })\n }\n }\n }\n\n if (title) {\n resultMeta.push(title)\n }\n\n if (router.options.ssr?.nonce) {\n resultMeta.push({\n tag: 'meta',\n attrs: {\n property: 'csp-nonce',\n content: router.options.ssr.nonce,\n },\n })\n }\n resultMeta.reverse()\n\n return resultMeta\n })\n\n const links = Solid.createMemo(() => {\n const matches = activeMatches()\n const constructed = matches\n .map((match) => match.links!)\n .filter(Boolean)\n .flat(1)\n .map((link) => ({\n tag: 'link',\n attrs: {\n ...link,\n nonce,\n },\n })) satisfies Array<RouterManagedTag>\n\n const manifest = router.ssr?.manifest\n\n const assets = matches\n .map((match) => manifest?.routes[match.routeId]?.assets ?? [])\n .filter(Boolean)\n .flat(1)\n .flatMap((asset): Array<RouterManagedTag> => {\n if (asset.tag === 'link') {\n if (isInlinableStylesheet(manifest, asset)) {\n return []\n }\n\n return [\n {\n tag: 'link',\n attrs: {\n ...asset.attrs,\n crossOrigin:\n getAssetCrossOrigin(assetCrossOrigin, 'stylesheet') ??\n asset.attrs?.crossOrigin,\n nonce,\n },\n },\n ]\n }\n\n if (asset.tag === 'style') {\n return [\n {\n tag: 'style',\n attrs: {\n ...asset.attrs,\n nonce,\n },\n children: asset.children,\n ...(asset.inlineCss ? { inlineCss: true as const } : {}),\n },\n ]\n }\n\n return []\n })\n\n return [...constructed, ...assets]\n })\n\n const preloadLinks = Solid.createMemo(() => {\n const matches = activeMatches()\n const preloadLinks: Array<RouterManagedTag> = []\n\n matches\n .map((match) => router.looseRoutesById[match.routeId]!)\n .forEach((route) =>\n router.ssr?.manifest?.routes[route.id]?.preloads\n ?.filter(Boolean)\n .forEach((preload) => {\n const preloadLink = resolveManifestAssetLink(preload)\n preloadLinks.push({\n tag: 'link',\n attrs: {\n rel: 'modulepreload',\n href: preloadLink.href,\n crossOrigin:\n getAssetCrossOrigin(assetCrossOrigin, 'modulepreload') ??\n preloadLink.crossOrigin,\n nonce,\n },\n })\n }),\n )\n\n return preloadLinks\n })\n\n const styles = Solid.createMemo(() =>\n (\n activeMatches()\n .map((match) => match.styles!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...style }) => ({\n tag: 'style',\n attrs: {\n ...style,\n nonce,\n },\n children,\n })),\n )\n\n const headScripts = Solid.createMemo(() =>\n (\n activeMatches()\n .map((match) => match.headScripts!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...script }) => ({\n tag: 'script',\n attrs: {\n ...script,\n nonce,\n },\n children,\n })),\n )\n\n return Solid.createMemo((prev: Array<RouterManagedTag> | undefined) => {\n const next = uniqBy(\n [\n ...meta(),\n ...preloadLinks(),\n ...links(),\n ...styles(),\n ...headScripts(),\n ] as Array<RouterManagedTag>,\n (d) => {\n return JSON.stringify(d)\n },\n )\n if (prev === undefined) {\n return next\n }\n return replaceEqualDeep(prev, next)\n })\n}\n\nexport function uniqBy<T>(arr: Array<T>, fn: (item: T) => string) {\n const seen = new Set<string>()\n return arr.filter((item) => {\n const key = fn(item)\n if (seen.has(key)) {\n return false\n }\n seen.add(key)\n return true\n })\n}\n"],"mappings":"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"}
|
package/dist/esm/Asset.d.ts
CHANGED
package/dist/esm/Asset.js
CHANGED
|
@@ -5,12 +5,19 @@ import { isServer } from "@tanstack/router-core/isServer";
|
|
|
5
5
|
import { Link, Meta, Style, Title } from "@solidjs/meta";
|
|
6
6
|
//#region src/Asset.tsx
|
|
7
7
|
var _tmpl$ = /* @__PURE__ */ template(`<script>`);
|
|
8
|
-
|
|
8
|
+
var INLINE_CSS_HYDRATION_ATTR = "data-tsr-inline-css";
|
|
9
|
+
function Asset(asset) {
|
|
10
|
+
const { tag, attrs, children } = asset;
|
|
9
11
|
switch (tag) {
|
|
10
12
|
case "title": return createComponent(Title, mergeProps(attrs, { children }));
|
|
11
13
|
case "meta": return createComponent(Meta, attrs);
|
|
12
14
|
case "link": return createComponent(Link, attrs);
|
|
13
|
-
case "style":
|
|
15
|
+
case "style":
|
|
16
|
+
if (asset.inlineCss && (process.env.TSS_INLINE_CSS_ENABLED === "true" || process.env.TSS_INLINE_CSS_ENABLED === void 0 && isServer)) return createComponent(InlineCssStyle, {
|
|
17
|
+
attrs,
|
|
18
|
+
children
|
|
19
|
+
});
|
|
20
|
+
return createComponent(Style, mergeProps(attrs, { children }));
|
|
14
21
|
case "script": return createComponent(Script, {
|
|
15
22
|
attrs,
|
|
16
23
|
children
|
|
@@ -18,6 +25,10 @@ function Asset({ tag, attrs, children }) {
|
|
|
18
25
|
default: return null;
|
|
19
26
|
}
|
|
20
27
|
}
|
|
28
|
+
function InlineCssStyle({ attrs, children }) {
|
|
29
|
+
const html = children === void 0 ? typeof document === "undefined" ? "" : document.querySelector(`style[${INLINE_CSS_HYDRATION_ATTR}]`)?.textContent ?? "" : children ?? "";
|
|
30
|
+
return createComponent(Style, mergeProps(attrs, { [INLINE_CSS_HYDRATION_ATTR]: "" }, { children: html }));
|
|
31
|
+
}
|
|
21
32
|
function Script({ attrs, children }) {
|
|
22
33
|
const router = useRouter();
|
|
23
34
|
const dataScript = typeof attrs?.type === "string" && attrs.type !== "" && attrs.type !== "text/javascript" && attrs.type !== "module";
|
package/dist/esm/Asset.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Asset.js","names":["Link","Meta","Style","Title","onCleanup","onMount","isServer","useRouter","RouterManagedTag","JSX","Asset","tag","attrs","children","
|
|
1
|
+
{"version":3,"file":"Asset.js","names":["Link","Meta","Style","Title","onCleanup","onMount","isServer","useRouter","RouterManagedTag","JSX","INLINE_CSS_HYDRATION_ATTR","Asset","asset","Element","tag","attrs","children","_$createComponent","_$mergeProps","inlineCss","process","env","TSS_INLINE_CSS_ENABLED","undefined","InlineCssStyle","Script","Record","isInlineCssPlaceholder","html","document","querySelector","HTMLStyleElement","textContent","ScriptAttrs","key","src","router","dataScript","type","normSrc","base","baseURI","window","location","href","URL","existingScript","Array","from","querySelectorAll","find","el","HTMLScriptElement","script","createElement","value","Object","entries","setAttribute","String","head","appendChild","parentNode","removeChild","typeAttr","nonceAttr","nonce","sType","getAttribute","sNonce","_el$","_tmpl$","_$spread","_el$2","_el$3"],"sources":["../../src/Asset.tsx"],"sourcesContent":["import { Link, Meta, Style, Title } from '@solidjs/meta'\nimport { onCleanup, onMount } from 'solid-js'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { useRouter } from './useRouter'\nimport type { RouterManagedTag } from '@tanstack/router-core'\nimport type { JSX } from 'solid-js'\n\nconst INLINE_CSS_HYDRATION_ATTR = 'data-tsr-inline-css'\n\nexport function Asset(asset: RouterManagedTag): JSX.Element | null {\n const { tag, attrs, children } = asset\n\n switch (tag) {\n case 'title':\n return <Title {...attrs}>{children}</Title>\n case 'meta':\n return <Meta {...attrs} />\n case 'link':\n return <Link {...attrs} />\n case 'style':\n if (\n asset.inlineCss &&\n (process.env.TSS_INLINE_CSS_ENABLED === 'true' ||\n (process.env.TSS_INLINE_CSS_ENABLED === undefined && isServer))\n ) {\n return <InlineCssStyle attrs={attrs}>{children}</InlineCssStyle>\n }\n\n return <Style {...attrs}>{children}</Style>\n case 'script':\n return <Script attrs={attrs}>{children}</Script>\n default:\n return null\n }\n}\n\nfunction InlineCssStyle({\n attrs,\n children,\n}: {\n attrs?: Record<string, any>\n children?: RouterManagedTag['children']\n}) {\n const isInlineCssPlaceholder = children === undefined\n const html = isInlineCssPlaceholder\n ? typeof document === 'undefined'\n ? ''\n : (document.querySelector<HTMLStyleElement>(\n `style[${INLINE_CSS_HYDRATION_ATTR}]`,\n )?.textContent ?? '')\n : (children ?? '')\n\n return (\n <Style {...attrs} {...{ [INLINE_CSS_HYDRATION_ATTR]: '' }}>\n {html}\n </Style>\n )\n}\n\ninterface ScriptAttrs {\n [key: string]: string | boolean | undefined\n src?: string\n}\n\nfunction Script({\n attrs,\n children,\n}: {\n attrs?: ScriptAttrs\n children?: string\n}): JSX.Element | null {\n const router = useRouter()\n const dataScript =\n typeof attrs?.type === 'string' &&\n attrs.type !== '' &&\n attrs.type !== 'text/javascript' &&\n attrs.type !== 'module'\n\n onMount(() => {\n if (dataScript) return\n\n if (attrs?.src) {\n const normSrc = (() => {\n try {\n const base = document.baseURI || window.location.href\n return new URL(attrs.src, base).href\n } catch {\n return attrs.src\n }\n })()\n const existingScript = Array.from(\n document.querySelectorAll('script[src]'),\n ).find((el) => (el as HTMLScriptElement).src === normSrc)\n\n if (existingScript) {\n return\n }\n\n const script = document.createElement('script')\n\n for (const [key, value] of Object.entries(attrs)) {\n if (value !== undefined && value !== false) {\n script.setAttribute(\n key,\n typeof value === 'boolean' ? '' : String(value),\n )\n }\n }\n\n document.head.appendChild(script)\n\n onCleanup(() => {\n if (script.parentNode) {\n script.parentNode.removeChild(script)\n }\n })\n }\n\n if (typeof children === 'string') {\n const typeAttr =\n typeof attrs?.type === 'string' ? attrs.type : 'text/javascript'\n const nonceAttr =\n typeof attrs?.nonce === 'string' ? attrs.nonce : undefined\n const existingScript = Array.from(\n document.querySelectorAll('script:not([src])'),\n ).find((el) => {\n if (!(el instanceof HTMLScriptElement)) return false\n const sType = el.getAttribute('type') ?? 'text/javascript'\n const sNonce = el.getAttribute('nonce') ?? undefined\n return (\n el.textContent === children &&\n sType === typeAttr &&\n sNonce === nonceAttr\n )\n })\n\n if (existingScript) {\n return\n }\n\n const script = document.createElement('script')\n script.textContent = children\n\n if (attrs) {\n for (const [key, value] of Object.entries(attrs)) {\n if (value !== undefined && value !== false) {\n script.setAttribute(\n key,\n typeof value === 'boolean' ? '' : String(value),\n )\n }\n }\n }\n\n document.head.appendChild(script)\n\n onCleanup(() => {\n if (script.parentNode) {\n script.parentNode.removeChild(script)\n }\n })\n }\n })\n\n if (!(isServer ?? router.isServer)) {\n if (dataScript && typeof children === 'string') {\n return <script {...attrs} innerHTML={children} />\n }\n\n // render an empty script on the client just to avoid hydration errors\n return null\n }\n\n if (attrs?.src && typeof attrs.src === 'string') {\n return <script {...attrs} />\n }\n\n if (typeof children === 'string') {\n return <script {...attrs} innerHTML={children} />\n }\n\n return null\n}\n"],"mappings":"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"}
|
package/dist/esm/Match.js
CHANGED
|
@@ -321,10 +321,17 @@ var Outlet = () => {
|
|
|
321
321
|
return router.stores.matchStores.get(id)?.get().status;
|
|
322
322
|
});
|
|
323
323
|
const shouldShowNotFound = () => childMatchStatus() !== "redirected" && parentGlobalNotFound();
|
|
324
|
+
const childRouteKey = Solid.createMemo(() => {
|
|
325
|
+
if (shouldShowNotFound()) return void 0;
|
|
326
|
+
const cid = childMatchId();
|
|
327
|
+
if (!cid) return void 0;
|
|
328
|
+
return router.stores.matchStores.get(cid)?.routeId ?? cid;
|
|
329
|
+
});
|
|
324
330
|
return createComponent(Solid.Show, {
|
|
325
331
|
get when() {
|
|
326
|
-
return
|
|
332
|
+
return childRouteKey();
|
|
327
333
|
},
|
|
334
|
+
keyed: true,
|
|
328
335
|
get fallback() {
|
|
329
336
|
return createComponent(Solid.Show, {
|
|
330
337
|
get when() {
|
|
@@ -333,15 +340,14 @@ var Outlet = () => {
|
|
|
333
340
|
children: (resolvedRoute) => renderRouteNotFound(router, resolvedRoute(), void 0)
|
|
334
341
|
});
|
|
335
342
|
},
|
|
336
|
-
children: (
|
|
337
|
-
const currentMatchId = Solid.createMemo(() => childMatchIdAccessor());
|
|
343
|
+
children: (_routeKey) => {
|
|
338
344
|
return createComponent(Solid.Show, {
|
|
339
345
|
get when() {
|
|
340
346
|
return routeId() === rootRouteId;
|
|
341
347
|
},
|
|
342
348
|
get fallback() {
|
|
343
349
|
return createComponent(Match, { get matchId() {
|
|
344
|
-
return
|
|
350
|
+
return childMatchId();
|
|
345
351
|
} });
|
|
346
352
|
},
|
|
347
353
|
get children() {
|
|
@@ -353,7 +359,7 @@ var Outlet = () => {
|
|
|
353
359
|
},
|
|
354
360
|
get children() {
|
|
355
361
|
return createComponent(Match, { get matchId() {
|
|
356
|
-
return
|
|
362
|
+
return childMatchId();
|
|
357
363
|
} });
|
|
358
364
|
}
|
|
359
365
|
});
|