@vidact/start 0.2.0-beta.0 → 0.2.0-beta.5
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/CHANGELOG.md +65 -0
- package/dist/client.d.ts +24 -16
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +137 -165
- package/dist/client.js.map +1 -1
- package/dist/index-client.d.ts +5 -4
- package/dist/index-client.js +4 -4
- package/dist/index.d.ts +5 -4
- package/dist/index.js +4 -4
- package/dist/link-client.d.ts +6 -4
- package/dist/link-client.d.ts.map +1 -1
- package/dist/link-client.js +8 -4
- package/dist/link-client.js.map +1 -1
- package/dist/link-contract.d.ts +10 -7
- package/dist/link-contract.d.ts.map +1 -1
- package/dist/link-contract.js +11 -7
- package/dist/link-contract.js.map +1 -1
- package/dist/link.d.ts +6 -4
- package/dist/link.d.ts.map +1 -1
- package/dist/link.js +8 -4
- package/dist/link.js.map +1 -1
- package/dist/router.d.ts +57 -55
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +150 -157
- package/dist/router.js.map +1 -1
- package/dist/server.d.ts +18 -16
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +95 -99
- package/dist/server.js.map +1 -1
- package/dist/snapshot.d.ts +13 -10
- package/dist/snapshot.d.ts.map +1 -1
- package/dist/snapshot.js +19 -20
- package/dist/snapshot.js.map +1 -1
- package/dist/virtual.d.ts +3 -2
- package/dist/virtual.js +1 -2
- package/dist/vite.d.ts +18 -15
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +144 -171
- package/dist/vite.js.map +1 -1
- package/package.json +9 -8
- package/src/client.ts +272 -0
- package/src/index-client.ts +3 -0
- package/src/index.ts +3 -0
- package/src/link-client.ts +10 -0
- package/src/link-contract.ts +17 -0
- package/src/link.ts +10 -0
- package/src/router.ts +282 -0
- package/src/server.ts +211 -0
- package/src/snapshot.ts +40 -0
- package/src/virtual.ts +5 -0
- package/src/vite.ts +256 -0
- package/dist/index-client.d.ts.map +0 -1
- package/dist/index-client.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/virtual.d.ts.map +0 -1
- package/dist/virtual.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-contract.d.ts","
|
|
1
|
+
{"version":3,"file":"link-contract.d.ts","names":[],"sources":["../src/link-contract.ts"],"mappings":";;UAEiB,kBAAkB,SAAS;WACjC,WAAW;WACX;WACA;WACA;;iBAGK,YAAY,OAAO,YAAY"}
|
package/dist/link-contract.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
//#region src/link-contract.ts
|
|
2
|
+
function anchorProps(props) {
|
|
3
|
+
const { reloadDocument = false, replace = false, ...attributes } = props;
|
|
4
|
+
return {
|
|
5
|
+
...attributes,
|
|
6
|
+
...reloadDocument ? {} : { "data-vidact-start-link": "" },
|
|
7
|
+
...replace ? { "data-vidact-start-replace": "" } : {}
|
|
8
|
+
};
|
|
8
9
|
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { anchorProps };
|
|
12
|
+
|
|
9
13
|
//# sourceMappingURL=link-contract.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-contract.js","
|
|
1
|
+
{"version":3,"file":"link-contract.js","names":[],"sources":["../src/link-contract.ts"],"mappings":";AASA,SAAgB,YAAY,OAA2C;CACrE,MAAM,EAAE,iBAAiB,OAAO,UAAU,OAAO,GAAG,eAAe;CACnE,OAAO;EACL,GAAG;EACH,GAAI,iBAAiB,CAAC,IAAI,EAAE,0BAA0B,GAAG;EACzD,GAAI,UAAU,EAAE,6BAA6B,GAAG,IAAI,CAAC;CACvD;AACF"}
|
package/dist/link.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { LinkProps } from "./link-contract.js";
|
|
2
|
+
import { CompiledRenderValue } from "@vidact/runtime";
|
|
3
|
+
//#region src/link.d.ts
|
|
4
|
+
declare function Link(props: LinkProps): CompiledRenderValue;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { Link, type LinkProps };
|
|
5
7
|
//# sourceMappingURL=link.d.ts.map
|
package/dist/link.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.d.ts","
|
|
1
|
+
{"version":3,"file":"link.d.ts","names":[],"sources":["../src/link.ts"],"mappings":";;;iBAKgB,KAAK,OAAO,YAAY"}
|
package/dist/link.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { anchorProps } from "./link-contract.js";
|
|
2
|
+
import { createElement } from "@vidact/runtime/server";
|
|
3
|
+
//#region src/link.ts
|
|
4
|
+
function Link(props) {
|
|
5
|
+
return createElement("a", anchorProps(props));
|
|
5
6
|
}
|
|
7
|
+
//#endregion
|
|
8
|
+
export { Link };
|
|
9
|
+
|
|
6
10
|
//# sourceMappingURL=link.js.map
|
package/dist/link.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.js","
|
|
1
|
+
{"version":3,"file":"link.js","names":[],"sources":["../src/link.ts"],"mappings":";;;AAKA,SAAgB,KAAK,OAAuC;CAC1D,OAAO,cAAc,KAAK,YAAY,KAAK,CAAC;AAC9C"}
|
package/dist/router.d.ts
CHANGED
|
@@ -1,69 +1,71 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { CompiledRenderValue } from "@vidact/runtime";
|
|
2
|
+
import { FrameworkValue } from "@vidact/runtime/framework/protocol";
|
|
3
|
+
//#region src/router.d.ts
|
|
3
4
|
declare const FILE_ROUTE: unique symbol;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
type RouteParameters = Readonly<Record<string, string>>;
|
|
6
|
+
type StartComponent<LoaderData extends FrameworkValue = FrameworkValue> = {
|
|
7
|
+
bivarianceHack(props: RouteComponentProps<LoaderData>): unknown;
|
|
7
8
|
}['bivarianceHack'];
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
interface RouteComponentProps<LoaderData extends FrameworkValue = FrameworkValue> extends Readonly<Record<string, unknown>> {
|
|
10
|
+
readonly children?: CompiledRenderValue;
|
|
11
|
+
readonly loaderData: LoaderData;
|
|
12
|
+
readonly params: RouteParameters;
|
|
13
|
+
readonly requestUrl: string;
|
|
13
14
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
interface RouteLoaderContext {
|
|
16
|
+
readonly parentData: Readonly<Record<string, FrameworkValue>>;
|
|
17
|
+
readonly params: RouteParameters;
|
|
18
|
+
readonly request: Request;
|
|
18
19
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
interface RouteServerContext {
|
|
21
|
+
readonly params: RouteParameters;
|
|
22
|
+
readonly request: Request;
|
|
22
23
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
24
|
+
type RouteServerHandler = (context: RouteServerContext) => Response | Promise<Response>;
|
|
25
|
+
interface FileRouteOptions<LoaderData extends FrameworkValue = FrameworkValue> {
|
|
26
|
+
readonly component?: StartComponent<LoaderData>;
|
|
27
|
+
readonly loader?: (context: RouteLoaderContext) => LoaderData | Promise<LoaderData>;
|
|
28
|
+
readonly server?: {
|
|
29
|
+
readonly handlers: Readonly<Partial<Record<string, RouteServerHandler>>>;
|
|
30
|
+
};
|
|
30
31
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
interface FileRouteDefinition<LoaderData extends FrameworkValue = FrameworkValue> {
|
|
33
|
+
readonly [FILE_ROUTE]: true;
|
|
34
|
+
readonly options: FileRouteOptions<LoaderData>;
|
|
34
35
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
interface RouteModule {
|
|
37
|
+
readonly Route?: FileRouteDefinition;
|
|
38
|
+
readonly default?: FileRouteDefinition;
|
|
38
39
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
interface RouteManifestEntry {
|
|
41
|
+
readonly id: string;
|
|
42
|
+
readonly parentId: string | null;
|
|
43
|
+
readonly path: string;
|
|
44
|
+
readonly load: () => PromiseLike<RouteModule>;
|
|
44
45
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
interface RouteManifest {
|
|
47
|
+
readonly entries: readonly RouteManifestEntry[];
|
|
48
|
+
readonly byId: ReadonlyMap<string, RouteManifestEntry>;
|
|
48
49
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
interface RouteMatch {
|
|
51
|
+
readonly entry: RouteManifestEntry;
|
|
52
|
+
readonly params: RouteParameters;
|
|
52
53
|
}
|
|
53
|
-
|
|
54
|
-
|
|
54
|
+
interface ResolvedRouteMatch extends RouteMatch {
|
|
55
|
+
readonly definition: FileRouteDefinition;
|
|
55
56
|
}
|
|
56
|
-
|
|
57
|
-
|
|
57
|
+
interface LoadedRouteMatch extends ResolvedRouteMatch {
|
|
58
|
+
readonly loaderData: FrameworkValue;
|
|
58
59
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
60
|
+
declare function defineFileRoute<const LoaderData extends FrameworkValue = undefined>(options: FileRouteOptions<LoaderData>): FileRouteDefinition<LoaderData>;
|
|
61
|
+
declare function isFileRouteDefinition(value: unknown): value is FileRouteDefinition;
|
|
62
|
+
declare function createRouteManifest(entries: readonly RouteManifestEntry[]): RouteManifest;
|
|
63
|
+
declare function matchRoutes(manifest: RouteManifest, pathname: string): readonly RouteMatch[];
|
|
64
|
+
declare function loadRouteMatches(matches: readonly RouteMatch[], request: Request, suppliedData?: Readonly<Record<string, FrameworkValue>>): Promise<readonly LoadedRouteMatch[]>;
|
|
65
|
+
declare function resolveRouteMatches(matches: readonly RouteMatch[]): Promise<readonly ResolvedRouteMatch[]>;
|
|
66
|
+
declare function runRouteLoaders(matches: readonly ResolvedRouteMatch[], request: Request, suppliedData?: Readonly<Record<string, FrameworkValue>>): Promise<readonly LoadedRouteMatch[]>;
|
|
67
|
+
declare function composeRouteMatches(matches: readonly LoadedRouteMatch[], createElement: (component: StartComponent, props: RouteComponentProps) => unknown, requestUrl: string): unknown;
|
|
68
|
+
declare function routeLoaderData(matches: readonly LoadedRouteMatch[]): Readonly<Record<string, FrameworkValue>>;
|
|
69
|
+
//#endregion
|
|
70
|
+
export { FileRouteDefinition, FileRouteOptions, LoadedRouteMatch, ResolvedRouteMatch, RouteComponentProps, RouteLoaderContext, RouteManifest, RouteManifestEntry, RouteMatch, RouteModule, RouteParameters, RouteServerContext, RouteServerHandler, StartComponent, composeRouteMatches, createRouteManifest, defineFileRoute, isFileRouteDefinition, loadRouteMatches, matchRoutes, resolveRouteMatches, routeLoaderData, runRouteLoaders };
|
|
69
71
|
//# sourceMappingURL=router.d.ts.map
|
package/dist/router.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","
|
|
1
|
+
{"version":3,"file":"router.d.ts","names":[],"sources":["../src/router.ts"],"mappings":";;;cAGM;KAEM,kBAAkB,SAAS;KAC3B,eAAe,mBAAmB,iBAAiB;EAC7D,eAAe,OAAO,oBAAoB;;UAG3B,oBACf,mBAAmB,iBAAiB,wBAC5B,SAAS;WACR,WAAW;WACX,YAAY;WACZ,QAAQ;WACR;;UAGM;WACN,YAAY,SAAS,eAAe;WACpC,QAAQ;WACR,SAAS;;UAGH;WACN,QAAQ;WACR,SAAS;;KAGR,sBAAsB,SAAS,uBAAuB,WAAW,QAAQ;UAEpE,iBAAiB,mBAAmB,iBAAiB;WAC3D,YAAY,eAAe;WAC3B,UAAU,SAAS,uBAAuB,aAAa,QAAQ;WAC/D;aACE,UAAU,SAAS,QAAQ,eAAe;;;UAItC,oBAAoB,mBAAmB,iBAAiB;YAC7D;WACD,SAAS,iBAAiB;;UAGpB;WACN,QAAQ;WACR,UAAU;;UAGJ;WACN;WACA;WACA;WACA,YAAY,YAAY;;UAGlB;WACN,kBAAkB;WAClB,MAAM,oBAAoB;;UAGpB;WACN,OAAO;WACP,QAAQ;;UAGF,2BAA2B;WACjC,YAAY;;UAGN,yBAAyB;WAC/B,YAAY;;iBAGP,sBAAsB,mBAAmB,4BACvD,SAAS,iBAAiB,cACzB,oBAAoB;iBAIP,sBAAsB,iBAAiB,SAAS;iBAIhD,oBAAoB,kBAAkB,uBAAuB;iBAkB7D,YAAY,UAAU,eAAe,4BAA4B;iBA0B3D,iBACpB,kBAAkB,cAClB,SAAS,SACT,eAAc,SAAS,eAAe,mBACrC,iBAAiB;iBAIE,oBACpB,kBAAkB,eACjB,iBAAiB;iBAcE,gBACpB,kBAAkB,sBAClB,SAAS,SACT,eAAc,SAAS,eAAe,mBACrC,iBAAiB;iBAoBJ,oBACd,kBAAkB,oBAClB,gBAAgB,WAAW,gBAAgB,OAAO,iCAClD;iBAiBc,gBACd,kBAAkB,qBACjB,SAAS,eAAe"}
|
package/dist/router.js
CHANGED
|
@@ -1,172 +1,165 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
|
|
1
|
+
//#region src/router.ts
|
|
2
|
+
const FILE_ROUTE = Symbol("Vidact.Start.FileRoute");
|
|
3
|
+
function defineFileRoute(options) {
|
|
4
|
+
return Object.freeze({
|
|
5
|
+
[FILE_ROUTE]: true,
|
|
6
|
+
options: Object.freeze({ ...options })
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
function isFileRouteDefinition(value) {
|
|
10
|
+
return typeof value === "object" && value !== null && FILE_ROUTE in value;
|
|
11
|
+
}
|
|
12
|
+
function createRouteManifest(entries) {
|
|
13
|
+
const byId = /* @__PURE__ */ new Map();
|
|
14
|
+
for (const entry of entries) {
|
|
15
|
+
if (entry.id.length === 0) throw new TypeError("route id must be non-empty");
|
|
16
|
+
if (!entry.path.startsWith("/")) throw new TypeError(`route ${entry.id} path must start with /`);
|
|
17
|
+
if (byId.has(entry.id)) throw new TypeError(`duplicate route id ${entry.id}`);
|
|
18
|
+
byId.set(entry.id, Object.freeze({ ...entry }));
|
|
19
|
+
}
|
|
20
|
+
for (const entry of byId.values()) {
|
|
21
|
+
if (entry.parentId !== null && !byId.has(entry.parentId)) throw new TypeError(`route ${entry.id} has unknown parent ${entry.parentId}`);
|
|
22
|
+
assertAcyclicParentChain(entry, byId);
|
|
23
|
+
}
|
|
24
|
+
const frozenEntries = Object.freeze([...byId.values()]);
|
|
25
|
+
return Object.freeze({
|
|
26
|
+
entries: frozenEntries,
|
|
27
|
+
byId
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function matchRoutes(manifest, pathname) {
|
|
31
|
+
const normalized = normalizePathname(pathname);
|
|
32
|
+
let selected;
|
|
33
|
+
for (const entry of manifest.entries) {
|
|
34
|
+
const match = matchPath(entry.path, normalized);
|
|
35
|
+
if (match === void 0) continue;
|
|
36
|
+
const score = routeScore(entry, manifest);
|
|
37
|
+
if (selected === void 0 || score > selected.score) selected = {
|
|
38
|
+
entry,
|
|
39
|
+
params: match,
|
|
40
|
+
score
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
if (selected === void 0) return [];
|
|
44
|
+
const chain = [];
|
|
45
|
+
let entry = selected.entry;
|
|
46
|
+
while (entry !== void 0) {
|
|
47
|
+
chain.push(entry);
|
|
48
|
+
entry = entry.parentId === null ? void 0 : manifest.byId.get(entry.parentId);
|
|
49
|
+
}
|
|
50
|
+
return Object.freeze(chain.toReversed().map((matchedEntry) => Object.freeze({
|
|
51
|
+
entry: matchedEntry,
|
|
52
|
+
params: Object.freeze({ ...selected.params })
|
|
53
|
+
})));
|
|
54
|
+
}
|
|
55
|
+
async function loadRouteMatches(matches, request, suppliedData = {}) {
|
|
56
|
+
return runRouteLoaders(await resolveRouteMatches(matches), request, suppliedData);
|
|
57
|
+
}
|
|
58
|
+
async function resolveRouteMatches(matches) {
|
|
59
|
+
return Object.freeze(await Promise.all(matches.map(async (match) => {
|
|
60
|
+
const module = await match.entry.load();
|
|
61
|
+
return Object.freeze({
|
|
62
|
+
...match,
|
|
63
|
+
definition: readRouteDefinition(match.entry.id, module)
|
|
64
|
+
});
|
|
65
|
+
})));
|
|
66
|
+
}
|
|
67
|
+
async function runRouteLoaders(matches, request, suppliedData = {}) {
|
|
68
|
+
const loaded = [];
|
|
69
|
+
const parentData = { ...suppliedData };
|
|
70
|
+
for (const match of matches) {
|
|
71
|
+
const loaderData = Object.hasOwn(suppliedData, match.entry.id) ? suppliedData[match.entry.id] : match.definition.options.loader === void 0 ? void 0 : await match.definition.options.loader({
|
|
72
|
+
parentData: Object.freeze({ ...parentData }),
|
|
73
|
+
params: match.params,
|
|
74
|
+
request
|
|
75
|
+
});
|
|
76
|
+
parentData[match.entry.id] = loaderData;
|
|
77
|
+
loaded.push(Object.freeze({
|
|
78
|
+
...match,
|
|
79
|
+
loaderData
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
return Object.freeze(loaded);
|
|
83
|
+
}
|
|
84
|
+
function composeRouteMatches(matches, createElement, requestUrl) {
|
|
85
|
+
let children;
|
|
86
|
+
for (let index = matches.length - 1; index >= 0; index -= 1) {
|
|
87
|
+
const match = matches[index];
|
|
88
|
+
const component = match.definition.options.component;
|
|
89
|
+
if (component === void 0) continue;
|
|
90
|
+
children = createElement(component, {
|
|
91
|
+
children,
|
|
92
|
+
loaderData: match.loaderData,
|
|
93
|
+
params: match.params,
|
|
94
|
+
requestUrl
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
return children;
|
|
98
|
+
}
|
|
99
|
+
function routeLoaderData(matches) {
|
|
100
|
+
return Object.freeze(Object.fromEntries(matches.map((match) => [match.entry.id, match.loaderData])));
|
|
101
101
|
}
|
|
102
102
|
function readRouteDefinition(id, module) {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
}
|
|
107
|
-
return definition;
|
|
103
|
+
const definition = module.Route ?? module.default;
|
|
104
|
+
if (!isFileRouteDefinition(definition)) throw new TypeError(`route module ${id} must export a Route created by defineFileRoute`);
|
|
105
|
+
return definition;
|
|
108
106
|
}
|
|
109
107
|
function matchPath(pattern, pathname) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
else if (segment !== value)
|
|
130
|
-
return undefined;
|
|
131
|
-
pathIndex += 1;
|
|
132
|
-
}
|
|
133
|
-
return pathIndex === pathSegments.length ? Object.freeze(parameters) : undefined;
|
|
108
|
+
if (pattern === "/") return pathname === "/" ? Object.freeze({}) : void 0;
|
|
109
|
+
const patternSegments = segments(pattern);
|
|
110
|
+
const pathSegments = segments(pathname);
|
|
111
|
+
const parameters = {};
|
|
112
|
+
let pathIndex = 0;
|
|
113
|
+
for (const segment of patternSegments) {
|
|
114
|
+
if (segment === "*") {
|
|
115
|
+
if (pathIndex >= pathSegments.length) return void 0;
|
|
116
|
+
parameters["*"] = decodeSegment(pathSegments.slice(pathIndex).join("/"));
|
|
117
|
+
pathIndex = pathSegments.length;
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
const value = pathSegments[pathIndex];
|
|
121
|
+
if (value === void 0) return void 0;
|
|
122
|
+
if (segment.startsWith(":")) parameters[segment.slice(1)] = decodeSegment(value);
|
|
123
|
+
else if (segment !== value) return void 0;
|
|
124
|
+
pathIndex += 1;
|
|
125
|
+
}
|
|
126
|
+
return pathIndex === pathSegments.length ? Object.freeze(parameters) : void 0;
|
|
134
127
|
}
|
|
135
128
|
function normalizePathname(pathname) {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
return path.length > 1 ? path.replace(/\/+$/u, '') : '/';
|
|
129
|
+
const path = pathname.split(/[?#]/u, 1)[0] ?? "/";
|
|
130
|
+
if (!path.startsWith("/")) throw new TypeError("route pathname must start with /");
|
|
131
|
+
return path.length > 1 ? path.replace(/\/+$/u, "") : "/";
|
|
140
132
|
}
|
|
141
133
|
function segments(pathname) {
|
|
142
|
-
|
|
134
|
+
return pathname.split("/").filter(Boolean);
|
|
143
135
|
}
|
|
144
136
|
function decodeSegment(value) {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
}
|
|
137
|
+
try {
|
|
138
|
+
return decodeURIComponent(value);
|
|
139
|
+
} catch {
|
|
140
|
+
throw new TypeError(`invalid encoded route segment ${value}`);
|
|
141
|
+
}
|
|
151
142
|
}
|
|
152
143
|
function routeScore(entry, manifest) {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
144
|
+
const specificity = segments(entry.path).reduce((score, segment) => score + (segment === "*" ? 1 : segment.startsWith(":") ? 10 : 100), 0);
|
|
145
|
+
let depth = 0;
|
|
146
|
+
let current = entry;
|
|
147
|
+
while (current !== void 0) {
|
|
148
|
+
depth += 1;
|
|
149
|
+
current = current.parentId === null ? void 0 : manifest.byId.get(current.parentId);
|
|
150
|
+
}
|
|
151
|
+
return specificity * 1e3 + depth;
|
|
161
152
|
}
|
|
162
153
|
function assertAcyclicParentChain(entry, byId) {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
154
|
+
const visited = /* @__PURE__ */ new Set([entry.id]);
|
|
155
|
+
let parentId = entry.parentId;
|
|
156
|
+
while (parentId !== null) {
|
|
157
|
+
if (visited.has(parentId)) throw new TypeError(`route ${entry.id} has a cyclic parent chain`);
|
|
158
|
+
visited.add(parentId);
|
|
159
|
+
parentId = byId.get(parentId)?.parentId ?? null;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
//#endregion
|
|
163
|
+
export { composeRouteMatches, createRouteManifest, defineFileRoute, isFileRouteDefinition, loadRouteMatches, matchRoutes, resolveRouteMatches, routeLoaderData, runRouteLoaders };
|
|
164
|
+
|
|
172
165
|
//# sourceMappingURL=router.js.map
|
package/dist/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","
|
|
1
|
+
{"version":3,"file":"router.js","names":[],"sources":["../src/router.ts"],"mappings":"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"}
|