@vertz/ui 0.2.35 → 0.2.36
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/shared/{chunk-25nwt5fm.js → chunk-7dngshyk.js} +17 -5
- package/dist/shared/{chunk-mm9ms792.js → chunk-pkhyqntn.js} +10 -6
- package/dist/src/index.d.ts +36 -3
- package/dist/src/index.js +2 -2
- package/dist/src/internals.js +1 -1
- package/dist/src/query/public.js +1 -1
- package/dist/src/router/public.d.ts +36 -3
- package/dist/src/router/public.js +1 -1
- package/dist/src/test/index.d.ts +21 -2
- package/dist/src/test/index.js +1 -1
- package/package.json +3 -3
|
@@ -864,6 +864,13 @@ function query(source, options = {}) {
|
|
|
864
864
|
function getCacheKey() {
|
|
865
865
|
return cacheKeyComputed.value;
|
|
866
866
|
}
|
|
867
|
+
function resolveCurrentCacheKey() {
|
|
868
|
+
if (currentEffectKey) {
|
|
869
|
+
const depHash = depHashSignal.peek();
|
|
870
|
+
return depHash ? `${currentEffectKey}:${depHash}` : currentEffectKey;
|
|
871
|
+
}
|
|
872
|
+
return getCacheKey();
|
|
873
|
+
}
|
|
867
874
|
let currentRetainedKey = null;
|
|
868
875
|
const retainable = "retain" in cache && "release" in cache;
|
|
869
876
|
function retainKey(key) {
|
|
@@ -904,6 +911,7 @@ function query(source, options = {}) {
|
|
|
904
911
|
const error = signal(undefined);
|
|
905
912
|
const idle = signal(initialData === undefined);
|
|
906
913
|
const entityBacked = signal(false);
|
|
914
|
+
let currentEffectKey;
|
|
907
915
|
function normalizeToEntityStore(result) {
|
|
908
916
|
if (!entityMeta)
|
|
909
917
|
return;
|
|
@@ -1161,7 +1169,7 @@ function query(source, options = {}) {
|
|
|
1161
1169
|
handleFetchPromise(fetchPromise, id, key);
|
|
1162
1170
|
}
|
|
1163
1171
|
function refetch() {
|
|
1164
|
-
const key =
|
|
1172
|
+
const key = resolveCurrentCacheKey();
|
|
1165
1173
|
currentRetainedKey = null;
|
|
1166
1174
|
cache.delete(key);
|
|
1167
1175
|
getInflight().delete(key);
|
|
@@ -1205,10 +1213,12 @@ function query(source, options = {}) {
|
|
|
1205
1213
|
isFirst = false;
|
|
1206
1214
|
return;
|
|
1207
1215
|
}
|
|
1208
|
-
|
|
1216
|
+
const descriptorKey = isQueryDescriptor(trackRaw) ? trackRaw._key : undefined;
|
|
1217
|
+
if (!descriptorKey) {
|
|
1209
1218
|
trackRaw.catch(() => {});
|
|
1210
1219
|
}
|
|
1211
|
-
const
|
|
1220
|
+
const depHash2 = untrack(() => depHashSignal.value);
|
|
1221
|
+
const derivedKey = descriptorKey ? depHash2 ? `${descriptorKey}:${depHash2}` : descriptorKey : untrack(() => getCacheKey());
|
|
1212
1222
|
const cached = untrack(() => cache.get(derivedKey));
|
|
1213
1223
|
if (cached !== undefined) {
|
|
1214
1224
|
retainKey(derivedKey);
|
|
@@ -1274,7 +1284,9 @@ function query(source, options = {}) {
|
|
|
1274
1284
|
untrack(() => {
|
|
1275
1285
|
idle.value = false;
|
|
1276
1286
|
});
|
|
1277
|
-
const
|
|
1287
|
+
const depHash = untrack(() => depHashSignal.value);
|
|
1288
|
+
currentEffectKey = effectKey;
|
|
1289
|
+
const key = effectKey ? depHash ? `${effectKey}:${depHash}` : effectKey : untrack(() => getCacheKey());
|
|
1278
1290
|
if (!customKey && !effectKey) {
|
|
1279
1291
|
const existing = untrack(() => getInflight().get(key));
|
|
1280
1292
|
if (existing) {
|
|
@@ -1360,7 +1372,7 @@ function query(source, options = {}) {
|
|
|
1360
1372
|
rawData.value = undefined;
|
|
1361
1373
|
loading.value = true;
|
|
1362
1374
|
});
|
|
1363
|
-
const cacheKey = untrack(() =>
|
|
1375
|
+
const cacheKey = untrack(() => resolveCurrentCacheKey());
|
|
1364
1376
|
cache.delete(cacheKey);
|
|
1365
1377
|
const queryKey = customKey ?? meta.entityType;
|
|
1366
1378
|
getEntityStore().queryIndices.clear(queryKey);
|
|
@@ -458,7 +458,7 @@ function createRouter(routes, initialUrlOrOptions, maybeOptions) {
|
|
|
458
458
|
}
|
|
459
459
|
}
|
|
460
460
|
}
|
|
461
|
-
async function applyNavigation(url2, preMatch, transitionConfig) {
|
|
461
|
+
async function applyNavigation(url2, preMatch, transitionConfig, skipLoaders) {
|
|
462
462
|
if (currentAbort) {
|
|
463
463
|
currentAbort.abort();
|
|
464
464
|
}
|
|
@@ -476,7 +476,9 @@ function createRouter(routes, initialUrlOrOptions, maybeOptions) {
|
|
|
476
476
|
if (match) {
|
|
477
477
|
visitedUrls.add(normalizeUrl(url2));
|
|
478
478
|
searchParams.value = match.search;
|
|
479
|
-
|
|
479
|
+
if (!skipLoaders) {
|
|
480
|
+
await runLoaders(match, gen, abort.signal);
|
|
481
|
+
}
|
|
480
482
|
} else {
|
|
481
483
|
searchParams.value = {};
|
|
482
484
|
if (gen === navigationGen) {
|
|
@@ -487,8 +489,11 @@ function createRouter(routes, initialUrlOrOptions, maybeOptions) {
|
|
|
487
489
|
}
|
|
488
490
|
async function navigate(input) {
|
|
489
491
|
const navUrl = buildNavigationUrl(input.to, input);
|
|
492
|
+
const navMatch = matchRoute(routes, navUrl);
|
|
493
|
+
const navPathname = navUrl.split("?")[0]?.split("#")[0] || "/";
|
|
494
|
+
const isSearchParamOnly = window.location.pathname === navPathname;
|
|
490
495
|
const gen = ++navigateGen;
|
|
491
|
-
const handle = startPrefetch(navUrl);
|
|
496
|
+
const handle = isSearchParamOnly ? null : startPrefetch(navUrl);
|
|
492
497
|
if (input.replace) {
|
|
493
498
|
window.history.replaceState(null, "", navUrl);
|
|
494
499
|
} else {
|
|
@@ -500,9 +505,8 @@ function createRouter(routes, initialUrlOrOptions, maybeOptions) {
|
|
|
500
505
|
}
|
|
501
506
|
if (gen !== navigateGen)
|
|
502
507
|
return;
|
|
503
|
-
const
|
|
504
|
-
|
|
505
|
-
await applyNavigation(navUrl, match, transitionConfig);
|
|
508
|
+
const transitionConfig = isSearchParamOnly ? undefined : input.viewTransition ?? navMatch?.route.viewTransition ?? options?.viewTransition;
|
|
509
|
+
await applyNavigation(navUrl, navMatch, transitionConfig, isSearchParamOnly);
|
|
506
510
|
}
|
|
507
511
|
async function revalidate() {
|
|
508
512
|
const match = current.value;
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1296,8 +1296,27 @@ type ExtractParams<T extends string> = [ExtractParamsFromSegments<WithoutWildcar
|
|
|
1296
1296
|
* - Fallback: `string` → `string` (backward compat)
|
|
1297
1297
|
*/
|
|
1298
1298
|
type PathWithParams<T extends string> = T extends `${infer Before}*` ? `${PathWithParams<Before>}${string}` : T extends `${infer Before}:${string}/${infer After}` ? `${Before}${string}/${PathWithParams<`${After}`>}` : T extends `${infer Before}:${string}` ? `${Before}${string}` : T;
|
|
1299
|
-
/**
|
|
1300
|
-
|
|
1299
|
+
/**
|
|
1300
|
+
* Join parent and child route path segments.
|
|
1301
|
+
* - `JoinPaths<'/', '/brands'>` → `'/brands'`
|
|
1302
|
+
* - `JoinPaths<'/admin', '/settings'>` → `'/admin/settings'`
|
|
1303
|
+
* - `JoinPaths<'', '/brands'>` → `'/brands'`
|
|
1304
|
+
*/
|
|
1305
|
+
type JoinPaths<
|
|
1306
|
+
Parent extends string,
|
|
1307
|
+
Child extends string
|
|
1308
|
+
> = Parent extends "" | "/" ? Child : Child extends "/" ? Parent : `${Parent}${Child}`;
|
|
1309
|
+
/**
|
|
1310
|
+
* Union of all route pattern keys from a route map, including nested children.
|
|
1311
|
+
* Recursively walks `children` and concatenates parent + child paths.
|
|
1312
|
+
* Short-circuits to `string` for index signatures (backward compat).
|
|
1313
|
+
*/
|
|
1314
|
+
type RoutePattern<
|
|
1315
|
+
TRouteMap extends Record<string, unknown>,
|
|
1316
|
+
_Prefix extends string = ""
|
|
1317
|
+
> = string extends keyof TRouteMap ? string : { [K in keyof TRouteMap & string] : JoinPaths<_Prefix, K> | (TRouteMap[K] extends {
|
|
1318
|
+
children: infer C extends Record<string, unknown>;
|
|
1319
|
+
} ? RoutePattern<C, JoinPaths<_Prefix, K>> : never) }[keyof TRouteMap & string];
|
|
1301
1320
|
/**
|
|
1302
1321
|
* Union of all valid URL shapes for a route map.
|
|
1303
1322
|
* Maps each route pattern key through `PathWithParams` to produce the accepted URL shapes.
|
|
@@ -1424,8 +1443,22 @@ type TypedRoutes<T extends Record<string, RouteConfigLike> = RouteDefinitionMap>
|
|
|
1424
1443
|
*/
|
|
1425
1444
|
type InferRouteMap<T> = T extends TypedRoutes<infer R> ? R : T;
|
|
1426
1445
|
/**
|
|
1446
|
+
* Search nested children for a route's search params schema.
|
|
1447
|
+
* Returns the schema output type if found, `never` if not found.
|
|
1448
|
+
*/
|
|
1449
|
+
type FindSearchParamsInChildren<
|
|
1450
|
+
TPath extends string,
|
|
1451
|
+
TMap extends Record<string, RouteConfigLike>,
|
|
1452
|
+
_Prefix extends string = ""
|
|
1453
|
+
> = string extends keyof TMap ? never : { [K in keyof TMap & string] : JoinPaths<_Prefix, K> extends TPath ? TMap[K] extends {
|
|
1454
|
+
searchParams: SearchParamSchema<infer S>;
|
|
1455
|
+
} ? S : never : TMap[K] extends {
|
|
1456
|
+
children: infer C extends Record<string, RouteConfigLike>;
|
|
1457
|
+
} ? FindSearchParamsInChildren<TPath, C, JoinPaths<_Prefix, K>> : never }[keyof TMap & string];
|
|
1458
|
+
/**
|
|
1427
1459
|
* Extract the search params type from a route definition map for a given path.
|
|
1428
1460
|
*
|
|
1461
|
+
* Recursively searches nested `children` when the path is not a top-level key.
|
|
1429
1462
|
* If the route at `TPath` has a `searchParams` schema, resolves to the schema's
|
|
1430
1463
|
* output type `T`. Otherwise resolves to `Record<string, string>` (raw URL params).
|
|
1431
1464
|
*
|
|
@@ -1436,7 +1469,7 @@ type ExtractSearchParams<
|
|
|
1436
1469
|
TMap extends Record<string, RouteConfigLike> = RouteDefinitionMap
|
|
1437
1470
|
> = TPath extends keyof TMap ? TMap[TPath] extends {
|
|
1438
1471
|
searchParams: SearchParamSchema<infer T>;
|
|
1439
|
-
} ? T : Record<string, string> : Record<string, string>;
|
|
1472
|
+
} ? T : Record<string, string> : [FindSearchParamsInChildren<TPath, TMap>] extends [never] ? Record<string, string> : FindSearchParamsInChildren<TPath, TMap>;
|
|
1440
1473
|
/** Internal compiled route. */
|
|
1441
1474
|
interface CompiledRoute {
|
|
1442
1475
|
/** The original path pattern. */
|
package/dist/src/index.js
CHANGED
|
@@ -45,7 +45,7 @@ import {
|
|
|
45
45
|
} from "../shared/chunk-mntc8w0g.js";
|
|
46
46
|
import {
|
|
47
47
|
createRouter
|
|
48
|
-
} from "../shared/chunk-
|
|
48
|
+
} from "../shared/chunk-pkhyqntn.js";
|
|
49
49
|
import {
|
|
50
50
|
defineRoutes
|
|
51
51
|
} from "../shared/chunk-ah86rm07.js";
|
|
@@ -66,7 +66,7 @@ import {
|
|
|
66
66
|
query,
|
|
67
67
|
registerRelationSchema,
|
|
68
68
|
resetRelationSchemas_TEST_ONLY
|
|
69
|
-
} from "../shared/chunk-
|
|
69
|
+
} from "../shared/chunk-7dngshyk.js";
|
|
70
70
|
import"../shared/chunk-jrtrk5z4.js";
|
|
71
71
|
import {
|
|
72
72
|
ThemeProvider,
|
package/dist/src/internals.js
CHANGED
package/dist/src/query/public.js
CHANGED
|
@@ -34,8 +34,27 @@ type ExtractParams<T extends string> = [ExtractParamsFromSegments<WithoutWildcar
|
|
|
34
34
|
* - Fallback: `string` → `string` (backward compat)
|
|
35
35
|
*/
|
|
36
36
|
type PathWithParams<T extends string> = T extends `${infer Before}*` ? `${PathWithParams<Before>}${string}` : T extends `${infer Before}:${string}/${infer After}` ? `${Before}${string}/${PathWithParams<`${After}`>}` : T extends `${infer Before}:${string}` ? `${Before}${string}` : T;
|
|
37
|
-
/**
|
|
38
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Join parent and child route path segments.
|
|
39
|
+
* - `JoinPaths<'/', '/brands'>` → `'/brands'`
|
|
40
|
+
* - `JoinPaths<'/admin', '/settings'>` → `'/admin/settings'`
|
|
41
|
+
* - `JoinPaths<'', '/brands'>` → `'/brands'`
|
|
42
|
+
*/
|
|
43
|
+
type JoinPaths<
|
|
44
|
+
Parent extends string,
|
|
45
|
+
Child extends string
|
|
46
|
+
> = Parent extends "" | "/" ? Child : Child extends "/" ? Parent : `${Parent}${Child}`;
|
|
47
|
+
/**
|
|
48
|
+
* Union of all route pattern keys from a route map, including nested children.
|
|
49
|
+
* Recursively walks `children` and concatenates parent + child paths.
|
|
50
|
+
* Short-circuits to `string` for index signatures (backward compat).
|
|
51
|
+
*/
|
|
52
|
+
type RoutePattern<
|
|
53
|
+
TRouteMap extends Record<string, unknown>,
|
|
54
|
+
_Prefix extends string = ""
|
|
55
|
+
> = string extends keyof TRouteMap ? string : { [K in keyof TRouteMap & string] : JoinPaths<_Prefix, K> | (TRouteMap[K] extends {
|
|
56
|
+
children: infer C extends Record<string, unknown>;
|
|
57
|
+
} ? RoutePattern<C, JoinPaths<_Prefix, K>> : never) }[keyof TRouteMap & string];
|
|
39
58
|
/**
|
|
40
59
|
* Union of all valid URL shapes for a route map.
|
|
41
60
|
* Maps each route pattern key through `PathWithParams` to produce the accepted URL shapes.
|
|
@@ -162,8 +181,22 @@ type TypedRoutes<T extends Record<string, RouteConfigLike> = RouteDefinitionMap>
|
|
|
162
181
|
*/
|
|
163
182
|
type InferRouteMap<T> = T extends TypedRoutes<infer R> ? R : T;
|
|
164
183
|
/**
|
|
184
|
+
* Search nested children for a route's search params schema.
|
|
185
|
+
* Returns the schema output type if found, `never` if not found.
|
|
186
|
+
*/
|
|
187
|
+
type FindSearchParamsInChildren<
|
|
188
|
+
TPath extends string,
|
|
189
|
+
TMap extends Record<string, RouteConfigLike>,
|
|
190
|
+
_Prefix extends string = ""
|
|
191
|
+
> = string extends keyof TMap ? never : { [K in keyof TMap & string] : JoinPaths<_Prefix, K> extends TPath ? TMap[K] extends {
|
|
192
|
+
searchParams: SearchParamSchema<infer S>;
|
|
193
|
+
} ? S : never : TMap[K] extends {
|
|
194
|
+
children: infer C extends Record<string, RouteConfigLike>;
|
|
195
|
+
} ? FindSearchParamsInChildren<TPath, C, JoinPaths<_Prefix, K>> : never }[keyof TMap & string];
|
|
196
|
+
/**
|
|
165
197
|
* Extract the search params type from a route definition map for a given path.
|
|
166
198
|
*
|
|
199
|
+
* Recursively searches nested `children` when the path is not a top-level key.
|
|
167
200
|
* If the route at `TPath` has a `searchParams` schema, resolves to the schema's
|
|
168
201
|
* output type `T`. Otherwise resolves to `Record<string, string>` (raw URL params).
|
|
169
202
|
*
|
|
@@ -174,7 +207,7 @@ type ExtractSearchParams<
|
|
|
174
207
|
TMap extends Record<string, RouteConfigLike> = RouteDefinitionMap
|
|
175
208
|
> = TPath extends keyof TMap ? TMap[TPath] extends {
|
|
176
209
|
searchParams: SearchParamSchema<infer T>;
|
|
177
|
-
} ? T : Record<string, string> : Record<string, string>;
|
|
210
|
+
} ? T : Record<string, string> : [FindSearchParamsInChildren<TPath, TMap>] extends [never] ? Record<string, string> : FindSearchParamsInChildren<TPath, TMap>;
|
|
178
211
|
/** Internal compiled route. */
|
|
179
212
|
interface CompiledRoute {
|
|
180
213
|
/** The original path pattern. */
|
package/dist/src/test/index.d.ts
CHANGED
|
@@ -138,8 +138,27 @@ type ExtractParams<T extends string> = [ExtractParamsFromSegments<WithoutWildcar
|
|
|
138
138
|
} : Record<string, never> : HasWildcard<T> extends true ? { [K in ExtractParamsFromSegments<WithoutWildcard<T>>] : string } & {
|
|
139
139
|
"*": string;
|
|
140
140
|
} : { [K in ExtractParamsFromSegments<WithoutWildcard<T>>] : string };
|
|
141
|
-
/**
|
|
142
|
-
|
|
141
|
+
/**
|
|
142
|
+
* Join parent and child route path segments.
|
|
143
|
+
* - `JoinPaths<'/', '/brands'>` → `'/brands'`
|
|
144
|
+
* - `JoinPaths<'/admin', '/settings'>` → `'/admin/settings'`
|
|
145
|
+
* - `JoinPaths<'', '/brands'>` → `'/brands'`
|
|
146
|
+
*/
|
|
147
|
+
type JoinPaths<
|
|
148
|
+
Parent extends string,
|
|
149
|
+
Child extends string
|
|
150
|
+
> = Parent extends "" | "/" ? Child : Child extends "/" ? Parent : `${Parent}${Child}`;
|
|
151
|
+
/**
|
|
152
|
+
* Union of all route pattern keys from a route map, including nested children.
|
|
153
|
+
* Recursively walks `children` and concatenates parent + child paths.
|
|
154
|
+
* Short-circuits to `string` for index signatures (backward compat).
|
|
155
|
+
*/
|
|
156
|
+
type RoutePattern<
|
|
157
|
+
TRouteMap extends Record<string, unknown>,
|
|
158
|
+
_Prefix extends string = ""
|
|
159
|
+
> = string extends keyof TRouteMap ? string : { [K in keyof TRouteMap & string] : JoinPaths<_Prefix, K> | (TRouteMap[K] extends {
|
|
160
|
+
children: infer C extends Record<string, unknown>;
|
|
161
|
+
} ? RoutePattern<C, JoinPaths<_Prefix, K>> : never) }[keyof TRouteMap & string];
|
|
143
162
|
/**
|
|
144
163
|
* View Transitions API integration.
|
|
145
164
|
*
|
package/dist/src/test/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vertz/ui",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.36",
|
|
4
4
|
"description": "Vertz UI framework — signals, components, JSX runtime",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -77,11 +77,11 @@
|
|
|
77
77
|
"typecheck": "tsc --noEmit"
|
|
78
78
|
},
|
|
79
79
|
"dependencies": {
|
|
80
|
-
"@vertz/fetch": "^0.2.
|
|
80
|
+
"@vertz/fetch": "^0.2.35"
|
|
81
81
|
},
|
|
82
82
|
"devDependencies": {
|
|
83
83
|
"@happy-dom/global-registrator": "^20.7.0",
|
|
84
|
-
"@vertz/schema": "^0.2.
|
|
84
|
+
"@vertz/schema": "^0.2.35",
|
|
85
85
|
"bunup": "^0.16.31",
|
|
86
86
|
"happy-dom": "^20.7.0",
|
|
87
87
|
"typescript": "^5.7.0"
|