@tanstack/router-core 0.0.1-beta.182 → 0.0.1-beta.184
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/build/cjs/router.js +23 -22
- package/build/cjs/router.js.map +1 -1
- package/build/cjs/searchParams.js +0 -2
- package/build/cjs/searchParams.js.map +1 -1
- package/build/esm/index.js +23 -24
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +126 -126
- package/build/types/router.d.ts +2 -0
- package/build/umd/index.development.js +23 -24
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +2 -2
- package/build/umd/index.production.js.map +1 -1
- package/package.json +1 -1
- package/src/router.ts +30 -25
- package/src/searchParams.ts +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchParams.js","sources":["../../src/searchParams.ts"],"sourcesContent":["import { decode, encode } from './qss'\nimport { AnySearchSchema } from './route'\n\nexport const defaultParseSearch = parseSearchWith(JSON.parse)\nexport const defaultStringifySearch = stringifySearchWith(\n JSON.stringify,\n JSON.parse,\n)\n\nexport function parseSearchWith(parser: (str: string) => any) {\n return (searchStr: string): AnySearchSchema => {\n if (searchStr.substring(0, 1) === '?') {\n searchStr = searchStr.substring(1)\n }\n\n let query: Record<string, unknown> = decode(searchStr)\n\n // Try to parse any query params that might be json\n for (let key in query) {\n const value = query[key]\n if (typeof value === 'string') {\n try {\n query[key] = parser(value)\n } catch (err) {\n //\n }\n }\n }\n\n return query\n }\n}\n\nexport function stringifySearchWith(\n stringify: (search: any) => string,\n parser?: (str: string) => any,\n) {\n function stringifyValue(val: any) {\n if (typeof val === 'object' && val !== null) {\n try {\n return stringify(val)\n } catch (err) {\n // silent\n }\n } else if (typeof val === 'string' && typeof parser === 'function') {\n try {\n // Check if it's a valid parseable string.\n // If it is, then stringify it again.\n parser(val)\n return stringify(val)\n } catch (err) {\n // silent\n }\n }\n return val\n }\n\n return (search: Record<string, any>) => {\n search = { ...search }\n\n if (search) {\n Object.keys(search).forEach((key) => {\n const val = search[key]\n if (typeof val === 'undefined' || val === undefined) {\n delete search[key]\n } else
|
|
1
|
+
{"version":3,"file":"searchParams.js","sources":["../../src/searchParams.ts"],"sourcesContent":["import { decode, encode } from './qss'\nimport { AnySearchSchema } from './route'\n\nexport const defaultParseSearch = parseSearchWith(JSON.parse)\nexport const defaultStringifySearch = stringifySearchWith(\n JSON.stringify,\n JSON.parse,\n)\n\nexport function parseSearchWith(parser: (str: string) => any) {\n return (searchStr: string): AnySearchSchema => {\n if (searchStr.substring(0, 1) === '?') {\n searchStr = searchStr.substring(1)\n }\n\n let query: Record<string, unknown> = decode(searchStr)\n\n // Try to parse any query params that might be json\n for (let key in query) {\n const value = query[key]\n if (typeof value === 'string') {\n try {\n query[key] = parser(value)\n } catch (err) {\n //\n }\n }\n }\n\n return query\n }\n}\n\nexport function stringifySearchWith(\n stringify: (search: any) => string,\n parser?: (str: string) => any,\n) {\n function stringifyValue(val: any) {\n if (typeof val === 'object' && val !== null) {\n try {\n return stringify(val)\n } catch (err) {\n // silent\n }\n } else if (typeof val === 'string' && typeof parser === 'function') {\n try {\n // Check if it's a valid parseable string.\n // If it is, then stringify it again.\n parser(val)\n return stringify(val)\n } catch (err) {\n // silent\n }\n }\n return val\n }\n\n return (search: Record<string, any>) => {\n search = { ...search }\n\n if (search) {\n Object.keys(search).forEach((key) => {\n const val = search[key]\n if (typeof val === 'undefined' || val === undefined) {\n delete search[key]\n } else {\n search[key] = stringifyValue(val)\n }\n })\n }\n\n const searchStr = encode(search as Record<string, string>).toString()\n\n return searchStr ? `?${searchStr}` : ''\n }\n}\n"],"names":["defaultParseSearch","parseSearchWith","JSON","parse","defaultStringifySearch","stringifySearchWith","stringify","parser","searchStr","substring","query","decode","key","value","err","stringifyValue","val","search","Object","keys","forEach","undefined","encode","toString"],"mappings":";;;;;;;;;;;;;;;;AAGO,MAAMA,kBAAkB,GAAGC,eAAe,CAACC,IAAI,CAACC,KAAK,EAAC;AAChDC,MAAAA,sBAAsB,GAAGC,mBAAmB,CACvDH,IAAI,CAACI,SAAS,EACdJ,IAAI,CAACC,KACP,EAAC;AAEM,SAASF,eAAeA,CAACM,MAA4B,EAAE;AAC5D,EAAA,OAAQC,SAAiB,IAAsB;IAC7C,IAAIA,SAAS,CAACC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE;AACrCD,MAAAA,SAAS,GAAGA,SAAS,CAACC,SAAS,CAAC,CAAC,CAAC,CAAA;AACpC,KAAA;AAEA,IAAA,IAAIC,KAA8B,GAAGC,UAAM,CAACH,SAAS,CAAC,CAAA;;AAEtD;AACA,IAAA,KAAK,IAAII,GAAG,IAAIF,KAAK,EAAE;AACrB,MAAA,MAAMG,KAAK,GAAGH,KAAK,CAACE,GAAG,CAAC,CAAA;AACxB,MAAA,IAAI,OAAOC,KAAK,KAAK,QAAQ,EAAE;QAC7B,IAAI;AACFH,UAAAA,KAAK,CAACE,GAAG,CAAC,GAAGL,MAAM,CAACM,KAAK,CAAC,CAAA;SAC3B,CAAC,OAAOC,GAAG,EAAE;AACZ;AAAA,SAAA;AAEJ,OAAA;AACF,KAAA;AAEA,IAAA,OAAOJ,KAAK,CAAA;GACb,CAAA;AACH,CAAA;AAEO,SAASL,mBAAmBA,CACjCC,SAAkC,EAClCC,MAA6B,EAC7B;EACA,SAASQ,cAAcA,CAACC,GAAQ,EAAE;IAChC,IAAI,OAAOA,GAAG,KAAK,QAAQ,IAAIA,GAAG,KAAK,IAAI,EAAE;MAC3C,IAAI;QACF,OAAOV,SAAS,CAACU,GAAG,CAAC,CAAA;OACtB,CAAC,OAAOF,GAAG,EAAE;AACZ;AAAA,OAAA;KAEH,MAAM,IAAI,OAAOE,GAAG,KAAK,QAAQ,IAAI,OAAOT,MAAM,KAAK,UAAU,EAAE;MAClE,IAAI;AACF;AACA;QACAA,MAAM,CAACS,GAAG,CAAC,CAAA;QACX,OAAOV,SAAS,CAACU,GAAG,CAAC,CAAA;OACtB,CAAC,OAAOF,GAAG,EAAE;AACZ;AAAA,OAAA;AAEJ,KAAA;AACA,IAAA,OAAOE,GAAG,CAAA;AACZ,GAAA;AAEA,EAAA,OAAQC,MAA2B,IAAK;AACtCA,IAAAA,MAAM,GAAG;MAAE,GAAGA,MAAAA;KAAQ,CAAA;AAEtB,IAAA,IAAIA,MAAM,EAAE;MACVC,MAAM,CAACC,IAAI,CAACF,MAAM,CAAC,CAACG,OAAO,CAAER,GAAG,IAAK;AACnC,QAAA,MAAMI,GAAG,GAAGC,MAAM,CAACL,GAAG,CAAC,CAAA;QACvB,IAAI,OAAOI,GAAG,KAAK,WAAW,IAAIA,GAAG,KAAKK,SAAS,EAAE;UACnD,OAAOJ,MAAM,CAACL,GAAG,CAAC,CAAA;AACpB,SAAC,MAAM;AACLK,UAAAA,MAAM,CAACL,GAAG,CAAC,GAAGG,cAAc,CAACC,GAAG,CAAC,CAAA;AACnC,SAAA;AACF,OAAC,CAAC,CAAA;AACJ,KAAA;IAEA,MAAMR,SAAS,GAAGc,UAAM,CAACL,MAAgC,CAAC,CAACM,QAAQ,EAAE,CAAA;AAErE,IAAA,OAAOf,SAAS,GAAI,CAAA,CAAA,EAAGA,SAAU,CAAA,CAAC,GAAG,EAAE,CAAA;GACxC,CAAA;AACH;;;;;;;"}
|
package/build/esm/index.js
CHANGED
|
@@ -694,8 +694,6 @@ function stringifySearchWith(stringify, parser) {
|
|
|
694
694
|
const val = search[key];
|
|
695
695
|
if (typeof val === 'undefined' || val === undefined) {
|
|
696
696
|
delete search[key];
|
|
697
|
-
} else if (Array.isArray(val)) {
|
|
698
|
-
search[key] = val.map(stringifyValue);
|
|
699
697
|
} else {
|
|
700
698
|
search[key] = stringifyValue(val);
|
|
701
699
|
}
|
|
@@ -746,6 +744,16 @@ class Router {
|
|
|
746
744
|
return next.matchesById[id];
|
|
747
745
|
});
|
|
748
746
|
}
|
|
747
|
+
if (matchesByIdChanged || matchesChanged || pendingMatchesChanged) {
|
|
748
|
+
const hasPendingComponent = next.pendingMatches.some(d => {
|
|
749
|
+
const route = this.getRoute(d.routeId);
|
|
750
|
+
return !!route?.options.pendingComponent;
|
|
751
|
+
});
|
|
752
|
+
next.renderedMatchIds = hasPendingComponent ? next.pendingMatchIds : next.matchIds;
|
|
753
|
+
next.renderedMatches = next.renderedMatchIds.map(id => {
|
|
754
|
+
return next.matchesById[id];
|
|
755
|
+
});
|
|
756
|
+
}
|
|
749
757
|
next.isFetching = [...next.matches, ...next.pendingMatches].some(d => d.isFetching);
|
|
750
758
|
this.state = next;
|
|
751
759
|
},
|
|
@@ -959,20 +967,10 @@ class Router {
|
|
|
959
967
|
return this.latestLoadPromise;
|
|
960
968
|
};
|
|
961
969
|
#mergeMatches = (prevMatchesById, nextMatches) => {
|
|
962
|
-
|
|
963
|
-
...prevMatchesById
|
|
970
|
+
return {
|
|
971
|
+
...prevMatchesById,
|
|
972
|
+
...Object.fromEntries(nextMatches.map(match => [match.id, match]))
|
|
964
973
|
};
|
|
965
|
-
let hadNew = false;
|
|
966
|
-
nextMatches.forEach(match => {
|
|
967
|
-
if (!nextMatchesById[match.id]) {
|
|
968
|
-
hadNew = true;
|
|
969
|
-
nextMatchesById[match.id] = match;
|
|
970
|
-
}
|
|
971
|
-
});
|
|
972
|
-
if (!hadNew) {
|
|
973
|
-
return prevMatchesById;
|
|
974
|
-
}
|
|
975
|
-
return nextMatchesById;
|
|
976
974
|
};
|
|
977
975
|
getRoute = id => {
|
|
978
976
|
const route = this.routesById[id];
|
|
@@ -1122,14 +1120,17 @@ class Router {
|
|
|
1122
1120
|
};
|
|
1123
1121
|
try {
|
|
1124
1122
|
const validator = typeof route.options.validateSearch === 'object' ? route.options.validateSearch.parse : route.options.validateSearch;
|
|
1125
|
-
|
|
1126
|
-
|
|
1123
|
+
let routeSearch = validator?.(parentSearchInfo.search) ?? {};
|
|
1124
|
+
let search = {
|
|
1127
1125
|
...parentSearchInfo.search,
|
|
1128
1126
|
...routeSearch
|
|
1129
1127
|
};
|
|
1128
|
+
routeSearch = replaceEqualDeep(match.routeSearch, routeSearch);
|
|
1129
|
+
search = replaceEqualDeep(match.search, search);
|
|
1130
1130
|
return {
|
|
1131
|
-
routeSearch
|
|
1132
|
-
search
|
|
1131
|
+
routeSearch,
|
|
1132
|
+
search,
|
|
1133
|
+
searchDidChange: match.routeSearch !== routeSearch
|
|
1133
1134
|
};
|
|
1134
1135
|
} catch (err) {
|
|
1135
1136
|
match.searchError = new SearchParamError(err.message, {
|
|
@@ -1710,7 +1711,6 @@ class Router {
|
|
|
1710
1711
|
};
|
|
1711
1712
|
#commitLocation = async location => {
|
|
1712
1713
|
const next = this.buildNext(location);
|
|
1713
|
-
const id = '' + Date.now() + Math.random();
|
|
1714
1714
|
if (this.navigateTimeout) clearTimeout(this.navigateTimeout);
|
|
1715
1715
|
let nextAction = 'replace';
|
|
1716
1716
|
if (!location.replace) {
|
|
@@ -1721,10 +1721,7 @@ class Router {
|
|
|
1721
1721
|
nextAction = 'replace';
|
|
1722
1722
|
}
|
|
1723
1723
|
const href = `${next.pathname}${next.searchStr}${next.hash ? `#${next.hash}` : ''}`;
|
|
1724
|
-
this.history[nextAction === 'push' ? 'push' : 'replace'](href,
|
|
1725
|
-
id,
|
|
1726
|
-
...next.state
|
|
1727
|
-
});
|
|
1724
|
+
this.history[nextAction === 'push' ? 'push' : 'replace'](href, next.state);
|
|
1728
1725
|
this.resetNextScroll = location.resetScroll ?? true;
|
|
1729
1726
|
return this.latestLoadPromise;
|
|
1730
1727
|
};
|
|
@@ -1810,6 +1807,8 @@ function getInitialRouterState() {
|
|
|
1810
1807
|
pendingMatchIds: [],
|
|
1811
1808
|
matches: [],
|
|
1812
1809
|
pendingMatches: [],
|
|
1810
|
+
renderedMatchIds: [],
|
|
1811
|
+
renderedMatches: [],
|
|
1813
1812
|
lastUpdated: Date.now()
|
|
1814
1813
|
};
|
|
1815
1814
|
}
|