livemark 0.14.0 → 0.16.0

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.
Files changed (54) hide show
  1. package/build/components/Layout.js +8 -2
  2. package/build/components/SidebarArticles.js +9 -9
  3. package/build/components/SidebarLinks.js +3 -2
  4. package/build/components/SidebarSections.js +8 -2
  5. package/build/components/SiteTitle.js +3 -2
  6. package/build/content/article.d.ts +10 -10
  7. package/build/content/article.js +19 -17
  8. package/build/content-collections.js +3 -2
  9. package/build/helpers/article.d.ts +1 -15
  10. package/build/helpers/article.js +1 -34
  11. package/build/helpers/prefix-url.d.ts +6 -0
  12. package/build/helpers/prefix-url.js +24 -0
  13. package/build/helpers/prefix-url.unit.d.ts +1 -0
  14. package/build/helpers/prefix-url.unit.js +45 -0
  15. package/build/helpers/resolve-asset-path.d.ts +1 -1
  16. package/build/helpers/resolve-asset-path.js +9 -5
  17. package/build/helpers/resolve-asset-path.unit.d.ts +1 -0
  18. package/build/helpers/resolve-asset-path.unit.js +34 -0
  19. package/build/helpers/section.js +2 -1
  20. package/build/models/article.d.ts +0 -9
  21. package/build/models/article.js +1 -2
  22. package/build/models/config.d.ts +39 -11
  23. package/build/models/config.js +11 -1
  24. package/build/models/patch.d.ts +0 -1
  25. package/build/models/section.d.ts +27 -6
  26. package/build/models/section.js +14 -3
  27. package/build/plugins/remark-image.d.ts +1 -0
  28. package/build/plugins/remark-image.js +3 -3
  29. package/build/plugins/vite-livemark.js +6 -1
  30. package/build/router.js +3 -1
  31. package/build/routes/__root.js +3 -2
  32. package/build/vite.config.js +18 -4
  33. package/package.json +1 -1
  34. package/source/components/Layout.tsx +17 -1
  35. package/source/components/SidebarArticles.tsx +17 -24
  36. package/source/components/SidebarLinks.tsx +2 -1
  37. package/source/components/SidebarSections.tsx +18 -1
  38. package/source/components/SiteTitle.tsx +2 -1
  39. package/source/content/article.ts +20 -26
  40. package/source/content-collections.ts +2 -1
  41. package/source/helpers/article.ts +1 -39
  42. package/source/helpers/prefix-url.ts +22 -0
  43. package/source/helpers/prefix-url.unit.ts +57 -0
  44. package/source/helpers/resolve-asset-path.ts +12 -5
  45. package/source/helpers/resolve-asset-path.unit.ts +59 -0
  46. package/source/helpers/section.ts +1 -0
  47. package/source/models/article.ts +0 -10
  48. package/source/models/config.ts +9 -0
  49. package/source/models/section.ts +16 -2
  50. package/source/plugins/remark-image.ts +3 -3
  51. package/source/plugins/vite-livemark.ts +5 -0
  52. package/source/router.tsx +2 -0
  53. package/source/routes/__root.tsx +5 -1
  54. package/source/vite.config.ts +17 -3
@@ -4,39 +4,51 @@ export type ArticleSection = z.infer<typeof ArticleSection>;
4
4
  export declare const ArticleSection: z.ZodObject<{
5
5
  icon: z.ZodOptional<z.ZodString>;
6
6
  title: z.ZodString;
7
- prefix: z.ZodString;
8
7
  position: z.ZodDefault<z.ZodEnum<{
9
8
  header: "header";
10
9
  sidebar: "sidebar";
11
10
  }>>;
12
11
  type: z.ZodLiteral<"article">;
12
+ prefix: z.ZodString;
13
13
  }, z.core.$strip>;
14
14
  /** Blog section: date-sorted posts with tags and index. */
15
15
  export type BlogSection = z.infer<typeof BlogSection>;
16
16
  export declare const BlogSection: z.ZodObject<{
17
17
  icon: z.ZodOptional<z.ZodString>;
18
18
  title: z.ZodString;
19
- prefix: z.ZodString;
20
19
  position: z.ZodDefault<z.ZodEnum<{
21
20
  header: "header";
22
21
  sidebar: "sidebar";
23
22
  }>>;
24
23
  type: z.ZodLiteral<"blog">;
24
+ prefix: z.ZodString;
25
25
  }, z.core.$strip>;
26
26
  /** Changelog section: single file or GitHub releases, split per version. */
27
27
  export type ChangelogSection = z.infer<typeof ChangelogSection>;
28
28
  export declare const ChangelogSection: z.ZodObject<{
29
29
  icon: z.ZodOptional<z.ZodString>;
30
30
  title: z.ZodString;
31
- prefix: z.ZodString;
32
31
  position: z.ZodDefault<z.ZodEnum<{
33
32
  header: "header";
34
33
  sidebar: "sidebar";
35
34
  }>>;
36
35
  type: z.ZodLiteral<"changelog">;
36
+ prefix: z.ZodString;
37
37
  source: z.ZodString;
38
38
  version: z.ZodOptional<z.ZodBoolean>;
39
39
  }, z.core.$strip>;
40
+ /** External section: renders as a link to an arbitrary URL. */
41
+ export type ExternalSection = z.infer<typeof ExternalSection>;
42
+ export declare const ExternalSection: z.ZodObject<{
43
+ icon: z.ZodOptional<z.ZodString>;
44
+ title: z.ZodString;
45
+ position: z.ZodDefault<z.ZodEnum<{
46
+ header: "header";
47
+ sidebar: "sidebar";
48
+ }>>;
49
+ type: z.ZodLiteral<"external">;
50
+ url: z.ZodString;
51
+ }, z.core.$strip>;
40
52
  /**
41
53
  * A site section. Discriminated on `type`.
42
54
  * When `type` is omitted, it defaults to "article" so plain
@@ -46,30 +58,39 @@ export type Section = z.infer<typeof Section>;
46
58
  export declare const Section: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDiscriminatedUnion<[z.ZodObject<{
47
59
  icon: z.ZodOptional<z.ZodString>;
48
60
  title: z.ZodString;
49
- prefix: z.ZodString;
50
61
  position: z.ZodDefault<z.ZodEnum<{
51
62
  header: "header";
52
63
  sidebar: "sidebar";
53
64
  }>>;
54
65
  type: z.ZodLiteral<"article">;
66
+ prefix: z.ZodString;
55
67
  }, z.core.$strip>, z.ZodObject<{
56
68
  icon: z.ZodOptional<z.ZodString>;
57
69
  title: z.ZodString;
58
- prefix: z.ZodString;
59
70
  position: z.ZodDefault<z.ZodEnum<{
60
71
  header: "header";
61
72
  sidebar: "sidebar";
62
73
  }>>;
63
74
  type: z.ZodLiteral<"blog">;
75
+ prefix: z.ZodString;
64
76
  }, z.core.$strip>, z.ZodObject<{
65
77
  icon: z.ZodOptional<z.ZodString>;
66
78
  title: z.ZodString;
67
- prefix: z.ZodString;
68
79
  position: z.ZodDefault<z.ZodEnum<{
69
80
  header: "header";
70
81
  sidebar: "sidebar";
71
82
  }>>;
72
83
  type: z.ZodLiteral<"changelog">;
84
+ prefix: z.ZodString;
73
85
  source: z.ZodString;
74
86
  version: z.ZodOptional<z.ZodBoolean>;
87
+ }, z.core.$strip>, z.ZodObject<{
88
+ icon: z.ZodOptional<z.ZodString>;
89
+ title: z.ZodString;
90
+ position: z.ZodDefault<z.ZodEnum<{
91
+ header: "header";
92
+ sidebar: "sidebar";
93
+ }>>;
94
+ type: z.ZodLiteral<"external">;
95
+ url: z.ZodString;
75
96
  }, z.core.$strip>], "type">>;
@@ -2,25 +2,36 @@ import { z } from "zod";
2
2
  const BaseSection = z.object({
3
3
  icon: z.string().optional(),
4
4
  title: z.string(),
5
- prefix: z.string(),
6
5
  position: z.enum(["header", "sidebar"]).default("header"),
7
6
  });
8
7
  export const ArticleSection = BaseSection.extend({
9
8
  type: z.literal("article"),
9
+ prefix: z.string(),
10
10
  });
11
11
  export const BlogSection = BaseSection.extend({
12
12
  type: z.literal("blog"),
13
+ prefix: z.string(),
13
14
  });
14
15
  export const ChangelogSection = BaseSection.extend({
15
16
  type: z.literal("changelog"),
17
+ prefix: z.string(),
16
18
  source: z.string(),
17
19
  version: z.boolean().optional(),
18
20
  });
21
+ export const ExternalSection = BaseSection.extend({
22
+ type: z.literal("external"),
23
+ url: z.string(),
24
+ });
19
25
  export const Section = z.preprocess(input => {
20
26
  if (input === null || typeof input !== "object" || Array.isArray(input)) {
21
27
  return input;
22
28
  }
23
29
  const record = input;
24
30
  return "type" in record ? record : { ...record, type: "article" };
25
- }, z.discriminatedUnion("type", [ArticleSection, BlogSection, ChangelogSection]));
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9tb2RlbHMvc2VjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBRXZCLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDM0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDM0IsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDakIsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDbEIsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO0NBQzFELENBQUMsQ0FBQTtBQUlGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQy9DLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztDQUMzQixDQUFDLENBQUE7QUFJRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUM1QyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7Q0FDeEIsQ0FBQyxDQUFBO0FBSUYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDNUIsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDbEIsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDaEMsQ0FBQyxDQUFBO0FBUUYsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQ2pDLEtBQUssQ0FBQyxFQUFFO0lBQ04sSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEUsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsS0FBZ0MsQ0FBQTtJQUMvQyxPQUFPLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUE7QUFDbkUsQ0FBQyxFQUNELENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxjQUFjLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FDOUUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuY29uc3QgQmFzZVNlY3Rpb24gPSB6Lm9iamVjdCh7XG4gIGljb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGl0bGU6IHouc3RyaW5nKCksXG4gIHByZWZpeDogei5zdHJpbmcoKSxcbiAgcG9zaXRpb246IHouZW51bShbXCJoZWFkZXJcIiwgXCJzaWRlYmFyXCJdKS5kZWZhdWx0KFwiaGVhZGVyXCIpLFxufSlcblxuLyoqIERlZmF1bHQgc2VjdGlvbjogcmVuZGVycyBhcnRpY2xlcy4gKi9cbmV4cG9ydCB0eXBlIEFydGljbGVTZWN0aW9uID0gei5pbmZlcjx0eXBlb2YgQXJ0aWNsZVNlY3Rpb24+XG5leHBvcnQgY29uc3QgQXJ0aWNsZVNlY3Rpb24gPSBCYXNlU2VjdGlvbi5leHRlbmQoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJhcnRpY2xlXCIpLFxufSlcblxuLyoqIEJsb2cgc2VjdGlvbjogZGF0ZS1zb3J0ZWQgcG9zdHMgd2l0aCB0YWdzIGFuZCBpbmRleC4gKi9cbmV4cG9ydCB0eXBlIEJsb2dTZWN0aW9uID0gei5pbmZlcjx0eXBlb2YgQmxvZ1NlY3Rpb24+XG5leHBvcnQgY29uc3QgQmxvZ1NlY3Rpb24gPSBCYXNlU2VjdGlvbi5leHRlbmQoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJibG9nXCIpLFxufSlcblxuLyoqIENoYW5nZWxvZyBzZWN0aW9uOiBzaW5nbGUgZmlsZSBvciBHaXRIdWIgcmVsZWFzZXMsIHNwbGl0IHBlciB2ZXJzaW9uLiAqL1xuZXhwb3J0IHR5cGUgQ2hhbmdlbG9nU2VjdGlvbiA9IHouaW5mZXI8dHlwZW9mIENoYW5nZWxvZ1NlY3Rpb24+XG5leHBvcnQgY29uc3QgQ2hhbmdlbG9nU2VjdGlvbiA9IEJhc2VTZWN0aW9uLmV4dGVuZCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcImNoYW5nZWxvZ1wiKSxcbiAgc291cmNlOiB6LnN0cmluZygpLFxuICB2ZXJzaW9uOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxufSlcblxuLyoqXG4gKiBBIHNpdGUgc2VjdGlvbi4gRGlzY3JpbWluYXRlZCBvbiBgdHlwZWAuXG4gKiBXaGVuIGB0eXBlYCBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBcImFydGljbGVcIiBzbyBwbGFpblxuICogYHsgdGl0bGUsIHByZWZpeCB9YCBlbnRyaWVzIGtlZXAgd29ya2luZy5cbiAqL1xuZXhwb3J0IHR5cGUgU2VjdGlvbiA9IHouaW5mZXI8dHlwZW9mIFNlY3Rpb24+XG5leHBvcnQgY29uc3QgU2VjdGlvbiA9IHoucHJlcHJvY2VzcyhcbiAgaW5wdXQgPT4ge1xuICAgIGlmIChpbnB1dCA9PT0gbnVsbCB8fCB0eXBlb2YgaW5wdXQgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgIHJldHVybiBpbnB1dFxuICAgIH1cbiAgICBjb25zdCByZWNvcmQgPSBpbnB1dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIHJldHVybiBcInR5cGVcIiBpbiByZWNvcmQgPyByZWNvcmQgOiB7IC4uLnJlY29yZCwgdHlwZTogXCJhcnRpY2xlXCIgfVxuICB9LFxuICB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW0FydGljbGVTZWN0aW9uLCBCbG9nU2VjdGlvbiwgQ2hhbmdlbG9nU2VjdGlvbl0pLFxuKVxuIl19
31
+ }, z.discriminatedUnion("type", [
32
+ ArticleSection,
33
+ BlogSection,
34
+ ChangelogSection,
35
+ ExternalSection,
36
+ ]));
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9tb2RlbHMvc2VjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBRXZCLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDM0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDM0IsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDakIsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO0NBQzFELENBQUMsQ0FBQTtBQUlGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQy9DLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUMxQixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtDQUNuQixDQUFDLENBQUE7QUFJRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUM1QyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDdkIsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7Q0FDbkIsQ0FBQyxDQUFBO0FBSUYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDNUIsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDbEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDbEIsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDaEMsQ0FBQyxDQUFBO0FBSUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDaEQsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQzNCLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0NBQ2hCLENBQUMsQ0FBQTtBQVFGLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsVUFBVSxDQUNqQyxLQUFLLENBQUMsRUFBRTtJQUNOLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hFLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLEtBQWdDLENBQUE7SUFDL0MsT0FBTyxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFBO0FBQ25FLENBQUMsRUFDRCxDQUFDLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFO0lBQzNCLGNBQWM7SUFDZCxXQUFXO0lBQ1gsZ0JBQWdCO0lBQ2hCLGVBQWU7Q0FDaEIsQ0FBQyxDQUNILENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmNvbnN0IEJhc2VTZWN0aW9uID0gei5vYmplY3Qoe1xuICBpY29uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRpdGxlOiB6LnN0cmluZygpLFxuICBwb3NpdGlvbjogei5lbnVtKFtcImhlYWRlclwiLCBcInNpZGViYXJcIl0pLmRlZmF1bHQoXCJoZWFkZXJcIiksXG59KVxuXG4vKiogRGVmYXVsdCBzZWN0aW9uOiByZW5kZXJzIGFydGljbGVzLiAqL1xuZXhwb3J0IHR5cGUgQXJ0aWNsZVNlY3Rpb24gPSB6LmluZmVyPHR5cGVvZiBBcnRpY2xlU2VjdGlvbj5cbmV4cG9ydCBjb25zdCBBcnRpY2xlU2VjdGlvbiA9IEJhc2VTZWN0aW9uLmV4dGVuZCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcImFydGljbGVcIiksXG4gIHByZWZpeDogei5zdHJpbmcoKSxcbn0pXG5cbi8qKiBCbG9nIHNlY3Rpb246IGRhdGUtc29ydGVkIHBvc3RzIHdpdGggdGFncyBhbmQgaW5kZXguICovXG5leHBvcnQgdHlwZSBCbG9nU2VjdGlvbiA9IHouaW5mZXI8dHlwZW9mIEJsb2dTZWN0aW9uPlxuZXhwb3J0IGNvbnN0IEJsb2dTZWN0aW9uID0gQmFzZVNlY3Rpb24uZXh0ZW5kKHtcbiAgdHlwZTogei5saXRlcmFsKFwiYmxvZ1wiKSxcbiAgcHJlZml4OiB6LnN0cmluZygpLFxufSlcblxuLyoqIENoYW5nZWxvZyBzZWN0aW9uOiBzaW5nbGUgZmlsZSBvciBHaXRIdWIgcmVsZWFzZXMsIHNwbGl0IHBlciB2ZXJzaW9uLiAqL1xuZXhwb3J0IHR5cGUgQ2hhbmdlbG9nU2VjdGlvbiA9IHouaW5mZXI8dHlwZW9mIENoYW5nZWxvZ1NlY3Rpb24+XG5leHBvcnQgY29uc3QgQ2hhbmdlbG9nU2VjdGlvbiA9IEJhc2VTZWN0aW9uLmV4dGVuZCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcImNoYW5nZWxvZ1wiKSxcbiAgcHJlZml4OiB6LnN0cmluZygpLFxuICBzb3VyY2U6IHouc3RyaW5nKCksXG4gIHZlcnNpb246IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG59KVxuXG4vKiogRXh0ZXJuYWwgc2VjdGlvbjogcmVuZGVycyBhcyBhIGxpbmsgdG8gYW4gYXJiaXRyYXJ5IFVSTC4gKi9cbmV4cG9ydCB0eXBlIEV4dGVybmFsU2VjdGlvbiA9IHouaW5mZXI8dHlwZW9mIEV4dGVybmFsU2VjdGlvbj5cbmV4cG9ydCBjb25zdCBFeHRlcm5hbFNlY3Rpb24gPSBCYXNlU2VjdGlvbi5leHRlbmQoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJleHRlcm5hbFwiKSxcbiAgdXJsOiB6LnN0cmluZygpLFxufSlcblxuLyoqXG4gKiBBIHNpdGUgc2VjdGlvbi4gRGlzY3JpbWluYXRlZCBvbiBgdHlwZWAuXG4gKiBXaGVuIGB0eXBlYCBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBcImFydGljbGVcIiBzbyBwbGFpblxuICogYHsgdGl0bGUsIHByZWZpeCB9YCBlbnRyaWVzIGtlZXAgd29ya2luZy5cbiAqL1xuZXhwb3J0IHR5cGUgU2VjdGlvbiA9IHouaW5mZXI8dHlwZW9mIFNlY3Rpb24+XG5leHBvcnQgY29uc3QgU2VjdGlvbiA9IHoucHJlcHJvY2VzcyhcbiAgaW5wdXQgPT4ge1xuICAgIGlmIChpbnB1dCA9PT0gbnVsbCB8fCB0eXBlb2YgaW5wdXQgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgIHJldHVybiBpbnB1dFxuICAgIH1cbiAgICBjb25zdCByZWNvcmQgPSBpbnB1dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIHJldHVybiBcInR5cGVcIiBpbiByZWNvcmQgPyByZWNvcmQgOiB7IC4uLnJlY29yZCwgdHlwZTogXCJhcnRpY2xlXCIgfVxuICB9LFxuICB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICAgIEFydGljbGVTZWN0aW9uLFxuICAgIEJsb2dTZWN0aW9uLFxuICAgIENoYW5nZWxvZ1NlY3Rpb24sXG4gICAgRXh0ZXJuYWxTZWN0aW9uLFxuICBdKSxcbilcbiJdfQ==
@@ -5,5 +5,6 @@ export declare const remarkImage: Plugin<[
5
5
  {
6
6
  filePath: string;
7
7
  root: string;
8
+ base?: string;
8
9
  }
9
10
  ], Root>;
@@ -1,10 +1,10 @@
1
1
  import { visit } from "unist-util-visit";
2
2
  import { resolveAssetPath } from "../helpers/resolve-asset-path.js";
3
3
  /** Remark plugin that resolves relative image paths and unwraps image-only paragraphs */
4
- export const remarkImage = ({ filePath, root }) => {
4
+ export const remarkImage = ({ filePath, root, base }) => {
5
5
  return tree => {
6
6
  visit(tree, "image", node => {
7
- node.url = resolveAssetPath(node.url, filePath, root);
7
+ node.url = resolveAssetPath(node.url, filePath, root, base);
8
8
  });
9
9
  visit(tree, "paragraph", (node, index, parent) => {
10
10
  if (!parent || typeof index !== "number")
@@ -23,4 +23,4 @@ export const remarkImage = ({ filePath, root }) => {
23
23
  });
24
24
  };
25
25
  };
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtYXJrLWltYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL3BsdWdpbnMvcmVtYXJrLWltYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUVuRSx5RkFBeUY7QUFDekYsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUdwQixDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7SUFDekIsT0FBTyxJQUFJLENBQUMsRUFBRTtRQUNaLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxHQUFHLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDdkQsQ0FBQyxDQUFDLENBQUE7UUFFRixLQUFLLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDL0MsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO2dCQUFFLE9BQU07WUFDaEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQ3JDLEtBQUssQ0FBQyxFQUFFLENBQ04sS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPO2dCQUN0QixLQUFLLENBQUMsSUFBSSxLQUFLLGdCQUFnQjtnQkFDL0IsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPO2dCQUN0QixDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQ3ZELENBQUE7WUFDRCxJQUFJLENBQUMsV0FBVztnQkFBRSxPQUFNO1lBQ3hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUNqQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQ25FLENBQUE7WUFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFBRSxPQUFNO1lBQy9CLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQTtZQUMzQyxPQUFPLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFBO1FBQzlCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFBO0FBQ0gsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSb290IH0gZnJvbSBcIm1kYXN0XCJcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSBcInVuaWZpZWRcIlxuaW1wb3J0IHsgdmlzaXQgfSBmcm9tIFwidW5pc3QtdXRpbC12aXNpdFwiXG5pbXBvcnQgeyByZXNvbHZlQXNzZXRQYXRoIH0gZnJvbSBcIi4uL2hlbHBlcnMvcmVzb2x2ZS1hc3NldC1wYXRoLnRzXCJcblxuLyoqIFJlbWFyayBwbHVnaW4gdGhhdCByZXNvbHZlcyByZWxhdGl2ZSBpbWFnZSBwYXRocyBhbmQgdW53cmFwcyBpbWFnZS1vbmx5IHBhcmFncmFwaHMgKi9cbmV4cG9ydCBjb25zdCByZW1hcmtJbWFnZTogUGx1Z2luPFxuICBbeyBmaWxlUGF0aDogc3RyaW5nOyByb290OiBzdHJpbmcgfV0sXG4gIFJvb3Rcbj4gPSAoeyBmaWxlUGF0aCwgcm9vdCB9KSA9PiB7XG4gIHJldHVybiB0cmVlID0+IHtcbiAgICB2aXNpdCh0cmVlLCBcImltYWdlXCIsIG5vZGUgPT4ge1xuICAgICAgbm9kZS51cmwgPSByZXNvbHZlQXNzZXRQYXRoKG5vZGUudXJsLCBmaWxlUGF0aCwgcm9vdClcbiAgICB9KVxuXG4gICAgdmlzaXQodHJlZSwgXCJwYXJhZ3JhcGhcIiwgKG5vZGUsIGluZGV4LCBwYXJlbnQpID0+IHtcbiAgICAgIGlmICghcGFyZW50IHx8IHR5cGVvZiBpbmRleCAhPT0gXCJudW1iZXJcIikgcmV0dXJuXG4gICAgICBjb25zdCBpc0ltYWdlT25seSA9IG5vZGUuY2hpbGRyZW4uZXZlcnkoXG4gICAgICAgIGNoaWxkID0+XG4gICAgICAgICAgY2hpbGQudHlwZSA9PT0gXCJpbWFnZVwiIHx8XG4gICAgICAgICAgY2hpbGQudHlwZSA9PT0gXCJpbWFnZVJlZmVyZW5jZVwiIHx8XG4gICAgICAgICAgY2hpbGQudHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgKGNoaWxkLnR5cGUgPT09IFwidGV4dFwiICYmIGNoaWxkLnZhbHVlLnRyaW0oKSA9PT0gXCJcIiksXG4gICAgICApXG4gICAgICBpZiAoIWlzSW1hZ2VPbmx5KSByZXR1cm5cbiAgICAgIGNvbnN0IGltYWdlcyA9IG5vZGUuY2hpbGRyZW4uZmlsdGVyKFxuICAgICAgICBjaGlsZCA9PiBjaGlsZC50eXBlID09PSBcImltYWdlXCIgfHwgY2hpbGQudHlwZSA9PT0gXCJpbWFnZVJlZmVyZW5jZVwiLFxuICAgICAgKVxuICAgICAgaWYgKGltYWdlcy5sZW5ndGggPT09IDApIHJldHVyblxuICAgICAgcGFyZW50LmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSwgLi4uaW1hZ2VzKVxuICAgICAgcmV0dXJuIGluZGV4ICsgaW1hZ2VzLmxlbmd0aFxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtYXJrLWltYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL3BsdWdpbnMvcmVtYXJrLWltYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUVuRSx5RkFBeUY7QUFDekYsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUdwQixDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO0lBQy9CLE9BQU8sSUFBSSxDQUFDLEVBQUU7UUFDWixLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsR0FBRyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUM3RCxDQUFDLENBQUMsQ0FBQTtRQUVGLEtBQUssQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMvQyxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7Z0JBQUUsT0FBTTtZQUNoRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FDckMsS0FBSyxDQUFDLEVBQUUsQ0FDTixLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU87Z0JBQ3RCLEtBQUssQ0FBQyxJQUFJLEtBQUssZ0JBQWdCO2dCQUMvQixLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU87Z0JBQ3RCLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FDdkQsQ0FBQTtZQUNELElBQUksQ0FBQyxXQUFXO2dCQUFFLE9BQU07WUFDeEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQ2pDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FDbkUsQ0FBQTtZQUNELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUFFLE9BQU07WUFDL0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFBO1lBQzNDLE9BQU8sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUE7UUFDOUIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUE7QUFDSCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJvb3QgfSBmcm9tIFwibWRhc3RcIlxuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tIFwidW5pZmllZFwiXG5pbXBvcnQgeyB2aXNpdCB9IGZyb20gXCJ1bmlzdC11dGlsLXZpc2l0XCJcbmltcG9ydCB7IHJlc29sdmVBc3NldFBhdGggfSBmcm9tIFwiLi4vaGVscGVycy9yZXNvbHZlLWFzc2V0LXBhdGgudHNcIlxuXG4vKiogUmVtYXJrIHBsdWdpbiB0aGF0IHJlc29sdmVzIHJlbGF0aXZlIGltYWdlIHBhdGhzIGFuZCB1bndyYXBzIGltYWdlLW9ubHkgcGFyYWdyYXBocyAqL1xuZXhwb3J0IGNvbnN0IHJlbWFya0ltYWdlOiBQbHVnaW48XG4gIFt7IGZpbGVQYXRoOiBzdHJpbmc7IHJvb3Q6IHN0cmluZzsgYmFzZT86IHN0cmluZyB9XSxcbiAgUm9vdFxuPiA9ICh7IGZpbGVQYXRoLCByb290LCBiYXNlIH0pID0+IHtcbiAgcmV0dXJuIHRyZWUgPT4ge1xuICAgIHZpc2l0KHRyZWUsIFwiaW1hZ2VcIiwgbm9kZSA9PiB7XG4gICAgICBub2RlLnVybCA9IHJlc29sdmVBc3NldFBhdGgobm9kZS51cmwsIGZpbGVQYXRoLCByb290LCBiYXNlKVxuICAgIH0pXG5cbiAgICB2aXNpdCh0cmVlLCBcInBhcmFncmFwaFwiLCAobm9kZSwgaW5kZXgsIHBhcmVudCkgPT4ge1xuICAgICAgaWYgKCFwYXJlbnQgfHwgdHlwZW9mIGluZGV4ICE9PSBcIm51bWJlclwiKSByZXR1cm5cbiAgICAgIGNvbnN0IGlzSW1hZ2VPbmx5ID0gbm9kZS5jaGlsZHJlbi5ldmVyeShcbiAgICAgICAgY2hpbGQgPT5cbiAgICAgICAgICBjaGlsZC50eXBlID09PSBcImltYWdlXCIgfHxcbiAgICAgICAgICBjaGlsZC50eXBlID09PSBcImltYWdlUmVmZXJlbmNlXCIgfHxcbiAgICAgICAgICBjaGlsZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAoY2hpbGQudHlwZSA9PT0gXCJ0ZXh0XCIgJiYgY2hpbGQudmFsdWUudHJpbSgpID09PSBcIlwiKSxcbiAgICAgIClcbiAgICAgIGlmICghaXNJbWFnZU9ubHkpIHJldHVyblxuICAgICAgY29uc3QgaW1hZ2VzID0gbm9kZS5jaGlsZHJlbi5maWx0ZXIoXG4gICAgICAgIGNoaWxkID0+IGNoaWxkLnR5cGUgPT09IFwiaW1hZ2VcIiB8fCBjaGlsZC50eXBlID09PSBcImltYWdlUmVmZXJlbmNlXCIsXG4gICAgICApXG4gICAgICBpZiAoaW1hZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG4gICAgICBwYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxLCAuLi5pbWFnZXMpXG4gICAgICByZXR1cm4gaW5kZXggKyBpbWFnZXMubGVuZ3RoXG4gICAgfSlcbiAgfVxufVxuIl19
@@ -36,6 +36,11 @@ export function livemark(opts) {
36
36
  targetDir = buildTarget(opts.config.configPath);
37
37
  const base = {
38
38
  root: targetDir,
39
+ // Mount everything (asset URLs, modulepreloads, dev server) under
40
+ // `config.base` so the same build works at root or at a sub-path
41
+ // (e.g. GitHub Pages `https://user.github.io/repo/`). The router
42
+ // and asset-path resolver mirror this at runtime.
43
+ base: opts.config.base ? `${opts.config.base}/` : "/",
39
44
  // outDir lives outside the target root (in the consumer's
40
45
  // .livemark/) so the consumer can find their deployable output
41
46
  // without digging into node_modules. Vite's default refusal to
@@ -213,4 +218,4 @@ async function resolveViteOverride(vite, env) {
213
218
  function isObject(v) {
214
219
  return v !== null && typeof v === "object";
215
220
  }
216
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS1saXZlbWFyay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9wbHVnaW5zL3ZpdGUtbGl2ZW1hcmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3BELE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ3JDLE9BQU8sRUFBRSxLQUFLLElBQUksYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBT2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDbEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBRXhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFNbkUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQTtBQUVsRDs7Ozs7Ozs7Ozs7NkJBVzZCO0FBQzdCLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFBO0FBQ3JDLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQTtBQUU3Qzs7Ozs7MENBSzBDO0FBQzFDLE1BQU0sVUFBVSxRQUFRLENBQUMsSUFBcUI7SUFDNUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQ3pELElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQTtJQUNsQixPQUFPO1FBQ0wsSUFBSSxFQUFFLFVBQVU7UUFDaEIsT0FBTyxFQUFFLEtBQUs7UUFDZCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHO1lBQ2pCLFNB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LElBQUksRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFBO0FBQzlELENBQUM7QUFFRDs7O3FDQUdxQztBQUNyQyxLQUFLLFVBQVUsbUJBQW1CLENBQ2hDLElBQWEsRUFDYixHQUFjO0lBRWQsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUN0QixJQUFJLE9BQU8sSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQy9CLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUMxRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFDekMsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtBQUNyQyxDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsQ0FBVTtJQUMxQixPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFBO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcFN5bmMsIGV4aXN0c1N5bmMsIHJtU3luYyB9IGZyb20gXCJub2RlOmZzXCJcbmltcG9ydCB7IGpvaW4sIHNlcCB9IGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHsgd2F0Y2ggYXMgY2hva2lkYXJXYXRjaCB9IGZyb20gXCJjaG9raWRhclwiXG5pbXBvcnQgdHlwZSB7XG4gIENvbmZpZ0VudixcbiAgUGx1Z2luLFxuICBVc2VyQ29uZmlnIGFzIFZpdGVVc2VyQ29uZmlnLFxuICBWaXRlRGV2U2VydmVyLFxufSBmcm9tIFwidml0ZVwiXG5pbXBvcnQgeyBtZXJnZUNvbmZpZyB9IGZyb20gXCJ2aXRlXCJcbmltcG9ydCB7IGJ1aWxkVGFyZ2V0IH0gZnJvbSBcIi4uL2FjdGlvbnMvdGFyZ2V0L2J1aWxkLnRzXCJcbmltcG9ydCB0eXBlIHsgQ29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy9jb25maWcudHNcIlxuaW1wb3J0IHsgV2Vic2l0ZUNvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvY29uZmlnLnRzXCJcbmltcG9ydCB7IEVTQ0FQQUJMRV9GSUxFUywgRVNDQVBBQkxFX0ZPTERFUlMgfSBmcm9tIFwiLi4vc2V0dGluZ3MudHNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIExpdmVtYXJrT3B0aW9ucyB7XG4gIGNvbmZpZzogQ29uZmlnXG59XG5cbmNvbnN0IFNPVVJDRV9ESVIgPSBqb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiLi5cIilcblxuLyoqIFNpbmdsZSB2aXJ0dWFsIG1vZHVsZSBleHBvc2luZyBsaXZlbWFyaydzIHJ1bnRpbWUgdmFsdWVzIHRvIGNvbnN1bWVyXG4gKiAgb3ZlcnJpZGUgZmlsZXMgdmlhIG5hbWVkIGV4cG9ydHM6XG4gKlxuICogICAgICBpbXBvcnQgeyBjb25maWcgfSBmcm9tIFwibGl2ZW1hcms6dmlydHVhbFwiXG4gKlxuICogIEN1cnJlbnRseSBleHBvcnRzIGBjb25maWdgICh2YWxpZGF0ZWQgYFdlYnNpdGVDb25maWdgKTsgZnV0dXJlXG4gKiAgYWRkaXRpb25zIChlLmcuIGBhcnRpY2xlc2AsIGBzZWN0aW9uc2ApIGxhbmQgaGVyZSBhcyBuZXcgbmFtZWRcbiAqICBleHBvcnRzIHdpdGhvdXQgY29uc3VtZXJzIGNoYW5naW5nIHRoZWlyIGltcG9ydCBzdGF0ZW1lbnRzLlxuICpcbiAqICBUaGUgYFxcMGAgcHJlZml4IG9uIHRoZSByZXNvbHZlZCBpZCBpcyBWaXRlJ3MgY29udmVudGlvbiB0byBzaWduYWxcbiAqICBcInRoaXMgaXMgYSB2aXJ0dWFsIG1vZHVsZSDigJQgbm8gb3RoZXIgcGx1Z2luIHNob3VsZCB0cnkgdG8gcmVzb2x2ZVxuICogIG9yIGxvYWQgaXQgZnJvbSBkaXNrXCIuICovXG5jb25zdCBWSVJUVUFMX0lEID0gXCJsaXZlbWFyazp2aXJ0dWFsXCJcbmNvbnN0IFZJUlRVQUxfUkVTT0xWRURfSUQgPSBgXFwwJHtWSVJUVUFMX0lEfWBcblxuLyoqIE93bnMgdGhlIHBlci1jb25zdW1lciBgdGFyZ2V0cy88aGFzaD4vYCBtb3VudDogc3ludGhlc2l6ZXMgaXQgdmlhXG4gKiAgYGJ1aWxkVGFyZ2V0KClgLCByZXR1cm5zIHRoZSBWaXRlIGNvbmZpZyB0aGF0IGFuY2hvcnMgdGhlcmUsIGFuZFxuICogIHdhdGNoZXMgdGhlIGNvbnN1bWVyJ3MgYC5saXZlbWFyay9gIChwbHVzIGxpdmVtYXJrJ3MgYHNvdXJjZS9gIGluXG4gKiAgZGV2KSBmb3IgY2hhbmdlcyB0aGF0IG5lZWQgdG8gYmUgcmUtY29waWVkIGludG8gdGhlIHRhcmdldC4gVGhlXG4gKiAgb3ZlcnJpZGUgbWVjaGFuaXNtIGlzIHB1cmUgZmlsZS1zeXN0ZW0gKGZ1bGwgY29waWVzKSDigJQgbm8gcmVzb2x2ZUlkXG4gKiAgcmVkaXJlY3Rpb24sIG5vIHJlYWxwYXRoIHN1cnByaXNlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXZlbWFyayhvcHRzOiBMaXZlbWFya09wdGlvbnMpOiBQbHVnaW4ge1xuICBjb25zdCBvdmVycmlkZXNSb290ID0gam9pbihvcHRzLmNvbmZpZy5yb290LCBcIi5saXZlbWFya1wiKVxuICBsZXQgdGFyZ2V0RGlyID0gXCJcIlxuICByZXR1cm4ge1xuICAgIG5hbWU6IFwibGl2ZW1hcmtcIixcbiAgICBlbmZvcmNlOiBcInByZVwiLFxuICAgIGFzeW5jIGNvbmZpZyhfLCBlbnYpIHtcbiAgICAgIHRhcmdldERpciA9IGJ1aWxkVGFyZ2V0KG9wdHMuY29uZmlnLmNvbmZpZ1BhdGgpXG4gICAgICBjb25zdCBiYXNlOiBWaXRlVXNlckNvbmZpZyA9IHtcbiAgICAgICAgcm9vdDogdGFyZ2V0RGlyLFxuICAgICAgICAvLyBvdXREaXIgbGl2ZXMgb3V0c2lkZSB0aGUgdGFyZ2V0IHJvb3QgKGluIHRoZSBjb25zdW1lcidzXG4gICAgICAgIC8vIC5saXZlbWFyay8pIHNvIHRoZSBjb25zdW1lciBjYW4gZmluZCB0aGVpciBkZXBsb3lhYmxlIG91dHB1dFxuICAgICAgICAvLyB3aXRob3V0IGRpZ2dpbmcgaW50byBub2RlX21vZHVsZXMuIFZpdGUncyBkZWZhdWx0IHJlZnVzYWwgdG9cbiAgICAgICAgLy8gZW1wdHkgb3V0LW9mLXJvb3QgZGlyZWN0b3JpZXMgZG9lc24ndCBhcHBseSBoZXJlIGJlY2F1c2UgdGhlXG4gICAgICAgIC8vIHRhcmdldC8gcm9vdCBpcyBsaXZlbWFyaydzLCBub3QgdGhlIGNvbnN1bWVyJ3MuXG4gICAgICAgIGJ1aWxkOiB7IG91dERpcjogam9pbihvdmVycmlkZXNSb290LCBcImJ1aWxkXCIpLCBlbXB0eU91dERpcjogdHJ1ZSB9LFxuICAgICAgICByZXNvbHZlOiB7IGRlZHVwZTogW1wicmVhY3RcIiwgXCJyZWFjdC1kb21cIl0gfSxcbiAgICAgICAgLy8gRm9yIHRoZSBTU1IgYnVpbGQgb25seSwgaW5saW5lIGV2ZXJ5IG5vZGVfbW9kdWxlcyBkZXAgaW50b1xuICAgICAgICAvLyBzZXJ2ZXIuanMuIFRoZSBwcmVyZW5kZXIgc3RlcCAod2hpY2ggcnVucyBzZXJ2ZXIuanMgd2l0aFxuICAgICAgICAvLyBOb2RlKSB3YWxrcyBub2RlX21vZHVsZXMgZnJvbSB0aGUgYnVpbGQvIGRpciBhbmQgY2FuJ3QgcmVhY2hcbiAgICAgICAgLy8gcGFja2FnZXMgYnVyaWVkIGluIHBucG0ncyBgLnBucG0vKi9ub2RlX21vZHVsZXMvYCAoZS5nLlxuICAgICAgICAvLyBUYW5TdGFjay1pbnRlcm5hbCBhbGlhc2VzIGxpa2UgYGgzLXYyYCkuIFNlbGYtY29udGFpbmVkXG4gICAgICAgIC8vIGJ1bmRsZSBieXBhc3NlcyB0aGUgaXNzdWUuIERldiBTU1Iga2VlcHMgZXh0ZXJuYWxzIChmYXN0ZXIpLlxuICAgICAgICAuLi4oZW52LmNvbW1hbmQgPT09IFwiYnVpbGRcIiAmJiB7XG4gICAgICAgICAgZW52aXJvbm1lbnRzOiB7IHNzcjogeyByZXNvbHZlOiB7IG5vRXh0ZXJuYWw6IHRydWUgfSB9IH0sXG4gICAgICAgIH0pLFxuICAgICAgfVxuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBhd2FpdCByZXNvbHZlVml0ZU92ZXJyaWRlKG9wdHMuY29uZmlnLnZpdGUsIGVudilcbiAgICAgIHJldHVybiBvdmVycmlkZSA/IG1lcmdlQ29uZmlnKGJhc2UsIG92ZXJyaWRlKSA6IGJhc2VcbiAgICB9LFxuICAgIHJlc29sdmVJZChpZCkge1xuICAgICAgaWYgKGlkID09PSBWSVJUVUFMX0lEKSByZXR1cm4gVklSVFVBTF9SRVNPTFZFRF9JRFxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuICAgIGxvYWQoaWQpIHtcbiAgICAgIGlmIChpZCAhPT0gVklSVFVBTF9SRVNPTFZFRF9JRCkgcmV0dXJuIG51bGxcbiAgICAgIGNvbnN0IGNvbmZpZyA9IFdlYnNpdGVDb25maWcucGFyc2Uob3B0cy5jb25maWcpXG4gICAgICByZXR1cm4gYGV4cG9ydCBjb25zdCBjb25maWcgPSAke0pTT04uc3RyaW5naWZ5KGNvbmZpZyl9YFxuICAgIH0sXG4gICAgY29uZmlndXJlU2VydmVyKHNlcnZlcikge1xuICAgICAgLy8gVHdvIHJlYXNvbnMgd2UgZG9uJ3QgdXNlIFZpdGUncyBvd24gYHNlcnZlci53YXRjaGVyYDpcbiAgICAgIC8vICAgMS4gVml0ZSA4IGJ1bmRsZXMgY2hva2lkYXIgMyB3aXRoIGBkaXNhYmxlR2xvYmJpbmc6IHRydWVgLCBhbmRcbiAgICAgIC8vICAgICAgcGF0aHMgYWRkZWQgdmlhIGBzZXJ2ZXIud2F0Y2hlci5hZGQoKWAgZm9yIHN1cmZhY2VzIG91dHNpZGVcbiAgICAgIC8vICAgICAgVml0ZSdzIHJvb3QgbmV2ZXIgZmlyZSDigJQgZ2V0V2F0Y2hlZCgpIHJlcG9ydHMgdGhlbSBidXQgbm9cbiAgICAgIC8vICAgICAgZXZlbnRzIGFycml2ZSBmb3IgZXh0ZXJuYWwgZWRpdG9ycy5cbiAgICAgIC8vICAgMi4gVml0ZSdzIGNob2tpZGFyIGlnbm9yZXMgYCoqXFwvbm9kZV9tb2R1bGVzLyoqYCBieSBkZWZhdWx0LCBzb1xuICAgICAgLy8gICAgICBldmVuIGlmICgxKSB3ZXJlIGZpeGVkLCBvdXIgdGFyZ2V0RGlyICh3aGljaCBsaXZlcyBpbnNpZGVcbiAgICAgIC8vICAgICAgbGl2ZW1hcmsncyBvd24gbm9kZV9tb2R1bGVzIGluIGNvbnN1bWVyIHByb2plY3RzKSB3b3VsZCBiZVxuICAgICAgLy8gICAgICBzaWxlbnRseSBmaWx0ZXJlZC4gV2UgZW1pdCB0aGUgY2hhbmdlIGV2ZW50IG1hbnVhbGx5IG9udG9cbiAgICAgIC8vICAgICAgYHNlcnZlci53YXRjaGVyYCBhZnRlciBjcFN5bmMg4oCUIHNlZSB7QGxpbmsgbm90aWZ5Vml0ZX0uXG4gICAgICAvLyBBIGRlZGljYXRlZCBjaG9raWRhciA1IHdhdGNoZXIgc2V0IHVwIGRpcmVjdGx5IG9uIHRoZXNlIHBhdGhzXG4gICAgICAvLyBmaXJlcyByZWxpYWJseTsgd2UgZm9yd2FyZCBldmVudHMgaW50byBWaXRlJ3MgSE1SIHBpcGVsaW5lIGJlbG93LlxuICAgICAgY29uc3Qgb3ZlcmxheVBhdGhzOiBzdHJpbmdbXSA9IFtdXG4gICAgICBmb3IgKGNvbnN0IGZvbGRlciBvZiBFU0NBUEFCTEVfRk9MREVSUykge1xuICAgICAgICBvdmVybGF5UGF0aHMucHVzaChqb2luKG92ZXJyaWRlc1Jvb3QsIGZvbGRlcikpXG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgRVNDQVBBQkxFX0ZJTEVTKSB7XG4gICAgICAgIG92ZXJsYXlQYXRocy5wdXNoKGpvaW4ob3ZlcnJpZGVzUm9vdCwgZmlsZSkpXG4gICAgICB9XG4gICAgICBjb25zdCB3YXRjaGVyID0gY2hva2lkYXJXYXRjaChcbiAgICAgICAgW29wdHMuY29uZmlnLmNvbmZpZ1BhdGgsIC4uLm92ZXJsYXlQYXRocywgU09VUkNFX0RJUl0sXG4gICAgICAgIHsgaWdub3JlSW5pdGlhbDogdHJ1ZSwgaWdub3JlUGVybWlzc2lvbkVycm9yczogdHJ1ZSB9LFxuICAgICAgKVxuICAgICAgd2F0Y2hlci5vbihcImNoYW5nZVwiLCBmaWxlID0+IG9uQ2hhbmdlKGZpbGUsIFwiY2hhbmdlXCIpKVxuICAgICAgd2F0Y2hlci5vbihcImFkZFwiLCBmaWxlID0+IG9uQ2hhbmdlKGZpbGUsIFwiYWRkXCIpKVxuICAgICAgd2F0Y2hlci5vbihcInVubGlua1wiLCBmaWxlID0+IG9uQ2hhbmdlKGZpbGUsIFwidW5saW5rXCIpKVxuICAgICAgY29uc3QgY2xvc2VXYXRjaGVyID0gKCkgPT4ge1xuICAgICAgICB3YXRjaGVyLmNsb3NlKClcbiAgICAgIH1cbiAgICAgIHNlcnZlci5odHRwU2VydmVyPy5vbmNlKFwiY2xvc2VcIiwgY2xvc2VXYXRjaGVyKVxuXG4gICAgICBmdW5jdGlvbiBvbkNoYW5nZShmaWxlOiBzdHJpbmcsIGtpbmQ6IFwiY2hhbmdlXCIgfCBcImFkZFwiIHwgXCJ1bmxpbmtcIikge1xuICAgICAgICBpZiAoZmlsZSA9PT0gb3B0cy5jb25maWcuY29uZmlnUGF0aCkge1xuICAgICAgICAgIHNlcnZlci5yZXN0YXJ0KClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvdmVybGF5SGl0ID0gbWF0Y2hPdmVybGF5KGZpbGUsIG92ZXJyaWRlc1Jvb3QpXG4gICAgICAgIGlmIChvdmVybGF5SGl0KSB7XG4gICAgICAgICAgc3luY092ZXJsYXkob3ZlcmxheUhpdCwga2luZCwgdGFyZ2V0RGlyLCBvdmVycmlkZXNSb290KVxuICAgICAgICAgIG5vdGlmeVZpdGUoc2VydmVyLCBqb2luKHRhcmdldERpciwgb3ZlcmxheUhpdC5yZWwpLCBraW5kKVxuICAgICAgICAgIGlmIChraW5kICE9PSBcImNoYW5nZVwiKSBmdWxsUmVsb2FkKHNlcnZlcilcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb3VyY2VIaXQgPSBtYXRjaFNvdXJjZShmaWxlKVxuICAgICAgICBpZiAoc291cmNlSGl0KSB7XG4gICAgICAgICAgc3luY1NvdXJjZShzb3VyY2VIaXQsIGtpbmQsIHRhcmdldERpciwgb3ZlcnJpZGVzUm9vdClcbiAgICAgICAgICBub3RpZnlWaXRlKHNlcnZlciwgam9pbih0YXJnZXREaXIsIHNvdXJjZUhpdC5yZWwpLCBraW5kKVxuICAgICAgICAgIGlmIChraW5kICE9PSBcImNoYW5nZVwiKSBmdWxsUmVsb2FkKHNlcnZlcilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH1cbn1cblxuaW50ZXJmYWNlIEhpdCB7XG4gIHJlbDogc3RyaW5nXG4gIGNhdGVnb3J5OiBcImZvbGRlclwiIHwgXCJmaWxlXCIgfCBudWxsXG59XG5cbmZ1bmN0aW9uIG1hdGNoT3ZlcmxheShmaWxlOiBzdHJpbmcsIG92ZXJyaWRlc1Jvb3Q6IHN0cmluZyk6IEhpdCB8IG51bGwge1xuICBjb25zdCBwcmVmaXggPSBgJHtvdmVycmlkZXNSb290fSR7c2VwfWBcbiAgaWYgKCFmaWxlLnN0YXJ0c1dpdGgocHJlZml4KSkgcmV0dXJuIG51bGxcbiAgY29uc3QgcmVsID0gZmlsZS5zbGljZShwcmVmaXgubGVuZ3RoKVxuICByZXR1cm4geyByZWwsIGNhdGVnb3J5OiBjbGFzc2lmeShyZWwpIH1cbn1cblxuZnVuY3Rpb24gbWF0Y2hTb3VyY2UoZmlsZTogc3RyaW5nKTogSGl0IHwgbnVsbCB7XG4gIGNvbnN0IHByZWZpeCA9IGAke1NPVVJDRV9ESVJ9JHtzZXB9YFxuICBpZiAoIWZpbGUuc3RhcnRzV2l0aChwcmVmaXgpKSByZXR1cm4gbnVsbFxuICAvLyBTa2lwIHRoZSB0YXJnZXRzLyBvdXRwdXQgZGlyIGl0c2VsZiAoc2libGluZyBvZiBzb3VyY2UvKSBhbmQgYW55XG4gIC8vIGAuZ2VuLnRzYCBmaWxlcyB0aGF0IGRvd25zdHJlYW0gdG9vbHMgcmVnZW5lcmF0ZSBpbnNpZGUgdGhlIHRhcmdldC5cbiAgY29uc3QgcmVsID0gZmlsZS5zbGljZShwcmVmaXgubGVuZ3RoKVxuICBpZiAocmVsID09PSBcIlwiIHx8IHJlbC5pbmNsdWRlcyhcInJvdXRlVHJlZS5nZW4udHNcIikpIHJldHVybiBudWxsXG4gIHJldHVybiB7IHJlbCwgY2F0ZWdvcnk6IGNsYXNzaWZ5KHJlbCkgfVxufVxuXG5mdW5jdGlvbiBjbGFzc2lmeShyZWw6IHN0cmluZyk6IFwiZm9sZGVyXCIgfCBcImZpbGVcIiB8IG51bGwge1xuICBjb25zdCBbaGVhZF0gPSByZWwuc3BsaXQoc2VwKVxuICBpZiAoaGVhZCAmJiBFU0NBUEFCTEVfRk9MREVSUy5pbmNsdWRlcyhoZWFkKSkgcmV0dXJuIFwiZm9sZGVyXCJcbiAgaWYgKEVTQ0FQQUJMRV9GSUxFUy5pbmNsdWRlcyhyZWwpKSByZXR1cm4gXCJmaWxlXCJcbiAgLy8gTm9uLWVzY2FwYWJsZSBzb3VyY2UgZmlsZXMgc3RpbGwgbmVlZCB0byBmbG93IGludG8gdGFyZ2V0IGR1cmluZ1xuICAvLyBsaXZlbWFyaydzIG93biBkZXYg4oCUIHRoZSB1c2VyIGlzIGVkaXRpbmcgdGhlIGNhbm9uaWNhbCBzb3VyY2UuXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIHN5bmNPdmVybGF5KFxuICBoaXQ6IEhpdCxcbiAga2luZDogXCJjaGFuZ2VcIiB8IFwiYWRkXCIgfCBcInVubGlua1wiLFxuICB0YXJnZXREaXI6IHN0cmluZyxcbiAgb3ZlcnJpZGVzUm9vdDogc3RyaW5nLFxuKSB7XG4gIGlmICghaGl0LmNhdGVnb3J5KSByZXR1cm5cbiAgY29uc3QgZGVzdCA9IGpvaW4odGFyZ2V0RGlyLCBoaXQucmVsKVxuICBjb25zdCBzb3VyY2UgPSBqb2luKFNPVVJDRV9ESVIsIGhpdC5yZWwpXG4gIGlmIChraW5kID09PSBcInVubGlua1wiKSB7XG4gICAgcm1TeW5jKGRlc3QsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgIGlmIChleGlzdHNTeW5jKHNvdXJjZSkpXG4gICAgICBjcFN5bmMoc291cmNlLCBkZXN0LCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcbiAgICByZXR1cm5cbiAgfVxuICBjb25zdCBvdmVybGF5ID0gam9pbihvdmVycmlkZXNSb290LCBoaXQucmVsKVxuICBpZiAoZXhpc3RzU3luYyhvdmVybGF5KSlcbiAgICBjcFN5bmMob3ZlcmxheSwgZGVzdCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG59XG5cbmZ1bmN0aW9uIHN5bmNTb3VyY2UoXG4gIGhpdDogSGl0LFxuICBraW5kOiBcImNoYW5nZVwiIHwgXCJhZGRcIiB8IFwidW5saW5rXCIsXG4gIHRhcmdldERpcjogc3RyaW5nLFxuICBvdmVycmlkZXNSb290OiBzdHJpbmcsXG4pIHtcbiAgLy8gSWYgdGhlIGNvbnN1bWVyIGhhcyBhbiBvdmVybGF5IGZvciB0aGlzIGZpbGUgKGFuZCBpdCdzIGVzY2FwYWJsZSksXG4gIC8vIHRoZSBvdmVybGF5IHdpbnMg4oCUIGlnbm9yZSBzb3VyY2UgY2hhbmdlcy5cbiAgaWYgKGhpdC5jYXRlZ29yeSAmJiBleGlzdHNTeW5jKGpvaW4ob3ZlcnJpZGVzUm9vdCwgaGl0LnJlbCkpKSByZXR1cm5cbiAgY29uc3QgZGVzdCA9IGpvaW4odGFyZ2V0RGlyLCBoaXQucmVsKVxuICBjb25zdCBzb3VyY2UgPSBqb2luKFNPVVJDRV9ESVIsIGhpdC5yZWwpXG4gIGlmIChraW5kID09PSBcInVubGlua1wiKSB7XG4gICAgcm1TeW5jKGRlc3QsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleGlzdHNTeW5jKHNvdXJjZSkpIGNwU3luYyhzb3VyY2UsIGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxufVxuXG5mdW5jdGlvbiBmdWxsUmVsb2FkKHNlcnZlcjogVml0ZURldlNlcnZlcikge1xuICBzZXJ2ZXIud3Muc2VuZCh7IHR5cGU6IFwiZnVsbC1yZWxvYWRcIiB9KVxufVxuXG4vKiogRHJpdmUgVml0ZSdzIEhNUiBwaXBlbGluZSBtYW51YWxseSBmb3IgYSB0YXJnZXQgZmlsZSB3ZSBqdXN0IHN5bmNlZC5cbiAqICBWaXRlJ3MgY2hva2lkYXIgaWdub3JlcyBgKipcXC9ub2RlX21vZHVsZXMvKipgIGJ5IGRlZmF1bHQgYW5kIG91clxuICogIHRhcmdldERpciBsaXZlcyBpbnNpZGUgbGl2ZW1hcmsncyBvd24gbm9kZV9tb2R1bGVzIGluIGNvbnN1bWVyXG4gKiAgcHJvamVjdHMsIHNvIGNwU3luYyB3cml0ZXMgdGhlcmUgYXJlIHNpbGVudGx5IGZpbHRlcmVkIG91dC5cbiAqXG4gKiAgRW1pdHRpbmcgb24gYHNlcnZlci53YXRjaGVyYCBydW5zIFZpdGUncyBITVIgYW5hbHlzaXMgcGVyIGVudmlyb25tZW50XG4gKiAgKENTUyBnZXRzIGBobXIgdXBkYXRlYCwgcm91dGUgbW9kdWxlcyB0cmlnZ2VyIGAoc3NyKSBwYWdlIHJlbG9hZGApLlxuICogIEJ1dCBgKHNzcikgcGFnZSByZWxvYWRgIG9ubHkgc2VuZHMgYGZ1bGwtcmVsb2FkYCBvbiB0aGUgU1NSXG4gKiAgZW52aXJvbm1lbnQncyBob3QgY2hhbm5lbCDigJQgdGhlIGJyb3dzZXIgaXMgY29ubmVjdGVkIHRvIHRoZSAqY2xpZW50KlxuICogIGNoYW5uZWwgYW5kIG5ldmVyIHNlZXMgaXQuIFNvIHdlIGFsc28gZmlyZSBgZnVsbC1yZWxvYWRgIG9uIHRoZVxuICogIGNsaWVudCBob3QgZGlyZWN0bHksIHdoaWNoIGlzIHdoYXQgVGFuU3RhY2sgU3RhcnQgbmVlZHMgZm9yIHJvdXRlXG4gKiAgZWRpdHMgdG8gYWN0dWFsbHkgcmVmcmVzaCB0aGUgcGFnZS4gQ1NTIEhNUiBzdGlsbCB3b3JrcyBiZWNhdXNlXG4gKiAgVml0ZSdzIGFuYWx5c2lzIHJ1bnMgZmlyc3QgYW5kIHVwZGF0ZXMgYWxyZWFkeS1mbHVzaGVkIGJlZm9yZSBvdXJcbiAqICByZWxvYWQuICovXG5mdW5jdGlvbiBub3RpZnlWaXRlKFxuICBzZXJ2ZXI6IFZpdGVEZXZTZXJ2ZXIsXG4gIHRhcmdldEZpbGU6IHN0cmluZyxcbiAga2luZDogXCJjaGFuZ2VcIiB8IFwiYWRkXCIgfCBcInVubGlua1wiLFxuKSB7XG4gIHNlcnZlci53YXRjaGVyLmVtaXQoa2luZCwgdGFyZ2V0RmlsZSlcbiAgc2VydmVyLmVudmlyb25tZW50cy5jbGllbnQuaG90LnNlbmQoeyB0eXBlOiBcImZ1bGwtcmVsb2FkXCIgfSlcbn1cblxuLyoqIFJlc29sdmUgbGl2ZW1hcmsuY29uZmlnLnRzJ3MgYHZpdGVgIGZpZWxkIOKAlCBlaXRoZXIgYSBjb25maWcgb2JqZWN0XG4gKiAgb3IgYSBmdW5jdGlvbiBgKGVudikgPT4gY29uZmlnYCAobWF0Y2hpbmcgVml0ZSdzIG93biBgZGVmaW5lQ29uZmlnYCkuXG4gKiAgU2NoZW1hIHN0b3JlcyBpdCBhcyBgdW5rbm93bmA7IHR5cGluZyBmb3IgdGhlIGNvbnN1bWVyJ3MgZWRpdG9yXG4gKiAgbGl2ZXMgb24ge0BsaW5rIFZpdGVPdmVycmlkZX0uICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlVml0ZU92ZXJyaWRlKFxuICB2aXRlOiB1bmtub3duLFxuICBlbnY6IENvbmZpZ0Vudixcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsPiB7XG4gIGlmICghdml0ZSkgcmV0dXJuIG51bGxcbiAgaWYgKHR5cGVvZiB2aXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBSZWZsZWN0LmFwcGx5KHZpdGUsIHVuZGVmaW5lZCwgW2Vudl0pXG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiBudWxsXG4gIH1cbiAgcmV0dXJuIGlzT2JqZWN0KHZpdGUpID8gdml0ZSA6IG51bGxcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QodjogdW5rbm93bik6IHYgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdiAhPT0gbnVsbCAmJiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIlxufVxuIl19
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS1saXZlbWFyay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9wbHVnaW5zL3ZpdGUtbGl2ZW1hcmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3BELE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ3JDLE9BQU8sRUFBRSxLQUFLLElBQUksYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBT2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDbEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBRXhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFNbkUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQTtBQUVsRDs7Ozs7Ozs7Ozs7NkJBVzZCO0FBQzdCLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFBO0FBQ3JDLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQTtBQUU3Qzs7Ozs7MENBSzBDO0FBQzFDLE1BQU0sVUFBVSxRQUFRLENBQUMsSUFBcUI7SUFDNUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQ3pELElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQTtJQUNsQixPQUFPO1FBQ0wsSUFBSSxFQUFFLFVBQVU7UUFDaEIsT0FBTyxFQUFFLEtBQUs7UUFDZCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHO1lBQ2pCLFNB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LFNBQVMsVUFBVSxDQUNqQixNQUFxQixFQUNyQixVQUFrQixFQUNsQixJQUFpQztJQUVqQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFDckMsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFBO0FBQzlELENBQUM7QUFFRDs7O3FDQUdxQztBQUNyQyxLQUFLLFVBQVUsbUJBQW1CLENBQ2hDLElBQWEsRUFDYixHQUFjO0lBRWQsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUN0QixJQUFJLE9BQU8sSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQy9CLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUMxRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFDekMsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtBQUNyQyxDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsQ0FBVTtJQUMxQixPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFBO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcFN5bmMsIGV4aXN0c1N5bmMsIHJtU3luYyB9IGZyb20gXCJub2RlOmZzXCJcbmltcG9ydCB7IGpvaW4sIHNlcCB9IGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHsgd2F0Y2ggYXMgY2hva2lkYXJXYXRjaCB9IGZyb20gXCJjaG9raWRhclwiXG5pbXBvcnQgdHlwZSB7XG4gIENvbmZpZ0VudixcbiAgUGx1Z2luLFxuICBVc2VyQ29uZmlnIGFzIFZpdGVVc2VyQ29uZmlnLFxuICBWaXRlRGV2U2VydmVyLFxufSBmcm9tIFwidml0ZVwiXG5pbXBvcnQgeyBtZXJnZUNvbmZpZyB9IGZyb20gXCJ2aXRlXCJcbmltcG9ydCB7IGJ1aWxkVGFyZ2V0IH0gZnJvbSBcIi4uL2FjdGlvbnMvdGFyZ2V0L2J1aWxkLnRzXCJcbmltcG9ydCB0eXBlIHsgQ29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy9jb25maWcudHNcIlxuaW1wb3J0IHsgV2Vic2l0ZUNvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvY29uZmlnLnRzXCJcbmltcG9ydCB7IEVTQ0FQQUJMRV9GSUxFUywgRVNDQVBBQkxFX0ZPTERFUlMgfSBmcm9tIFwiLi4vc2V0dGluZ3MudHNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIExpdmVtYXJrT3B0aW9ucyB7XG4gIGNvbmZpZzogQ29uZmlnXG59XG5cbmNvbnN0IFNPVVJDRV9ESVIgPSBqb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiLi5cIilcblxuLyoqIFNpbmdsZSB2aXJ0dWFsIG1vZHVsZSBleHBvc2luZyBsaXZlbWFyaydzIHJ1bnRpbWUgdmFsdWVzIHRvIGNvbnN1bWVyXG4gKiAgb3ZlcnJpZGUgZmlsZXMgdmlhIG5hbWVkIGV4cG9ydHM6XG4gKlxuICogICAgICBpbXBvcnQgeyBjb25maWcgfSBmcm9tIFwibGl2ZW1hcms6dmlydHVhbFwiXG4gKlxuICogIEN1cnJlbnRseSBleHBvcnRzIGBjb25maWdgICh2YWxpZGF0ZWQgYFdlYnNpdGVDb25maWdgKTsgZnV0dXJlXG4gKiAgYWRkaXRpb25zIChlLmcuIGBhcnRpY2xlc2AsIGBzZWN0aW9uc2ApIGxhbmQgaGVyZSBhcyBuZXcgbmFtZWRcbiAqICBleHBvcnRzIHdpdGhvdXQgY29uc3VtZXJzIGNoYW5naW5nIHRoZWlyIGltcG9ydCBzdGF0ZW1lbnRzLlxuICpcbiAqICBUaGUgYFxcMGAgcHJlZml4IG9uIHRoZSByZXNvbHZlZCBpZCBpcyBWaXRlJ3MgY29udmVudGlvbiB0byBzaWduYWxcbiAqICBcInRoaXMgaXMgYSB2aXJ0dWFsIG1vZHVsZSDigJQgbm8gb3RoZXIgcGx1Z2luIHNob3VsZCB0cnkgdG8gcmVzb2x2ZVxuICogIG9yIGxvYWQgaXQgZnJvbSBkaXNrXCIuICovXG5jb25zdCBWSVJUVUFMX0lEID0gXCJsaXZlbWFyazp2aXJ0dWFsXCJcbmNvbnN0IFZJUlRVQUxfUkVTT0xWRURfSUQgPSBgXFwwJHtWSVJUVUFMX0lEfWBcblxuLyoqIE93bnMgdGhlIHBlci1jb25zdW1lciBgdGFyZ2V0cy88aGFzaD4vYCBtb3VudDogc3ludGhlc2l6ZXMgaXQgdmlhXG4gKiAgYGJ1aWxkVGFyZ2V0KClgLCByZXR1cm5zIHRoZSBWaXRlIGNvbmZpZyB0aGF0IGFuY2hvcnMgdGhlcmUsIGFuZFxuICogIHdhdGNoZXMgdGhlIGNvbnN1bWVyJ3MgYC5saXZlbWFyay9gIChwbHVzIGxpdmVtYXJrJ3MgYHNvdXJjZS9gIGluXG4gKiAgZGV2KSBmb3IgY2hhbmdlcyB0aGF0IG5lZWQgdG8gYmUgcmUtY29waWVkIGludG8gdGhlIHRhcmdldC4gVGhlXG4gKiAgb3ZlcnJpZGUgbWVjaGFuaXNtIGlzIHB1cmUgZmlsZS1zeXN0ZW0gKGZ1bGwgY29waWVzKSDigJQgbm8gcmVzb2x2ZUlkXG4gKiAgcmVkaXJlY3Rpb24sIG5vIHJlYWxwYXRoIHN1cnByaXNlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXZlbWFyayhvcHRzOiBMaXZlbWFya09wdGlvbnMpOiBQbHVnaW4ge1xuICBjb25zdCBvdmVycmlkZXNSb290ID0gam9pbihvcHRzLmNvbmZpZy5yb290LCBcIi5saXZlbWFya1wiKVxuICBsZXQgdGFyZ2V0RGlyID0gXCJcIlxuICByZXR1cm4ge1xuICAgIG5hbWU6IFwibGl2ZW1hcmtcIixcbiAgICBlbmZvcmNlOiBcInByZVwiLFxuICAgIGFzeW5jIGNvbmZpZyhfLCBlbnYpIHtcbiAgICAgIHRhcmdldERpciA9IGJ1aWxkVGFyZ2V0KG9wdHMuY29uZmlnLmNvbmZpZ1BhdGgpXG4gICAgICBjb25zdCBiYXNlOiBWaXRlVXNlckNvbmZpZyA9IHtcbiAgICAgICAgcm9vdDogdGFyZ2V0RGlyLFxuICAgICAgICAvLyBNb3VudCBldmVyeXRoaW5nIChhc3NldCBVUkxzLCBtb2R1bGVwcmVsb2FkcywgZGV2IHNlcnZlcikgdW5kZXJcbiAgICAgICAgLy8gYGNvbmZpZy5iYXNlYCBzbyB0aGUgc2FtZSBidWlsZCB3b3JrcyBhdCByb290IG9yIGF0IGEgc3ViLXBhdGhcbiAgICAgICAgLy8gKGUuZy4gR2l0SHViIFBhZ2VzIGBodHRwczovL3VzZXIuZ2l0aHViLmlvL3JlcG8vYCkuIFRoZSByb3V0ZXJcbiAgICAgICAgLy8gYW5kIGFzc2V0LXBhdGggcmVzb2x2ZXIgbWlycm9yIHRoaXMgYXQgcnVudGltZS5cbiAgICAgICAgYmFzZTogb3B0cy5jb25maWcuYmFzZSA/IGAke29wdHMuY29uZmlnLmJhc2V9L2AgOiBcIi9cIixcbiAgICAgICAgLy8gb3V0RGlyIGxpdmVzIG91dHNpZGUgdGhlIHRhcmdldCByb290IChpbiB0aGUgY29uc3VtZXInc1xuICAgICAgICAvLyAubGl2ZW1hcmsvKSBzbyB0aGUgY29uc3VtZXIgY2FuIGZpbmQgdGhlaXIgZGVwbG95YWJsZSBvdXRwdXRcbiAgICAgICAgLy8gd2l0aG91dCBkaWdnaW5nIGludG8gbm9kZV9tb2R1bGVzLiBWaXRlJ3MgZGVmYXVsdCByZWZ1c2FsIHRvXG4gICAgICAgIC8vIGVtcHR5IG91dC1vZi1yb290IGRpcmVjdG9yaWVzIGRvZXNuJ3QgYXBwbHkgaGVyZSBiZWNhdXNlIHRoZVxuICAgICAgICAvLyB0YXJnZXQvIHJvb3QgaXMgbGl2ZW1hcmsncywgbm90IHRoZSBjb25zdW1lcidzLlxuICAgICAgICBidWlsZDogeyBvdXREaXI6IGpvaW4ob3ZlcnJpZGVzUm9vdCwgXCJidWlsZFwiKSwgZW1wdHlPdXREaXI6IHRydWUgfSxcbiAgICAgICAgcmVzb2x2ZTogeyBkZWR1cGU6IFtcInJlYWN0XCIsIFwicmVhY3QtZG9tXCJdIH0sXG4gICAgICAgIC8vIEZvciB0aGUgU1NSIGJ1aWxkIG9ubHksIGlubGluZSBldmVyeSBub2RlX21vZHVsZXMgZGVwIGludG9cbiAgICAgICAgLy8gc2VydmVyLmpzLiBUaGUgcHJlcmVuZGVyIHN0ZXAgKHdoaWNoIHJ1bnMgc2VydmVyLmpzIHdpdGhcbiAgICAgICAgLy8gTm9kZSkgd2Fsa3Mgbm9kZV9tb2R1bGVzIGZyb20gdGhlIGJ1aWxkLyBkaXIgYW5kIGNhbid0IHJlYWNoXG4gICAgICAgIC8vIHBhY2thZ2VzIGJ1cmllZCBpbiBwbnBtJ3MgYC5wbnBtLyovbm9kZV9tb2R1bGVzL2AgKGUuZy5cbiAgICAgICAgLy8gVGFuU3RhY2staW50ZXJuYWwgYWxpYXNlcyBsaWtlIGBoMy12MmApLiBTZWxmLWNvbnRhaW5lZFxuICAgICAgICAvLyBidW5kbGUgYnlwYXNzZXMgdGhlIGlzc3VlLiBEZXYgU1NSIGtlZXBzIGV4dGVybmFscyAoZmFzdGVyKS5cbiAgICAgICAgLi4uKGVudi5jb21tYW5kID09PSBcImJ1aWxkXCIgJiYge1xuICAgICAgICAgIGVudmlyb25tZW50czogeyBzc3I6IHsgcmVzb2x2ZTogeyBub0V4dGVybmFsOiB0cnVlIH0gfSB9LFxuICAgICAgICB9KSxcbiAgICAgIH1cbiAgICAgIGNvbnN0IG92ZXJyaWRlID0gYXdhaXQgcmVzb2x2ZVZpdGVPdmVycmlkZShvcHRzLmNvbmZpZy52aXRlLCBlbnYpXG4gICAgICByZXR1cm4gb3ZlcnJpZGUgPyBtZXJnZUNvbmZpZyhiYXNlLCBvdmVycmlkZSkgOiBiYXNlXG4gICAgfSxcbiAgICByZXNvbHZlSWQoaWQpIHtcbiAgICAgIGlmIChpZCA9PT0gVklSVFVBTF9JRCkgcmV0dXJuIFZJUlRVQUxfUkVTT0xWRURfSURcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcbiAgICBsb2FkKGlkKSB7XG4gICAgICBpZiAoaWQgIT09IFZJUlRVQUxfUkVTT0xWRURfSUQpIHJldHVybiBudWxsXG4gICAgICBjb25zdCBjb25maWcgPSBXZWJzaXRlQ29uZmlnLnBhcnNlKG9wdHMuY29uZmlnKVxuICAgICAgcmV0dXJuIGBleHBvcnQgY29uc3QgY29uZmlnID0gJHtKU09OLnN0cmluZ2lmeShjb25maWcpfWBcbiAgICB9LFxuICAgIGNvbmZpZ3VyZVNlcnZlcihzZXJ2ZXIpIHtcbiAgICAgIC8vIFR3byByZWFzb25zIHdlIGRvbid0IHVzZSBWaXRlJ3Mgb3duIGBzZXJ2ZXIud2F0Y2hlcmA6XG4gICAgICAvLyAgIDEuIFZpdGUgOCBidW5kbGVzIGNob2tpZGFyIDMgd2l0aCBgZGlzYWJsZUdsb2JiaW5nOiB0cnVlYCwgYW5kXG4gICAgICAvLyAgICAgIHBhdGhzIGFkZGVkIHZpYSBgc2VydmVyLndhdGNoZXIuYWRkKClgIGZvciBzdXJmYWNlcyBvdXRzaWRlXG4gICAgICAvLyAgICAgIFZpdGUncyByb290IG5ldmVyIGZpcmUg4oCUIGdldFdhdGNoZWQoKSByZXBvcnRzIHRoZW0gYnV0IG5vXG4gICAgICAvLyAgICAgIGV2ZW50cyBhcnJpdmUgZm9yIGV4dGVybmFsIGVkaXRvcnMuXG4gICAgICAvLyAgIDIuIFZpdGUncyBjaG9raWRhciBpZ25vcmVzIGAqKlxcL25vZGVfbW9kdWxlcy8qKmAgYnkgZGVmYXVsdCwgc29cbiAgICAgIC8vICAgICAgZXZlbiBpZiAoMSkgd2VyZSBmaXhlZCwgb3VyIHRhcmdldERpciAod2hpY2ggbGl2ZXMgaW5zaWRlXG4gICAgICAvLyAgICAgIGxpdmVtYXJrJ3Mgb3duIG5vZGVfbW9kdWxlcyBpbiBjb25zdW1lciBwcm9qZWN0cykgd291bGQgYmVcbiAgICAgIC8vICAgICAgc2lsZW50bHkgZmlsdGVyZWQuIFdlIGVtaXQgdGhlIGNoYW5nZSBldmVudCBtYW51YWxseSBvbnRvXG4gICAgICAvLyAgICAgIGBzZXJ2ZXIud2F0Y2hlcmAgYWZ0ZXIgY3BTeW5jIOKAlCBzZWUge0BsaW5rIG5vdGlmeVZpdGV9LlxuICAgICAgLy8gQSBkZWRpY2F0ZWQgY2hva2lkYXIgNSB3YXRjaGVyIHNldCB1cCBkaXJlY3RseSBvbiB0aGVzZSBwYXRoc1xuICAgICAgLy8gZmlyZXMgcmVsaWFibHk7IHdlIGZvcndhcmQgZXZlbnRzIGludG8gVml0ZSdzIEhNUiBwaXBlbGluZSBiZWxvdy5cbiAgICAgIGNvbnN0IG92ZXJsYXlQYXRoczogc3RyaW5nW10gPSBbXVxuICAgICAgZm9yIChjb25zdCBmb2xkZXIgb2YgRVNDQVBBQkxFX0ZPTERFUlMpIHtcbiAgICAgICAgb3ZlcmxheVBhdGhzLnB1c2goam9pbihvdmVycmlkZXNSb290LCBmb2xkZXIpKVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIEVTQ0FQQUJMRV9GSUxFUykge1xuICAgICAgICBvdmVybGF5UGF0aHMucHVzaChqb2luKG92ZXJyaWRlc1Jvb3QsIGZpbGUpKVxuICAgICAgfVxuICAgICAgY29uc3Qgd2F0Y2hlciA9IGNob2tpZGFyV2F0Y2goXG4gICAgICAgIFtvcHRzLmNvbmZpZy5jb25maWdQYXRoLCAuLi5vdmVybGF5UGF0aHMsIFNPVVJDRV9ESVJdLFxuICAgICAgICB7IGlnbm9yZUluaXRpYWw6IHRydWUsIGlnbm9yZVBlcm1pc3Npb25FcnJvcnM6IHRydWUgfSxcbiAgICAgIClcbiAgICAgIHdhdGNoZXIub24oXCJjaGFuZ2VcIiwgZmlsZSA9PiBvbkNoYW5nZShmaWxlLCBcImNoYW5nZVwiKSlcbiAgICAgIHdhdGNoZXIub24oXCJhZGRcIiwgZmlsZSA9PiBvbkNoYW5nZShmaWxlLCBcImFkZFwiKSlcbiAgICAgIHdhdGNoZXIub24oXCJ1bmxpbmtcIiwgZmlsZSA9PiBvbkNoYW5nZShmaWxlLCBcInVubGlua1wiKSlcbiAgICAgIGNvbnN0IGNsb3NlV2F0Y2hlciA9ICgpID0+IHtcbiAgICAgICAgd2F0Y2hlci5jbG9zZSgpXG4gICAgICB9XG4gICAgICBzZXJ2ZXIuaHR0cFNlcnZlcj8ub25jZShcImNsb3NlXCIsIGNsb3NlV2F0Y2hlcilcblxuICAgICAgZnVuY3Rpb24gb25DaGFuZ2UoZmlsZTogc3RyaW5nLCBraW5kOiBcImNoYW5nZVwiIHwgXCJhZGRcIiB8IFwidW5saW5rXCIpIHtcbiAgICAgICAgaWYgKGZpbGUgPT09IG9wdHMuY29uZmlnLmNvbmZpZ1BhdGgpIHtcbiAgICAgICAgICBzZXJ2ZXIucmVzdGFydCgpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3ZlcmxheUhpdCA9IG1hdGNoT3ZlcmxheShmaWxlLCBvdmVycmlkZXNSb290KVxuICAgICAgICBpZiAob3ZlcmxheUhpdCkge1xuICAgICAgICAgIHN5bmNPdmVybGF5KG92ZXJsYXlIaXQsIGtpbmQsIHRhcmdldERpciwgb3ZlcnJpZGVzUm9vdClcbiAgICAgICAgICBub3RpZnlWaXRlKHNlcnZlciwgam9pbih0YXJnZXREaXIsIG92ZXJsYXlIaXQucmVsKSwga2luZClcbiAgICAgICAgICBpZiAoa2luZCAhPT0gXCJjaGFuZ2VcIikgZnVsbFJlbG9hZChzZXJ2ZXIpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc291cmNlSGl0ID0gbWF0Y2hTb3VyY2UoZmlsZSlcbiAgICAgICAgaWYgKHNvdXJjZUhpdCkge1xuICAgICAgICAgIHN5bmNTb3VyY2Uoc291cmNlSGl0LCBraW5kLCB0YXJnZXREaXIsIG92ZXJyaWRlc1Jvb3QpXG4gICAgICAgICAgbm90aWZ5Vml0ZShzZXJ2ZXIsIGpvaW4odGFyZ2V0RGlyLCBzb3VyY2VIaXQucmVsKSwga2luZClcbiAgICAgICAgICBpZiAoa2luZCAhPT0gXCJjaGFuZ2VcIikgZnVsbFJlbG9hZChzZXJ2ZXIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICB9XG59XG5cbmludGVyZmFjZSBIaXQge1xuICByZWw6IHN0cmluZ1xuICBjYXRlZ29yeTogXCJmb2xkZXJcIiB8IFwiZmlsZVwiIHwgbnVsbFxufVxuXG5mdW5jdGlvbiBtYXRjaE92ZXJsYXkoZmlsZTogc3RyaW5nLCBvdmVycmlkZXNSb290OiBzdHJpbmcpOiBIaXQgfCBudWxsIHtcbiAgY29uc3QgcHJlZml4ID0gYCR7b3ZlcnJpZGVzUm9vdH0ke3NlcH1gXG4gIGlmICghZmlsZS5zdGFydHNXaXRoKHByZWZpeCkpIHJldHVybiBudWxsXG4gIGNvbnN0IHJlbCA9IGZpbGUuc2xpY2UocHJlZml4Lmxlbmd0aClcbiAgcmV0dXJuIHsgcmVsLCBjYXRlZ29yeTogY2xhc3NpZnkocmVsKSB9XG59XG5cbmZ1bmN0aW9uIG1hdGNoU291cmNlKGZpbGU6IHN0cmluZyk6IEhpdCB8IG51bGwge1xuICBjb25zdCBwcmVmaXggPSBgJHtTT1VSQ0VfRElSfSR7c2VwfWBcbiAgaWYgKCFmaWxlLnN0YXJ0c1dpdGgocHJlZml4KSkgcmV0dXJuIG51bGxcbiAgLy8gU2tpcCB0aGUgdGFyZ2V0cy8gb3V0cHV0IGRpciBpdHNlbGYgKHNpYmxpbmcgb2Ygc291cmNlLykgYW5kIGFueVxuICAvLyBgLmdlbi50c2AgZmlsZXMgdGhhdCBkb3duc3RyZWFtIHRvb2xzIHJlZ2VuZXJhdGUgaW5zaWRlIHRoZSB0YXJnZXQuXG4gIGNvbnN0IHJlbCA9IGZpbGUuc2xpY2UocHJlZml4Lmxlbmd0aClcbiAgaWYgKHJlbCA9PT0gXCJcIiB8fCByZWwuaW5jbHVkZXMoXCJyb3V0ZVRyZWUuZ2VuLnRzXCIpKSByZXR1cm4gbnVsbFxuICByZXR1cm4geyByZWwsIGNhdGVnb3J5OiBjbGFzc2lmeShyZWwpIH1cbn1cblxuZnVuY3Rpb24gY2xhc3NpZnkocmVsOiBzdHJpbmcpOiBcImZvbGRlclwiIHwgXCJmaWxlXCIgfCBudWxsIHtcbiAgY29uc3QgW2hlYWRdID0gcmVsLnNwbGl0KHNlcClcbiAgaWYgKGhlYWQgJiYgRVNDQVBBQkxFX0ZPTERFUlMuaW5jbHVkZXMoaGVhZCkpIHJldHVybiBcImZvbGRlclwiXG4gIGlmIChFU0NBUEFCTEVfRklMRVMuaW5jbHVkZXMocmVsKSkgcmV0dXJuIFwiZmlsZVwiXG4gIC8vIE5vbi1lc2NhcGFibGUgc291cmNlIGZpbGVzIHN0aWxsIG5lZWQgdG8gZmxvdyBpbnRvIHRhcmdldCBkdXJpbmdcbiAgLy8gbGl2ZW1hcmsncyBvd24gZGV2IOKAlCB0aGUgdXNlciBpcyBlZGl0aW5nIHRoZSBjYW5vbmljYWwgc291cmNlLlxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBzeW5jT3ZlcmxheShcbiAgaGl0OiBIaXQsXG4gIGtpbmQ6IFwiY2hhbmdlXCIgfCBcImFkZFwiIHwgXCJ1bmxpbmtcIixcbiAgdGFyZ2V0RGlyOiBzdHJpbmcsXG4gIG92ZXJyaWRlc1Jvb3Q6IHN0cmluZyxcbikge1xuICBpZiAoIWhpdC5jYXRlZ29yeSkgcmV0dXJuXG4gIGNvbnN0IGRlc3QgPSBqb2luKHRhcmdldERpciwgaGl0LnJlbClcbiAgY29uc3Qgc291cmNlID0gam9pbihTT1VSQ0VfRElSLCBoaXQucmVsKVxuICBpZiAoa2luZCA9PT0gXCJ1bmxpbmtcIikge1xuICAgIHJtU3luYyhkZXN0LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSlcbiAgICBpZiAoZXhpc3RzU3luYyhzb3VyY2UpKVxuICAgICAgY3BTeW5jKHNvdXJjZSwgZGVzdCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgY29uc3Qgb3ZlcmxheSA9IGpvaW4ob3ZlcnJpZGVzUm9vdCwgaGl0LnJlbClcbiAgaWYgKGV4aXN0c1N5bmMob3ZlcmxheSkpXG4gICAgY3BTeW5jKG92ZXJsYXksIGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxufVxuXG5mdW5jdGlvbiBzeW5jU291cmNlKFxuICBoaXQ6IEhpdCxcbiAga2luZDogXCJjaGFuZ2VcIiB8IFwiYWRkXCIgfCBcInVubGlua1wiLFxuICB0YXJnZXREaXI6IHN0cmluZyxcbiAgb3ZlcnJpZGVzUm9vdDogc3RyaW5nLFxuKSB7XG4gIC8vIElmIHRoZSBjb25zdW1lciBoYXMgYW4gb3ZlcmxheSBmb3IgdGhpcyBmaWxlIChhbmQgaXQncyBlc2NhcGFibGUpLFxuICAvLyB0aGUgb3ZlcmxheSB3aW5zIOKAlCBpZ25vcmUgc291cmNlIGNoYW5nZXMuXG4gIGlmIChoaXQuY2F0ZWdvcnkgJiYgZXhpc3RzU3luYyhqb2luKG92ZXJyaWRlc1Jvb3QsIGhpdC5yZWwpKSkgcmV0dXJuXG4gIGNvbnN0IGRlc3QgPSBqb2luKHRhcmdldERpciwgaGl0LnJlbClcbiAgY29uc3Qgc291cmNlID0gam9pbihTT1VSQ0VfRElSLCBoaXQucmVsKVxuICBpZiAoa2luZCA9PT0gXCJ1bmxpbmtcIikge1xuICAgIHJtU3luYyhkZXN0LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhpc3RzU3luYyhzb3VyY2UpKSBjcFN5bmMoc291cmNlLCBkZXN0LCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcbn1cblxuZnVuY3Rpb24gZnVsbFJlbG9hZChzZXJ2ZXI6IFZpdGVEZXZTZXJ2ZXIpIHtcbiAgc2VydmVyLndzLnNlbmQoeyB0eXBlOiBcImZ1bGwtcmVsb2FkXCIgfSlcbn1cblxuLyoqIERyaXZlIFZpdGUncyBITVIgcGlwZWxpbmUgbWFudWFsbHkgZm9yIGEgdGFyZ2V0IGZpbGUgd2UganVzdCBzeW5jZWQuXG4gKiAgVml0ZSdzIGNob2tpZGFyIGlnbm9yZXMgYCoqXFwvbm9kZV9tb2R1bGVzLyoqYCBieSBkZWZhdWx0IGFuZCBvdXJcbiAqICB0YXJnZXREaXIgbGl2ZXMgaW5zaWRlIGxpdmVtYXJrJ3Mgb3duIG5vZGVfbW9kdWxlcyBpbiBjb25zdW1lclxuICogIHByb2plY3RzLCBzbyBjcFN5bmMgd3JpdGVzIHRoZXJlIGFyZSBzaWxlbnRseSBmaWx0ZXJlZCBvdXQuXG4gKlxuICogIEVtaXR0aW5nIG9uIGBzZXJ2ZXIud2F0Y2hlcmAgcnVucyBWaXRlJ3MgSE1SIGFuYWx5c2lzIHBlciBlbnZpcm9ubWVudFxuICogIChDU1MgZ2V0cyBgaG1yIHVwZGF0ZWAsIHJvdXRlIG1vZHVsZXMgdHJpZ2dlciBgKHNzcikgcGFnZSByZWxvYWRgKS5cbiAqICBCdXQgYChzc3IpIHBhZ2UgcmVsb2FkYCBvbmx5IHNlbmRzIGBmdWxsLXJlbG9hZGAgb24gdGhlIFNTUlxuICogIGVudmlyb25tZW50J3MgaG90IGNoYW5uZWwg4oCUIHRoZSBicm93c2VyIGlzIGNvbm5lY3RlZCB0byB0aGUgKmNsaWVudCpcbiAqICBjaGFubmVsIGFuZCBuZXZlciBzZWVzIGl0LiBTbyB3ZSBhbHNvIGZpcmUgYGZ1bGwtcmVsb2FkYCBvbiB0aGVcbiAqICBjbGllbnQgaG90IGRpcmVjdGx5LCB3aGljaCBpcyB3aGF0IFRhblN0YWNrIFN0YXJ0IG5lZWRzIGZvciByb3V0ZVxuICogIGVkaXRzIHRvIGFjdHVhbGx5IHJlZnJlc2ggdGhlIHBhZ2UuIENTUyBITVIgc3RpbGwgd29ya3MgYmVjYXVzZVxuICogIFZpdGUncyBhbmFseXNpcyBydW5zIGZpcnN0IGFuZCB1cGRhdGVzIGFscmVhZHktZmx1c2hlZCBiZWZvcmUgb3VyXG4gKiAgcmVsb2FkLiAqL1xuZnVuY3Rpb24gbm90aWZ5Vml0ZShcbiAgc2VydmVyOiBWaXRlRGV2U2VydmVyLFxuICB0YXJnZXRGaWxlOiBzdHJpbmcsXG4gIGtpbmQ6IFwiY2hhbmdlXCIgfCBcImFkZFwiIHwgXCJ1bmxpbmtcIixcbikge1xuICBzZXJ2ZXIud2F0Y2hlci5lbWl0KGtpbmQsIHRhcmdldEZpbGUpXG4gIHNlcnZlci5lbnZpcm9ubWVudHMuY2xpZW50LmhvdC5zZW5kKHsgdHlwZTogXCJmdWxsLXJlbG9hZFwiIH0pXG59XG5cbi8qKiBSZXNvbHZlIGxpdmVtYXJrLmNvbmZpZy50cydzIGB2aXRlYCBmaWVsZCDigJQgZWl0aGVyIGEgY29uZmlnIG9iamVjdFxuICogIG9yIGEgZnVuY3Rpb24gYChlbnYpID0+IGNvbmZpZ2AgKG1hdGNoaW5nIFZpdGUncyBvd24gYGRlZmluZUNvbmZpZ2ApLlxuICogIFNjaGVtYSBzdG9yZXMgaXQgYXMgYHVua25vd25gOyB0eXBpbmcgZm9yIHRoZSBjb25zdW1lcidzIGVkaXRvclxuICogIGxpdmVzIG9uIHtAbGluayBWaXRlT3ZlcnJpZGV9LiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVZpdGVPdmVycmlkZShcbiAgdml0ZTogdW5rbm93bixcbiAgZW52OiBDb25maWdFbnYsXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbD4ge1xuICBpZiAoIXZpdGUpIHJldHVybiBudWxsXG4gIGlmICh0eXBlb2Ygdml0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUmVmbGVjdC5hcHBseSh2aXRlLCB1bmRlZmluZWQsIFtlbnZdKVxuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogbnVsbFxuICB9XG4gIHJldHVybiBpc09iamVjdCh2aXRlKSA/IHZpdGUgOiBudWxsXG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHY6IHVua25vd24pOiB2IGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHYgIT09IG51bGwgJiYgdHlwZW9mIHYgPT09IFwib2JqZWN0XCJcbn1cbiJdfQ==
package/build/router.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { config } from "livemark:virtual";
2
3
  import { QueryClient } from "@tanstack/react-query";
3
4
  import { createRouter } from "@tanstack/react-router";
4
5
  import { setupRouterSsrQueryIntegration } from "@tanstack/react-router-ssr-query";
@@ -9,6 +10,7 @@ export function getRouter() {
9
10
  const queryClient = new QueryClient();
10
11
  const router = createRouter({
11
12
  routeTree,
13
+ basepath: config.base,
12
14
  context: { queryClient },
13
15
  trailingSlash: "always",
14
16
  defaultPreload: "intent",
@@ -23,4 +25,4 @@ export function getRouter() {
23
25
  });
24
26
  return router;
25
27
  }
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc291cmNlL3JvdXRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDckQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sa0NBQWtDLENBQUE7QUFDakYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXVDLENBQUE7QUFDNUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEyQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUU5QyxNQUFNLFVBQVUsU0FBUztJQUN2QixNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFBO0lBRXJDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQztRQUMxQixTQUFTO1FBQ1QsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFO1FBQ3hCLGFBQWEsRUFBRSxRQUFRO1FBQ3ZCLGNBQWMsRUFBRSxRQUFRO1FBQ3hCLHFCQUFxQixFQUFFLElBQUk7UUFDM0IscUJBQXFCLEVBQUUsb0JBQW9CO1FBQzNDLHdCQUF3QixFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUMsUUFBUSxLQUFHO1FBQzVDLGlCQUFpQixFQUFFLElBQUk7S0FDeEIsQ0FBQyxDQUFBO0lBRUYsOEJBQThCLENBQUM7UUFDN0IsTUFBTTtRQUNOLFdBQVc7S0FDWixDQUFDLENBQUE7SUFFRixPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBRdWVyeUNsaWVudCB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3QtcXVlcnlcIlxuaW1wb3J0IHsgY3JlYXRlUm91dGVyIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1yb3V0ZXJcIlxuaW1wb3J0IHsgc2V0dXBSb3V0ZXJTc3JRdWVyeUludGVncmF0aW9uIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1yb3V0ZXItc3NyLXF1ZXJ5XCJcbmltcG9ydCB7IERlZmF1bHRDYXRjaEJvdW5kYXJ5IH0gZnJvbSBcIi4vY29tcG9uZW50cy9EZWZhdWx0Q2F0Y2hCb3VuZGFyeS50c3hcIlxuaW1wb3J0IHsgTm90Rm91bmQgfSBmcm9tIFwiLi9jb21wb25lbnRzL05vdEZvdW5kLnRzeFwiXG5pbXBvcnQgeyByb3V0ZVRyZWUgfSBmcm9tIFwiLi9yb3V0ZVRyZWUuZ2VuLnRzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJvdXRlcigpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKVxuXG4gIGNvbnN0IHJvdXRlciA9IGNyZWF0ZVJvdXRlcih7XG4gICAgcm91dGVUcmVlLFxuICAgIGNvbnRleHQ6IHsgcXVlcnlDbGllbnQgfSxcbiAgICB0cmFpbGluZ1NsYXNoOiBcImFsd2F5c1wiLFxuICAgIGRlZmF1bHRQcmVsb2FkOiBcImludGVudFwiLFxuICAgIGRlZmF1bHRWaWV3VHJhbnNpdGlvbjogdHJ1ZSxcbiAgICBkZWZhdWx0RXJyb3JDb21wb25lbnQ6IERlZmF1bHRDYXRjaEJvdW5kYXJ5LFxuICAgIGRlZmF1bHROb3RGb3VuZENvbXBvbmVudDogKCkgPT4gPE5vdEZvdW5kIC8+LFxuICAgIHNjcm9sbFJlc3RvcmF0aW9uOiB0cnVlLFxuICB9KVxuXG4gIHNldHVwUm91dGVyU3NyUXVlcnlJbnRlZ3JhdGlvbih7XG4gICAgcm91dGVyLFxuICAgIHF1ZXJ5Q2xpZW50LFxuICB9KVxuXG4gIHJldHVybiByb3V0ZXJcbn1cblxuZGVjbGFyZSBtb2R1bGUgXCJAdGFuc3RhY2svcmVhY3Qtcm91dGVyXCIge1xuICBpbnRlcmZhY2UgUmVnaXN0ZXIge1xuICAgIHJvdXRlcjogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0Um91dGVyPlxuICB9XG59XG4iXX0=
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc291cmNlL3JvdXRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3JELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBQ2pGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUF1QyxDQUFBO0FBQzVFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMkIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFFOUMsTUFBTSxVQUFVLFNBQVM7SUFDdkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQTtJQUVyQyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUM7UUFDMUIsU0FBUztRQUNULFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSTtRQUNyQixPQUFPLEVBQUUsRUFBRSxXQUFXLEVBQUU7UUFDeEIsYUFBYSxFQUFFLFFBQVE7UUFDdkIsY0FBYyxFQUFFLFFBQVE7UUFDeEIscUJBQXFCLEVBQUUsSUFBSTtRQUMzQixxQkFBcUIsRUFBRSxvQkFBb0I7UUFDM0Msd0JBQXdCLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBQyxRQUFRLEtBQUc7UUFDNUMsaUJBQWlCLEVBQUUsSUFBSTtLQUN4QixDQUFDLENBQUE7SUFFRiw4QkFBOEIsQ0FBQztRQUM3QixNQUFNO1FBQ04sV0FBVztLQUNaLENBQUMsQ0FBQTtJQUVGLE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbmZpZyB9IGZyb20gXCJsaXZlbWFyazp2aXJ0dWFsXCJcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50IH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1xdWVyeVwiXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXIgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXJvdXRlclwiXG5pbXBvcnQgeyBzZXR1cFJvdXRlclNzclF1ZXJ5SW50ZWdyYXRpb24gfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXJvdXRlci1zc3ItcXVlcnlcIlxuaW1wb3J0IHsgRGVmYXVsdENhdGNoQm91bmRhcnkgfSBmcm9tIFwiLi9jb21wb25lbnRzL0RlZmF1bHRDYXRjaEJvdW5kYXJ5LnRzeFwiXG5pbXBvcnQgeyBOb3RGb3VuZCB9IGZyb20gXCIuL2NvbXBvbmVudHMvTm90Rm91bmQudHN4XCJcbmltcG9ydCB7IHJvdXRlVHJlZSB9IGZyb20gXCIuL3JvdXRlVHJlZS5nZW4udHNcIlxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um91dGVyKCkge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpXG5cbiAgY29uc3Qgcm91dGVyID0gY3JlYXRlUm91dGVyKHtcbiAgICByb3V0ZVRyZWUsXG4gICAgYmFzZXBhdGg6IGNvbmZpZy5iYXNlLFxuICAgIGNvbnRleHQ6IHsgcXVlcnlDbGllbnQgfSxcbiAgICB0cmFpbGluZ1NsYXNoOiBcImFsd2F5c1wiLFxuICAgIGRlZmF1bHRQcmVsb2FkOiBcImludGVudFwiLFxuICAgIGRlZmF1bHRWaWV3VHJhbnNpdGlvbjogdHJ1ZSxcbiAgICBkZWZhdWx0RXJyb3JDb21wb25lbnQ6IERlZmF1bHRDYXRjaEJvdW5kYXJ5LFxuICAgIGRlZmF1bHROb3RGb3VuZENvbXBvbmVudDogKCkgPT4gPE5vdEZvdW5kIC8+LFxuICAgIHNjcm9sbFJlc3RvcmF0aW9uOiB0cnVlLFxuICB9KVxuXG4gIHNldHVwUm91dGVyU3NyUXVlcnlJbnRlZ3JhdGlvbih7XG4gICAgcm91dGVyLFxuICAgIHF1ZXJ5Q2xpZW50LFxuICB9KVxuXG4gIHJldHVybiByb3V0ZXJcbn1cblxuZGVjbGFyZSBtb2R1bGUgXCJAdGFuc3RhY2svcmVhY3Qtcm91dGVyXCIge1xuICBpbnRlcmZhY2UgUmVnaXN0ZXIge1xuICAgIHJvdXRlcjogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0Um91dGVyPlxuICB9XG59XG4iXX0=
@@ -9,12 +9,13 @@ import { DefaultCatchBoundary } from "../components/DefaultCatchBoundary.js";
9
9
  import { NotFound } from "../components/NotFound.js";
10
10
  import { Toaster } from "../elements/sonner.js";
11
11
  import { faviconType } from "../helpers/favicon.js";
12
+ import { prefixUrl } from "../helpers/prefix-url.js";
12
13
  import defaultFavicon from "../assets/logo.svg";
13
14
  import generalCss from "../styles/general.css?url";
14
15
  import markdownCss from "../styles/markdown.css?url";
15
16
  export const Route = createRootRoute({
16
17
  head: () => {
17
- const favicon = config.favicon ?? config.logo ?? defaultFavicon;
18
+ const favicon = prefixUrl(config.favicon ?? config.logo ?? defaultFavicon, config.base);
18
19
  return {
19
20
  meta: [
20
21
  { charSet: "utf-8" },
@@ -68,4 +69,4 @@ function Document(props) {
68
69
  ] })
69
70
  ] }));
70
71
  }
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX19yb290LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL3JvdXRlcy9fX3Jvb3QudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUE7QUFDeEUsT0FBTyxFQUNMLGVBQWUsRUFDZixXQUFXLEVBQ1gsTUFBTSxFQUNOLE9BQU8sRUFDUCxRQUFRLEdBQ1QsTUFBTSx3QkFBd0IsQ0FBQTtBQUMvQixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUU3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQTBCLENBQUE7QUFDakQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXdDLENBQUE7QUFDN0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUE0QixDQUFBO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBd0IsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDbkQsT0FBTyxjQUFjLE1BQU0sb0JBQW9CLENBQUE7QUFDL0MsT0FBTyxVQUFVLE1BQU0sMkJBQTJCLENBQUE7QUFDbEQsT0FBTyxXQUFXLE1BQU0sNEJBQTRCLENBQUE7QUFFcEQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQztJQUNuQyxJQUFJLEVBQUUsR0FBRyxFQUFFO1FBQ1QsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQTtRQUMvRCxPQUFPO1lBQ0wsSUFBSSxFQUFFO2dCQUNKLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRTtnQkFDcEIsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRTtnQkFDdkIsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFO2dCQUNwRCxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUU7Z0JBQy9DO29CQUNFLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLE9BQU8sRUFBRSxNQUFNLENBQUMsV0FBVztpQkFDNUI7Z0JBQ0QsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFO2dCQUNuRCxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRTtnQkFDM0M7b0JBQ0UsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLE9BQU8sRUFBRSxxQ0FBcUM7aUJBQy9DO2FBQ0Y7WUFDRCxLQUFLLEVBQUU7Z0JBQ0wsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDMUQsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDbkUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQ3ZDLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2FBQ3pDO1NBQ0YsQ0FBQTtJQUNILENBQUM7SUFDRCxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFDLFFBQVEsS0FBRztJQUNyQyxjQUFjLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxDQUNMLEtBQUMsUUFBUSxjQUNQLEtBQUMsb0JBQW9CLE9BQUssS0FBSyxHQUFJLEdBQzFCLENBQ1osQ0FBQTtJQUNILENBQUM7SUFDRCxTQUFTLEVBQUUsR0FBRyxFQUFFO1FBQ2QsT0FBTyxDQUNMLEtBQUMsUUFBUSxjQUNQLEtBQUMsTUFBTSxLQUFHLEdBQ0QsQ0FDWixDQUFBO0lBQ0gsQ0FBQztDQUNGLENBQUMsQ0FBQTtBQUVGLFNBQVMsUUFBUSxDQUFDLEtBQW9DO0lBQ3BELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDakUsTUFBTSxXQUFXLEdBQUcsWUFBWSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUE7SUFFckQsT0FBTyxDQUNMLGdCQUFNLElBQUksRUFBQyxJQUFJO1lBQ2IseUJBQ0UsS0FBQyxXQUFXLEtBQUcsR0FDVixFQUNQO29CQUNFLEtBQUMsTUFBTSxJQUFDLFdBQVcsRUFBRSxXQUFXLFlBQUcsS0FBSyxDQUFDLFFBQVEsR0FBVSxFQUMzRCxLQUFDLE9BQU8sSUFBQyxRQUFRLEVBQUMsWUFBWSxHQUFHLEVBQ2pDLEtBQUMsZ0JBQWdCLElBQ2YsTUFBTSxFQUFFLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLEVBQ3pELE9BQU8sRUFBRTs0QkFDUDtnQ0FDRSxJQUFJLEVBQUUsZ0JBQWdCO2dDQUN0QixNQUFNLEVBQUUsS0FBQyx1QkFBdUIsS0FBRztnQ0FDbkMsV0FBVyxFQUFFLElBQUk7NkJBQ2xCOzRCQUNEO2dDQUNFLElBQUksRUFBRSxpQkFBaUI7Z0NBQ3ZCLE1BQU0sRUFBRSxLQUFDLDJCQUEyQixLQUFHO2dDQUN2QyxXQUFXLEVBQUUsS0FBSzs2QkFDbkI7eUJBQ0YsR0FDRCxFQUNGLEtBQUMsT0FBTyxLQUFHO29CQUNOO1lBQ0YsQ0FDUixDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbmZpZyB9IGZyb20gXCJsaXZlbWFyazp2aXJ0dWFsXCJcbmltcG9ydCB7IFRhblN0YWNrRGV2dG9vbHMgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LWRldnRvb2xzXCJcbmltcG9ydCB7IFJlYWN0UXVlcnlEZXZ0b29sc1BhbmVsIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1xdWVyeS1kZXZ0b29sc1wiXG5pbXBvcnQge1xuICBjcmVhdGVSb290Um91dGUsXG4gIEhlYWRDb250ZW50LFxuICBPdXRsZXQsXG4gIFNjcmlwdHMsXG4gIHVzZU1hdGNoLFxufSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXJvdXRlclwiXG5pbXBvcnQgeyBUYW5TdGFja1JvdXRlckRldnRvb2xzUGFuZWwgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXJvdXRlci1kZXZ0b29sc1wiXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9MYXlvdXQudHN4XCJcbmltcG9ydCB7IERlZmF1bHRDYXRjaEJvdW5kYXJ5IH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvRGVmYXVsdENhdGNoQm91bmRhcnkudHN4XCJcbmltcG9ydCB7IE5vdEZvdW5kIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvTm90Rm91bmQudHN4XCJcbmltcG9ydCB7IFRvYXN0ZXIgfSBmcm9tIFwiLi4vZWxlbWVudHMvc29ubmVyLnRzeFwiXG5pbXBvcnQgeyBmYXZpY29uVHlwZSB9IGZyb20gXCIuLi9oZWxwZXJzL2Zhdmljb24udHNcIlxuaW1wb3J0IGRlZmF1bHRGYXZpY29uIGZyb20gXCIuLi9hc3NldHMvbG9nby5zdmdcIlxuaW1wb3J0IGdlbmVyYWxDc3MgZnJvbSBcIi4uL3N0eWxlcy9nZW5lcmFsLmNzcz91cmxcIlxuaW1wb3J0IG1hcmtkb3duQ3NzIGZyb20gXCIuLi9zdHlsZXMvbWFya2Rvd24uY3NzP3VybFwiXG5cbmV4cG9ydCBjb25zdCBSb3V0ZSA9IGNyZWF0ZVJvb3RSb3V0ZSh7XG4gIGhlYWQ6ICgpID0+IHtcbiAgICBjb25zdCBmYXZpY29uID0gY29uZmlnLmZhdmljb24gPz8gY29uZmlnLmxvZ28gPz8gZGVmYXVsdEZhdmljb25cbiAgICByZXR1cm4ge1xuICAgICAgbWV0YTogW1xuICAgICAgICB7IGNoYXJTZXQ6IFwidXRmLThcIiB9LFxuICAgICAgICB7IHRpdGxlOiBjb25maWcudGl0bGUgfSxcbiAgICAgICAgeyBuYW1lOiBcImRlc2NyaXB0aW9uXCIsIGNvbnRlbnQ6IGNvbmZpZy5kZXNjcmlwdGlvbiB9LFxuICAgICAgICB7IHByb3BlcnR5OiBcIm9nOnRpdGxlXCIsIGNvbnRlbnQ6IGNvbmZpZy50aXRsZSB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJvcGVydHk6IFwib2c6ZGVzY3JpcHRpb25cIixcbiAgICAgICAgICBjb250ZW50OiBjb25maWcuZGVzY3JpcHRpb24sXG4gICAgICAgIH0sXG4gICAgICAgIHsgcHJvcGVydHk6IFwib2c6c2l0ZV9uYW1lXCIsIGNvbnRlbnQ6IGNvbmZpZy50aXRsZSB9LFxuICAgICAgICB7IHByb3BlcnR5OiBcIm9nOnR5cGVcIiwgY29udGVudDogXCJ3ZWJzaXRlXCIgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidmlld3BvcnRcIixcbiAgICAgICAgICBjb250ZW50OiBcIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgbGlua3M6IFtcbiAgICAgICAgeyByZWw6IFwiaWNvblwiLCBocmVmOiBmYXZpY29uLCB0eXBlOiBmYXZpY29uVHlwZShmYXZpY29uKSB9LFxuICAgICAgICB7IHJlbDogXCJzaG9ydGN1dCBpY29uXCIsIGhyZWY6IGZhdmljb24sIHR5cGU6IGZhdmljb25UeXBlKGZhdmljb24pIH0sXG4gICAgICAgIHsgcmVsOiBcInN0eWxlc2hlZXRcIiwgaHJlZjogZ2VuZXJhbENzcyB9LFxuICAgICAgICB7IHJlbDogXCJzdHlsZXNoZWV0XCIsIGhyZWY6IG1hcmtkb3duQ3NzIH0sXG4gICAgICBdLFxuICAgIH1cbiAgfSxcbiAgbm90Rm91bmRDb21wb25lbnQ6ICgpID0+IDxOb3RGb3VuZCAvPixcbiAgZXJyb3JDb21wb25lbnQ6IHByb3BzID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPERvY3VtZW50PlxuICAgICAgICA8RGVmYXVsdENhdGNoQm91bmRhcnkgey4uLnByb3BzfSAvPlxuICAgICAgPC9Eb2N1bWVudD5cbiAgICApXG4gIH0sXG4gIGNvbXBvbmVudDogKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8RG9jdW1lbnQ+XG4gICAgICAgIDxPdXRsZXQgLz5cbiAgICAgIDwvRG9jdW1lbnQ+XG4gICAgKVxuICB9LFxufSlcblxuZnVuY3Rpb24gRG9jdW1lbnQocHJvcHM6IHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB9KSB7XG4gIGNvbnN0IGFydGljbGVSb3V0ZSA9IHVzZU1hdGNoKHsgZnJvbTogXCIvJFwiLCBzaG91bGRUaHJvdzogZmFsc2UgfSlcbiAgY29uc3Qgd2l0aFNpZGViYXIgPSBhcnRpY2xlUm91dGU/LmxvYWRlckRhdGE/LnNpZGViYXJcblxuICByZXR1cm4gKFxuICAgIDxodG1sIGxhbmc9XCJlblwiPlxuICAgICAgPGhlYWQ+XG4gICAgICAgIDxIZWFkQ29udGVudCAvPlxuICAgICAgPC9oZWFkPlxuICAgICAgPGJvZHk+XG4gICAgICAgIDxMYXlvdXQgd2l0aFNpZGViYXI9e3dpdGhTaWRlYmFyfT57cHJvcHMuY2hpbGRyZW59PC9MYXlvdXQ+XG4gICAgICAgIDxUb2FzdGVyIHBvc2l0aW9uPVwidG9wLWNlbnRlclwiIC8+XG4gICAgICAgIDxUYW5TdGFja0RldnRvb2xzXG4gICAgICAgICAgY29uZmlnPXt7IGhpZGVVbnRpbEhvdmVyOiB0cnVlLCBwb3NpdGlvbjogXCJib3R0b20tbGVmdFwiIH19XG4gICAgICAgICAgcGx1Z2lucz17W1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcIlRhblN0YWNrIFF1ZXJ5XCIsXG4gICAgICAgICAgICAgIHJlbmRlcjogPFJlYWN0UXVlcnlEZXZ0b29sc1BhbmVsIC8+LFxuICAgICAgICAgICAgICBkZWZhdWx0T3BlbjogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwiVGFuU3RhY2sgUm91dGVyXCIsXG4gICAgICAgICAgICAgIHJlbmRlcjogPFRhblN0YWNrUm91dGVyRGV2dG9vbHNQYW5lbCAvPixcbiAgICAgICAgICAgICAgZGVmYXVsdE9wZW46IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdfVxuICAgICAgICAvPlxuICAgICAgICA8U2NyaXB0cyAvPlxuICAgICAgPC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgKVxufVxuIl19
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX19yb290LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL3JvdXRlcy9fX3Jvb3QudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUE7QUFDeEUsT0FBTyxFQUNMLGVBQWUsRUFDZixXQUFXLEVBQ1gsTUFBTSxFQUNOLE9BQU8sRUFDUCxRQUFRLEdBQ1QsTUFBTSx3QkFBd0IsQ0FBQTtBQUMvQixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUU3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQTBCLENBQUE7QUFDakQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXdDLENBQUE7QUFDN0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUE0QixDQUFBO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBd0IsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ3BELE9BQU8sY0FBYyxNQUFNLG9CQUFvQixDQUFBO0FBQy9DLE9BQU8sVUFBVSxNQUFNLDJCQUEyQixDQUFBO0FBQ2xELE9BQU8sV0FBVyxNQUFNLDRCQUE0QixDQUFBO0FBRXBELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUM7SUFDbkMsSUFBSSxFQUFFLEdBQUcsRUFBRTtRQUNULE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FDdkIsTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLGNBQWMsRUFDL0MsTUFBTSxDQUFDLElBQUks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dmlydHVhbFwiXG5pbXBvcnQgeyBUYW5TdGFja0RldnRvb2xzIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1kZXZ0b29sc1wiXG5pbXBvcnQgeyBSZWFjdFF1ZXJ5RGV2dG9vbHNQYW5lbCB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3QtcXVlcnktZGV2dG9vbHNcIlxuaW1wb3J0IHtcbiAgY3JlYXRlUm9vdFJvdXRlLFxuICBIZWFkQ29udGVudCxcbiAgT3V0bGV0LFxuICBTY3JpcHRzLFxuICB1c2VNYXRjaCxcbn0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1yb3V0ZXJcIlxuaW1wb3J0IHsgVGFuU3RhY2tSb3V0ZXJEZXZ0b29sc1BhbmVsIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1yb3V0ZXItZGV2dG9vbHNcIlxuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvTGF5b3V0LnRzeFwiXG5pbXBvcnQgeyBEZWZhdWx0Q2F0Y2hCb3VuZGFyeSB9IGZyb20gXCIuLi9jb21wb25lbnRzL0RlZmF1bHRDYXRjaEJvdW5kYXJ5LnRzeFwiXG5pbXBvcnQgeyBOb3RGb3VuZCB9IGZyb20gXCIuLi9jb21wb25lbnRzL05vdEZvdW5kLnRzeFwiXG5pbXBvcnQgeyBUb2FzdGVyIH0gZnJvbSBcIi4uL2VsZW1lbnRzL3Nvbm5lci50c3hcIlxuaW1wb3J0IHsgZmF2aWNvblR5cGUgfSBmcm9tIFwiLi4vaGVscGVycy9mYXZpY29uLnRzXCJcbmltcG9ydCB7IHByZWZpeFVybCB9IGZyb20gXCIuLi9oZWxwZXJzL3ByZWZpeC11cmwudHNcIlxuaW1wb3J0IGRlZmF1bHRGYXZpY29uIGZyb20gXCIuLi9hc3NldHMvbG9nby5zdmdcIlxuaW1wb3J0IGdlbmVyYWxDc3MgZnJvbSBcIi4uL3N0eWxlcy9nZW5lcmFsLmNzcz91cmxcIlxuaW1wb3J0IG1hcmtkb3duQ3NzIGZyb20gXCIuLi9zdHlsZXMvbWFya2Rvd24uY3NzP3VybFwiXG5cbmV4cG9ydCBjb25zdCBSb3V0ZSA9IGNyZWF0ZVJvb3RSb3V0ZSh7XG4gIGhlYWQ6ICgpID0+IHtcbiAgICBjb25zdCBmYXZpY29uID0gcHJlZml4VXJsKFxuICAgICAgY29uZmlnLmZhdmljb24gPz8gY29uZmlnLmxvZ28gPz8gZGVmYXVsdEZhdmljb24sXG4gICAgICBjb25maWcuYmFzZSxcbiAgICApXG4gICAgcmV0dXJuIHtcbiAgICAgIG1ldGE6IFtcbiAgICAgICAgeyBjaGFyU2V0OiBcInV0Zi04XCIgfSxcbiAgICAgICAgeyB0aXRsZTogY29uZmlnLnRpdGxlIH0sXG4gICAgICAgIHsgbmFtZTogXCJkZXNjcmlwdGlvblwiLCBjb250ZW50OiBjb25maWcuZGVzY3JpcHRpb24gfSxcbiAgICAgICAgeyBwcm9wZXJ0eTogXCJvZzp0aXRsZVwiLCBjb250ZW50OiBjb25maWcudGl0bGUgfSxcbiAgICAgICAge1xuICAgICAgICAgIHByb3BlcnR5OiBcIm9nOmRlc2NyaXB0aW9uXCIsXG4gICAgICAgICAgY29udGVudDogY29uZmlnLmRlc2NyaXB0aW9uLFxuICAgICAgICB9LFxuICAgICAgICB7IHByb3BlcnR5OiBcIm9nOnNpdGVfbmFtZVwiLCBjb250ZW50OiBjb25maWcudGl0bGUgfSxcbiAgICAgICAgeyBwcm9wZXJ0eTogXCJvZzp0eXBlXCIsIGNvbnRlbnQ6IFwid2Vic2l0ZVwiIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInZpZXdwb3J0XCIsXG4gICAgICAgICAgY29udGVudDogXCJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MVwiLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGxpbmtzOiBbXG4gICAgICAgIHsgcmVsOiBcImljb25cIiwgaHJlZjogZmF2aWNvbiwgdHlwZTogZmF2aWNvblR5cGUoZmF2aWNvbikgfSxcbiAgICAgICAgeyByZWw6IFwic2hvcnRjdXQgaWNvblwiLCBocmVmOiBmYXZpY29uLCB0eXBlOiBmYXZpY29uVHlwZShmYXZpY29uKSB9LFxuICAgICAgICB7IHJlbDogXCJzdHlsZXNoZWV0XCIsIGhyZWY6IGdlbmVyYWxDc3MgfSxcbiAgICAgICAgeyByZWw6IFwic3R5bGVzaGVldFwiLCBocmVmOiBtYXJrZG93bkNzcyB9LFxuICAgICAgXSxcbiAgICB9XG4gIH0sXG4gIG5vdEZvdW5kQ29tcG9uZW50OiAoKSA9PiA8Tm90Rm91bmQgLz4sXG4gIGVycm9yQ29tcG9uZW50OiBwcm9wcyA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEb2N1bWVudD5cbiAgICAgICAgPERlZmF1bHRDYXRjaEJvdW5kYXJ5IHsuLi5wcm9wc30gLz5cbiAgICAgIDwvRG9jdW1lbnQ+XG4gICAgKVxuICB9LFxuICBjb21wb25lbnQ6ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPERvY3VtZW50PlxuICAgICAgICA8T3V0bGV0IC8+XG4gICAgICA8L0RvY3VtZW50PlxuICAgIClcbiAgfSxcbn0pXG5cbmZ1bmN0aW9uIERvY3VtZW50KHByb3BzOiB7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfSkge1xuICBjb25zdCBhcnRpY2xlUm91dGUgPSB1c2VNYXRjaCh7IGZyb206IFwiLyRcIiwgc2hvdWxkVGhyb3c6IGZhbHNlIH0pXG4gIGNvbnN0IHdpdGhTaWRlYmFyID0gYXJ0aWNsZVJvdXRlPy5sb2FkZXJEYXRhPy5zaWRlYmFyXG5cbiAgcmV0dXJuIChcbiAgICA8aHRtbCBsYW5nPVwiZW5cIj5cbiAgICAgIDxoZWFkPlxuICAgICAgICA8SGVhZENvbnRlbnQgLz5cbiAgICAgIDwvaGVhZD5cbiAgICAgIDxib2R5PlxuICAgICAgICA8TGF5b3V0IHdpdGhTaWRlYmFyPXt3aXRoU2lkZWJhcn0+e3Byb3BzLmNoaWxkcmVufTwvTGF5b3V0PlxuICAgICAgICA8VG9hc3RlciBwb3NpdGlvbj1cInRvcC1jZW50ZXJcIiAvPlxuICAgICAgICA8VGFuU3RhY2tEZXZ0b29sc1xuICAgICAgICAgIGNvbmZpZz17eyBoaWRlVW50aWxIb3ZlcjogdHJ1ZSwgcG9zaXRpb246IFwiYm90dG9tLWxlZnRcIiB9fVxuICAgICAgICAgIHBsdWdpbnM9e1tcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJUYW5TdGFjayBRdWVyeVwiLFxuICAgICAgICAgICAgICByZW5kZXI6IDxSZWFjdFF1ZXJ5RGV2dG9vbHNQYW5lbCAvPixcbiAgICAgICAgICAgICAgZGVmYXVsdE9wZW46IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcIlRhblN0YWNrIFJvdXRlclwiLFxuICAgICAgICAgICAgICByZW5kZXI6IDxUYW5TdGFja1JvdXRlckRldnRvb2xzUGFuZWwgLz4sXG4gICAgICAgICAgICAgIGRlZmF1bHRPcGVuOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXX1cbiAgICAgICAgLz5cbiAgICAgICAgPFNjcmlwdHMgLz5cbiAgICAgIDwvYm9keT5cbiAgICA8L2h0bWw+XG4gIClcbn1cbiJdfQ==
@@ -16,15 +16,29 @@ export default defineConfig({
16
16
  contentCollections({ configPath: "content-collections.ts" }),
17
17
  tanstackStart({
18
18
  srcDirectory: ".",
19
- pages: [{ path: "/" }],
20
- prerender: { enabled: true, crawlLinks: true },
19
+ // Seed path must match what the crawler produces (router-emitted
20
+ // hrefs include the basepath), otherwise prerender records both
21
+ // shapes and the sitemap ends up with duplicate entries.
22
+ pages: [{ path: config.base ? `${config.base}/` : "/" }],
23
+ // Disable route-tree auto-discovery: it produces basepath-naive
24
+ // paths (e.g. `/`) that duplicate the crawl-derived prefixed paths,
25
+ // bloating pages.json and sitemap. Crawling from the seed already
26
+ // reaches every linked page.
27
+ prerender: {
28
+ enabled: true,
29
+ crawlLinks: true,
30
+ autoStaticPathsDiscovery: false,
31
+ },
21
32
  sitemap: config.site
22
33
  ? { enabled: true, host: config.site }
23
34
  : { enabled: false },
24
- router: { generatedRouteTree: "routeTree.gen.ts" },
35
+ router: {
36
+ generatedRouteTree: "routeTree.gen.ts",
37
+ basepath: config.base,
38
+ },
25
39
  }),
26
40
  react(),
27
41
  svgr(),
28
42
  ],
29
43
  });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zb3VyY2Uvdml0ZS5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxrQkFBa0IsTUFBTSwyQkFBMkIsQ0FBQTtBQUMxRCxPQUFPLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQ2pFLE9BQU8sS0FBSyxNQUFNLHNCQUFzQixDQUFBO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDbkMsT0FBTyxJQUFJLE1BQU0sa0JBQWtCLENBQUE7QUFDbkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUVyRCxNQUFNLE1BQU0sR0FBRyxNQUFNLFVBQVUsRUFBRSxDQUFBO0FBRWpDLGVBQWUsWUFBWSxDQUFDO0lBQzFCLE9BQU8sRUFBRTtRQUNQLFFBQVEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLFFBQVEsRUFBRTtRQUNWLFFBQVEsRUFBRTtRQUNWLGtCQUFrQixDQUFDLEVBQUUsVUFBVSxFQUFFLHdCQUF3QixFQUFFLENBQUM7UUFDNUQsYUFBYSxDQUFDO1lBQ1osWUFBWSxFQUFFLEdBQUc7WUFDakIsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDdEIsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFO1lBQzlDLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDbEIsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRTtnQkFDdEMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtZQUN0QixNQUFNLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRTtTQUNuRCxDQUFDO1FBQ0YsS0FBSyxFQUFFO1FBQ1AsSUFBSSxFQUFFO0tBQ1A7Q0FDRixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29udGVudENvbGxlY3Rpb25zIGZyb20gXCJAY29udGVudC1jb2xsZWN0aW9ucy92aXRlXCJcbmltcG9ydCB0YWlsd2luZCBmcm9tIFwiQHRhaWx3aW5kY3NzL3ZpdGVcIlxuaW1wb3J0IHsgZGV2dG9vbHMgfSBmcm9tIFwiQHRhbnN0YWNrL2RldnRvb2xzLXZpdGVcIlxuaW1wb3J0IHsgdGFuc3RhY2tTdGFydCB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3Qtc3RhcnQvcGx1Z2luL3ZpdGVcIlxuaW1wb3J0IHJlYWN0IGZyb20gXCJAdml0ZWpzL3BsdWdpbi1yZWFjdFwiXG5pbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tIFwidml0ZVwiXG5pbXBvcnQgc3ZnciBmcm9tIFwidml0ZS1wbHVnaW4tc3ZnclwiXG5pbXBvcnQgeyBsb2FkQ29uZmlnIH0gZnJvbSBcIi4vYWN0aW9ucy9jb25maWcvbG9hZC50c1wiXG5pbXBvcnQgeyBsaXZlbWFyayB9IGZyb20gXCIuL3BsdWdpbnMvdml0ZS1saXZlbWFyay50c1wiXG5cbmNvbnN0IGNvbmZpZyA9IGF3YWl0IGxvYWRDb25maWcoKVxuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoe1xuICBwbHVnaW5zOiBbXG4gICAgbGl2ZW1hcmsoeyBjb25maWcgfSksXG4gICAgZGV2dG9vbHMoKSxcbiAgICB0YWlsd2luZCgpLFxuICAgIGNvbnRlbnRDb2xsZWN0aW9ucyh7IGNvbmZpZ1BhdGg6IFwiY29udGVudC1jb2xsZWN0aW9ucy50c1wiIH0pLFxuICAgIHRhbnN0YWNrU3RhcnQoe1xuICAgICAgc3JjRGlyZWN0b3J5OiBcIi5cIixcbiAgICAgIHBhZ2VzOiBbeyBwYXRoOiBcIi9cIiB9XSxcbiAgICAgIHByZXJlbmRlcjogeyBlbmFibGVkOiB0cnVlLCBjcmF3bExpbmtzOiB0cnVlIH0sXG4gICAgICBzaXRlbWFwOiBjb25maWcuc2l0ZVxuICAgICAgICA/IHsgZW5hYmxlZDogdHJ1ZSwgaG9zdDogY29uZmlnLnNpdGUgfVxuICAgICAgICA6IHsgZW5hYmxlZDogZmFsc2UgfSxcbiAgICAgIHJvdXRlcjogeyBnZW5lcmF0ZWRSb3V0ZVRyZWU6IFwicm91dGVUcmVlLmdlbi50c1wiIH0sXG4gICAgfSksXG4gICAgcmVhY3QoKSxcbiAgICBzdmdyKCksXG4gIF0sXG59KVxuIl19
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zb3VyY2Uvdml0ZS5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxrQkFBa0IsTUFBTSwyQkFBMkIsQ0FBQTtBQUMxRCxPQUFPLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQ2pFLE9BQU8sS0FBSyxNQUFNLHNCQUFzQixDQUFBO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDbkMsT0FBTyxJQUFJLE1BQU0sa0JBQWtCLENBQUE7QUFDbkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUVyRCxNQUFNLE1BQU0sR0FBRyxNQUFNLFVBQVUsRUFBRSxDQUFBO0FBRWpDLGVBQWUsWUFBWSxDQUFDO0lBQzFCLE9BQU8sRUFBRTtRQUNQLFFBQVEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLFFBQVEsRUFBRTtRQUNWLFFBQVEsRUFBRTtRQUNWLGtCQUFrQixDQUFDLEVBQUUsVUFBVSxFQUFFLHdCQUF3QixFQUFFLENBQUM7UUFDNUQsYUFBYSxDQUFDO1lBQ1osWUFBWSxFQUFFLEdBQUc7WUFDakIsaUVBQWlFO1lBQ2pFLGdFQUFnRTtZQUNoRSx5REFBeUQ7WUFDekQsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3hELGdFQUFnRTtZQUNoRSxvRUFBb0U7WUFDcEUsa0VBQWtFO1lBQ2xFLDZCQUE2QjtZQUM3QixTQUFTLEVBQUU7Z0JBQ1QsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLHdCQUF3QixFQUFFLEtBQUs7YUFDaEM7WUFDRCxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2xCLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUU7Z0JBQ3RDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7WUFDdEIsTUFBTSxFQUFFO2dCQUNOLGtCQUFrQixFQUFFLGtCQUFrQjtnQkFDdEMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2FBQ3RCO1NBQ0YsQ0FBQztRQUNGLEtBQUssRUFBRTtRQUNQLElBQUksRUFBRTtLQUNQO0NBQ0YsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbnRlbnRDb2xsZWN0aW9ucyBmcm9tIFwiQGNvbnRlbnQtY29sbGVjdGlvbnMvdml0ZVwiXG5pbXBvcnQgdGFpbHdpbmQgZnJvbSBcIkB0YWlsd2luZGNzcy92aXRlXCJcbmltcG9ydCB7IGRldnRvb2xzIH0gZnJvbSBcIkB0YW5zdGFjay9kZXZ0b29scy12aXRlXCJcbmltcG9ydCB7IHRhbnN0YWNrU3RhcnQgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXN0YXJ0L3BsdWdpbi92aXRlXCJcbmltcG9ydCByZWFjdCBmcm9tIFwiQHZpdGVqcy9wbHVnaW4tcmVhY3RcIlxuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcInZpdGVcIlxuaW1wb3J0IHN2Z3IgZnJvbSBcInZpdGUtcGx1Z2luLXN2Z3JcIlxuaW1wb3J0IHsgbG9hZENvbmZpZyB9IGZyb20gXCIuL2FjdGlvbnMvY29uZmlnL2xvYWQudHNcIlxuaW1wb3J0IHsgbGl2ZW1hcmsgfSBmcm9tIFwiLi9wbHVnaW5zL3ZpdGUtbGl2ZW1hcmsudHNcIlxuXG5jb25zdCBjb25maWcgPSBhd2FpdCBsb2FkQ29uZmlnKClcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKHtcbiAgcGx1Z2luczogW1xuICAgIGxpdmVtYXJrKHsgY29uZmlnIH0pLFxuICAgIGRldnRvb2xzKCksXG4gICAgdGFpbHdpbmQoKSxcbiAgICBjb250ZW50Q29sbGVjdGlvbnMoeyBjb25maWdQYXRoOiBcImNvbnRlbnQtY29sbGVjdGlvbnMudHNcIiB9KSxcbiAgICB0YW5zdGFja1N0YXJ0KHtcbiAgICAgIHNyY0RpcmVjdG9yeTogXCIuXCIsXG4gICAgICAvLyBTZWVkIHBhdGggbXVzdCBtYXRjaCB3aGF0IHRoZSBjcmF3bGVyIHByb2R1Y2VzIChyb3V0ZXItZW1pdHRlZFxuICAgICAgLy8gaHJlZnMgaW5jbHVkZSB0aGUgYmFzZXBhdGgpLCBvdGhlcndpc2UgcHJlcmVuZGVyIHJlY29yZHMgYm90aFxuICAgICAgLy8gc2hhcGVzIGFuZCB0aGUgc2l0ZW1hcCBlbmRzIHVwIHdpdGggZHVwbGljYXRlIGVudHJpZXMuXG4gICAgICBwYWdlczogW3sgcGF0aDogY29uZmlnLmJhc2UgPyBgJHtjb25maWcuYmFzZX0vYCA6IFwiL1wiIH1dLFxuICAgICAgLy8gRGlzYWJsZSByb3V0ZS10cmVlIGF1dG8tZGlzY292ZXJ5OiBpdCBwcm9kdWNlcyBiYXNlcGF0aC1uYWl2ZVxuICAgICAgLy8gcGF0aHMgKGUuZy4gYC9gKSB0aGF0IGR1cGxpY2F0ZSB0aGUgY3Jhd2wtZGVyaXZlZCBwcmVmaXhlZCBwYXRocyxcbiAgICAgIC8vIGJsb2F0aW5nIHBhZ2VzLmpzb24gYW5kIHNpdGVtYXAuIENyYXdsaW5nIGZyb20gdGhlIHNlZWQgYWxyZWFkeVxuICAgICAgLy8gcmVhY2hlcyBldmVyeSBsaW5rZWQgcGFnZS5cbiAgICAgIHByZXJlbmRlcjoge1xuICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICBjcmF3bExpbmtzOiB0cnVlLFxuICAgICAgICBhdXRvU3RhdGljUGF0aHNEaXNjb3Zlcnk6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHNpdGVtYXA6IGNvbmZpZy5zaXRlXG4gICAgICAgID8geyBlbmFibGVkOiB0cnVlLCBob3N0OiBjb25maWcuc2l0ZSB9XG4gICAgICAgIDogeyBlbmFibGVkOiBmYWxzZSB9LFxuICAgICAgcm91dGVyOiB7XG4gICAgICAgIGdlbmVyYXRlZFJvdXRlVHJlZTogXCJyb3V0ZVRyZWUuZ2VuLnRzXCIsXG4gICAgICAgIGJhc2VwYXRoOiBjb25maWcuYmFzZSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgcmVhY3QoKSxcbiAgICBzdmdyKCksXG4gIF0sXG59KVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "livemark",
3
- "version": "0.14.0",
3
+ "version": "0.16.0",
4
4
  "description": "Livemark description",
5
5
  "license": "MIT",
6
6
  "author": "Evgeny Karev",
@@ -8,6 +8,7 @@ import {
8
8
  sortedArticles,
9
9
  } from "../content/article.ts"
10
10
  import { DynamicIcon } from "../helpers/dynamic-icon.tsx"
11
+ import { prefixUrl } from "../helpers/prefix-url.ts"
11
12
  import { sectionIcon } from "../helpers/section.ts"
12
13
  import {
13
14
  SidebarInset,
@@ -68,6 +69,21 @@ export function Layout(props: {
68
69
  sections
69
70
  .filter(section => section.position === "header")
70
71
  .map(section => {
72
+ if (section.type === "external") {
73
+ return (
74
+ <a
75
+ key={section.url}
76
+ href={prefixUrl(section.url, config.base)}
77
+ className="inline-flex items-center gap-1.5 text-foreground opacity-80 hover:opacity-100 transition-opacity"
78
+ >
79
+ <DynamicIcon
80
+ name={sectionIcon(section)}
81
+ className="size-3.5"
82
+ />
83
+ <span>{section.title}</span>
84
+ </a>
85
+ )
86
+ }
71
87
  const isActive = activeSection?.prefix === section.prefix
72
88
  const target =
73
89
  section.type === "blog" || section.type === "changelog"
@@ -121,7 +137,7 @@ export function Layout(props: {
121
137
  .map(link => (
122
138
  <a
123
139
  key={link.url}
124
- href={link.url}
140
+ href={prefixUrl(link.url, config.base)}
125
141
  className="text-foreground opacity-80 hover:opacity-100 transition-opacity"
126
142
  >
127
143
  {link.icon && (
@@ -2,9 +2,9 @@ import { config } from "livemark:virtual"
2
2
  import { Link, useLocation } from "@tanstack/react-router"
3
3
  import { ChevronRight } from "lucide-react"
4
4
  import {
5
- articleGroups,
5
+ articleTree,
6
6
  currentSection,
7
- sectionArticleGroups,
7
+ sectionArticleTrees,
8
8
  } from "../content/article.ts"
9
9
  import {
10
10
  Collapsible,
@@ -31,30 +31,23 @@ export function SidebarArticles() {
31
31
 
32
32
  const configSections = config.sections
33
33
  const section = currentSection(`/${pathname.replace(/^\/|\/$/g, "")}/`)
34
- const groups = configSections?.length
35
- ? (sectionArticleGroups.get(section?.prefix ?? "__default__") ??
36
- articleGroups)
37
- : articleGroups
34
+ const tree = configSections?.length
35
+ ? (sectionArticleTrees.get(section?.prefix ?? "__default__") ?? articleTree)
36
+ : articleTree
38
37
 
39
38
  return (
40
- <>
41
- {groups.map((group, index) => (
42
- <SidebarGroup key={group.name ?? `__unnamed-${index}`}>
43
- {group.name && (
44
- <SidebarGroupLabel className="uppercase font-mono text-xs tracking-widest">
45
- {group.name}
46
- </SidebarGroupLabel>
47
- )}
48
- <SidebarGroupContent>
49
- <SidebarMenu>
50
- {group.nodes.map(node => (
51
- <NavNode key={node.path} node={node} currentPath={pathname} />
52
- ))}
53
- </SidebarMenu>
54
- </SidebarGroupContent>
55
- </SidebarGroup>
56
- ))}
57
- </>
39
+ <SidebarGroup>
40
+ <SidebarGroupLabel className="uppercase font-mono text-xs tracking-widest">
41
+ Articles
42
+ </SidebarGroupLabel>
43
+ <SidebarGroupContent>
44
+ <SidebarMenu>
45
+ {tree.map(node => (
46
+ <NavNode key={node.path} node={node} currentPath={pathname} />
47
+ ))}
48
+ </SidebarMenu>
49
+ </SidebarGroupContent>
50
+ </SidebarGroup>
58
51
  )
59
52
  }
60
53
 
@@ -2,6 +2,7 @@ import { config } from "livemark:virtual"
2
2
  import { useLocation } from "@tanstack/react-router"
3
3
  import { currentSection } from "../content/article.ts"
4
4
  import { DynamicIcon } from "../helpers/dynamic-icon.tsx"
5
+ import { prefixUrl } from "../helpers/prefix-url.ts"
5
6
  import {
6
7
  SidebarGroup,
7
8
  SidebarGroupContent,
@@ -41,7 +42,7 @@ export function SidebarLinks() {
41
42
  >
42
43
  <SidebarMenuButton
43
44
  className="text-muted-foreground"
44
- render={<a href={link.url} />}
45
+ render={<a href={prefixUrl(link.url, config.base)} />}
45
46
  >
46
47
  {link.icon && (
47
48
  <DynamicIcon name={link.icon} className="size-4" />
@@ -2,6 +2,7 @@ import { config } from "livemark:virtual"
2
2
  import { Link, useLocation, useMatch } from "@tanstack/react-router"
3
3
  import { currentSection, sectionFirstArticle } from "../content/article.ts"
4
4
  import { DynamicIcon } from "../helpers/dynamic-icon.tsx"
5
+ import { prefixUrl } from "../helpers/prefix-url.ts"
5
6
  import { sectionIcon } from "../helpers/section.ts"
6
7
  import {
7
8
  SidebarGroup,
@@ -38,12 +39,28 @@ export function SidebarSections() {
38
39
  <SidebarGroupContent>
39
40
  <SidebarMenu>
40
41
  {sections.map(s => {
42
+ const mobileOnly = s.position !== "sidebar"
43
+ if (s.type === "external") {
44
+ return (
45
+ <SidebarMenuItem
46
+ key={s.url}
47
+ className={mobileOnly ? "md:hidden" : undefined}
48
+ >
49
+ <SidebarMenuButton
50
+ className="opacity-75"
51
+ render={<a href={prefixUrl(s.url, config.base)} />}
52
+ >
53
+ <DynamicIcon name={sectionIcon(s)} className="size-4" />
54
+ <span>{s.title}</span>
55
+ </SidebarMenuButton>
56
+ </SidebarMenuItem>
57
+ )
58
+ }
41
59
  const target =
42
60
  s.type === "blog" || s.type === "changelog"
43
61
  ? s.prefix
44
62
  : (sectionFirstArticle.get(s.prefix) ?? s.prefix)
45
63
  const active = section?.prefix === s.prefix
46
- const mobileOnly = s.position !== "sidebar"
47
64
  return (
48
65
  <SidebarMenuItem
49
66
  key={s.prefix}
@@ -1,9 +1,10 @@
1
1
  import { config } from "livemark:virtual"
2
+ import { prefixUrl } from "../helpers/prefix-url.ts"
2
3
  import defaultLogo from "../assets/logo.svg"
3
4
 
4
5
  /** Renders the site logo, title, and description in the sidebar header */
5
6
  export function SiteTitle() {
6
- const logo = config.logo ?? defaultLogo
7
+ const logo = prefixUrl(config.logo ?? defaultLogo, config.base)
7
8
  return (
8
9
  <div className="flex items-end gap-2.5 text-sm">
9
10
  <img src={logo} alt={config.title} className="size-6.5 mb-1.25" />