-
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
// SPDX-FileCopyrightText: 2024 Shota FUJI <pockawoooh@gmail.com>
//
// SPDX-License-Identifier: Apache-2.0
/** @jsx h */
import {
createContext,
h,
useContext,
} from "../../../deps/deno.land/x/nano_jsx/mod.ts";
interface PathResolver {
resolve(path: readonly string[]): string;
}
const PathResolverContext = createContext({
resolve(path: readonly string[]) {
return path.join("/");
},
});
export function usePathResolver(): PathResolver {
return useContext(PathResolverContext);
}
export interface PathResolverProviderProps {
/**
* How deep the path from the root?
* 0 for top-level documents.
* For example, the depth for "foo/bar/baz.html" is 2.
*
* @default 0
*/
depth?: number;
children: JSX.ElementChildrenAttribute["children"];
}
export function PathResolverProvider(
{ depth = 0, children }: PathResolverProviderProps,
) {
const resolver: PathResolver = {
resolve(path) {
return Array.from({ length: depth }, () => "../").join("") +
path.join("/");
},
};
return (
<PathResolverContext.Provider value={resolver}>
{children}
</PathResolverContext.Provider>
);
}